Installation.txt  30 March 2003

Steps to install the DecapMidiMapper correctly.
 
Step 1)--The first step is the installation of the MidiYoke.  This is an internal port driver to connect MIDI applications internally to each other.  The idea is that you use a program like Cakewalk (or any other MIDI playing program) to play the MIDI file.  But you don't send the MIDI straight to your sound card, but to the MidiMapper.  This application sends the MIDI, after transforming it accordingly by the mapper, to the sound card.

So the MIDI sream is as follows: Music program MIDI out = MidiYoke1, MidiMapper input is MidiYoke1, MidiMapper output(s) are up to 4 sound cards or MIDI devices of your choice.

To download and install the MidiYoke go to the MidiYoke site:
 
http://www.midiox.com/index.htm?http://www.midiox.com/myoke.htm

It includes all information you need.  If you are successful, you should see the MidiYoke ports added on your PC.  You can check this in. for example. Cakewalk under MIDI devices.
 
Step 2)--Create a directory of your choice in which you can copy all the needed files (for example, just "MidiMapper").  Copy the files "DecapTimerSetup.exe", "MapCreator.exe", "DemoMidiMapper.exe" (and also the registered MidiMapper version if you have it) and this text file to that directory.

Put the included set-up program in a directory of your choice (for example Timer or DecapTimer), and run it.
 
Maak een map aan waar je de MidiMapper naartoe wil kopieren. De naam mag je zelf kiezen, Bv. "MidiMapper" (hmm, erg origineel... ;-). Kopieer er dan de bestanden  "DecapTimerSetup.exe", "MapCreator.exe" en "DemoMidiMapper.exe" (en/of ook de geregistreerde MidiMapper) naartoe.

Step 3) -- Install the DecapTimer (DecapTimerSetup.exe). This is the high resolution timer the application needs for the delays with millisecond resolution. Just double click and follow the setup instructions.
 
Step 4) -- Start the application you want to work with (MapCreator or MidiMapper or both).

********************************

MapCreator
-------------

The MapCreator is used to create the mappers (conversion-lists) and to save them. This application creates a subdirectory called Mappers, and this is best used to store al mappers you create, so that you can easily find them when you want to load the mapper in the MidiMapper application. MapCreator has no copy protection (like the MidiMapper Demo), and can be freely distributed.

Some more explanation:
 
-- "From" column (not changeable) is the source note.
-- So the first column that you can change (To) represents the destination note.
-- 2nd (Chan) is the channel this note is supposed to go to
-- 3rd (Port) is the output port of the note. There are 4 output ports available. What these ports actually stand for depends on the output devices you selected in the MidiMapper program.
-- 4th (Vel%) is the velocity percentage. For example 100 means not changed, 50% means half the velocity, 200 means double the velocity (with a value of 127 as highest possible).
-- 5th (+MS) is the MilliSecond delay, or the time the note is supposed to wait before it goes out.
-- 6th (Patch) is a patch (or program change) that the source note can force to send. So for example if the source note is the register JazzFlute, you can set the destination note to -1 (no note is send), set the channel and port the same as the melody note's, and set the Patch to 76, so that the PanFlute patch on the GM soundmodule is selected when the JazzFlute note is detected.
-- 7th (Ctrl#) Is the Control Number that the source not can force to send. ControlNumber 7 is the volume, so following the same strategy as the patch, you could send a volume change that put the PanFlute properly in the mix.
-- 8th (CtrVal) is the ControlValue, so in our example the actual volume of the PanFlute.

An example of a register note is the following.
 
Say that note 20 is the registernote for the JazzFlute, then you set:
 
From=20 (you can not change this. It just is line # 20).
To= -1 (-1 meaning you don't send the note)
Chan= 5 (if you also mapped the melody to channel on 5)
Port= 1 (if you also have set the melody on port one)
Vel%= 100 (you do not use the velocity any way, as you have set "To" to -1)
+MS= 0 (or you could use this to slide the patch forward in time)
Patch= 76 (this is GM PanFlute)
Ctrl= 7 (select the volume as the controller  you want to send)
CtrVal= 89 (set the volume to 89)
 
So now, when the JazzFlute note is detected, the note is not send, but a PanFlute patch is send on Channel 5 trough Port 1 and the volume is set to 89.
 
One more note I want to make is that for compatibility's sake (if we want to exchange mappers later on) we should try to follow some guidelines.
 
So the first guideline I like to propose is that the destination channels are as follows:
 
Bass = Channel 2
Accomp = Channel 3
Counter Melody = Channel 4
Melody = Channel 5
Drums = Channel 10

********************************

MidiMapper
------------ 

The included MidiMapper is the Demo-version. This version is limited to 15 minutes of use, after which you have to restart the app again (unlimited times).

This demo generates a PC-ID number that you need to send if you want to upgrade to a registered version (price 50 EURO). Use the Copy to Clipboard function included in the Help to prevent typing errors.

The MidiMapper application allows you to open the mappers created with the MapCreator. To use this program, you must open a mapper, select the proper midi devices and you should be ready to go. An example of how to set the devices: Cakewalk-out: MidiYoke1, MidiMapper in: MidiYoke1, MidiMapper-out: your soundcard).

The PC-ID number protection may cause some dismay for which we apologize. But designing a stable application is not so easy. Then the program is so easily past on between friends for "old time's sake", that it will become impossible to support the program in the future. 

Good luck with de installation of the MidiMapper!

*********************************
*********************************

There are things that the MidiMapper can do, and there are things it can not do.
 
******************************

What this MidiMapper does is:
 
--Map "each incoming note" of "each of the 16 midi channels" different according the 16 map's, one for each channel.
--Provide timing offset to slide notes in time.
--Allow notes to send patches and controllers.
 
What this MidiMapper does not (yet) do:
 
--Duplicate the parts multiple times according to the amount of ranks of pipes playing.

*****************************
 
Now that last part is a problem. You can understand that, according to changes in the registration of the organ, the soundcard should change to sounds that represents the rank of pipes playing. So when a rank of trumpet plays, a trumpet sound should be selected on the soundcard, and when a rank of violins play, you could select for example strings to substitute for the violins of the organ.
 
But what happens if both the trumpet AND the violins play at the same time??
 
This is a problem for midi. The reason is that midi is not set-up to work that way. Midi is designed to have a certain instrument play on a certain midi channel, that's it. If you want two instruments to play at the same time, you must duplicate that part to two track's each playing at a different channel with a different sound.
 
The organs we know for so long are designed with a completely different approach. Here the problem was that there was only a limited amount of keys in a keyframe (a limitation midi does not have), so the idea appeared to have the same key play multiple ranks of pipes and a scheme of registrations would decide what ranks these were going to be.
 
So here I am to find a solution that combines this two worlds.
 
The only solution to the problem is to create ghost parts that play on different channels. But as you can imagine, this is going to make the MidiMapper a lot more complex, which in turn is not going to make things easier to understand for the user of the MidiMapper.
 
But I do have a solution in the making that should be transparent enough to understand.
 
As it is now, the last patch send will be the one played. So going back to our previous example, it is going to be OR the trumpet, OR the strings playing the part, but not both sounds together.

You then have to select a sound (and if you want a volume adjustment you also have to set the controller) that will substitute for the rank of pipes it represents. But when two or more ranks are playing at the same time, the last send patch will be the one you hear.
 
You can do limited selection of the sound you want to hear by shifting the time of the register note that sends the patch. With this I mean to say that, if you set the +MS of the trumpet register to 50, this patch will be send 50 milliseconds later. So if the trumpet and the strings are taken at the same time, the trumpet patch will be send a little later, so this will be the sound you get on the melody.
 
The next update will create ghost parts for the sounds that currently are not played.
 
