home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
202.lha
/
MidiRouter_v0.1
/
Tutorial.doc
< prev
next >
Wrap
Text File
|
1988-12-27
|
32KB
|
669 lines
Getting Started
---------------
This Document will be mostly in the form of a tutorial. Many parts of
this program are not well documented because of the need for some kind
of copy protection. My belief on documentation is it should be on-line
and the program "User Friendly". But this documentation will contain many
useful features of the software. I also believe that examples is the
fastest way to learn. There are several examples that may be loaded.
First, you should make a new directory for all the executables. Add this
directory to your path and copy the MidiRouter, SplitNote, and SSBridge
programs and .info files. Next, make sure you have the files 'Midi.library'
and 'arp.library' is in your libs: directory. If you are using SoundScape
this should be the same place as 'SoundScape.library'. Both the libraries
'Midi.library' and 'arp.library' are not included in this demo but are PD
and may be found on the "Musician's SnowBird Den" in the file 'MRouter2.arc'.
The file 'MidiRouter.CHIP" should be in this directory as well as all the
".route" and ".env" files. See Read.Me for complete installation instructions.
You should now be ready to run. The easies way to get something
running is to run the SplitNote routine in the /midi mode. This mode
not only starts the module but adds routes to both MidiIn and MidiOut.
This mode is mainly intended if you are not going to be using MidiRouter or
SoundScape. If MidiRouter is run with this module in this mode, the
module will be shown on the patch panel but not the routes. The only
way to remove the routes added by the module is to leave the program.
> Double click on the SplitNote+midi icon or run "SplitNote /midi"
from CLI.
First, the CopyRight window is displayed. Click "OK" to continue.
> Click OK in Copyright window
A small window is opened in the upper left corner. To leave the SplitNote
module, close this window. To edit the presets of the SplitNote module
use the menu of the "SplitNote" window. There are three options on this
menu. The first enters the edit routine. "Read" and "Write" are used to
save and load banks of presets but is not available for this demo.
But presets can be read by MidiRouter and sent to this Module.
At this point, the MidiLib nodes "SplitNote" have been created and, because
of the /midi option, routes connected to MidiIn and MidiOut. The default
split point is at C3.
> Select "Edit" option from the menu on the "SplitNote" window
A new window is opened and the MIDI stream will not send messages. This
interruption of the MIDI flow will not happen if this edit window is opened
from the MidiRouter. But when running a module by its self, make sure
you do not leave this edit window open.
Since this module is most useful when used with other modules and the
route capabilities of MidiRouter, lets leave this module and restart it
without routes being connected to MIDI. We will use
MidiRouter for that.
> Close Edit window of SplitNote
> Close "SplitNote" window to leave module and remove routes to MIDI.
> Double click on SplitNote without +midi option.
> Click on "OK" of CopyRight Window
The window "SplitNote" is create as before.
> Double click on MidiRouter icon to start MidiRouter program.
> Click on "OK" of CopyRight Window.
The MidiRouter patch panel is now opened and icons for Midi IN/OUT and
the SplitNote module are displayed. To connect a route from MidiIn to
SplitNote, use the mouse and click on the Midi icon on the left, then on
the SplitNote icon on the right. A line is drawn representing
the route.
> Click on MidiIn on left then SplitNote on right.
Add another route from SplitNote to MidiOut.
> Click on SplitNote on left then MidiOut on right.
There is now a split point at C3 for notes on Midi channel 1. To see
the presets for the SplitNote module, double click on the modules icon
in the Patch Panel.
> Double click on SplitNote icon on either left or right.
The edit window for the SplitNote module is now displayed and will be
explained later. For now though, you may change the split point by pointing
to the C3 label under "split point", pressing and HOLDING down the left
mouse button, and draging the mouse up or down while holding the left
mouse button down. The preset number at the top of the window may be
changed in a like wise faction. SplitNote preset number 2 has two
split points set at C2 and C4. Unlike being in the edit window while
running a module's edit routine, the flow of midi data is NOT interrupted
and all edits are active when the left mouse button is released.
> Close SplitNote's edit window.
Creating and Displaying routes
==============================
The creation of routes between module nodes is the primary function
of MidiRouter. These routes are defined by Bill Bartons MidiLib. Basicly,
routes are used to select which MIDI messages should be passed to the
routes destination. Notes may have there note value shifted. The midi
channel may also be shifted by the route. This gives an incredible
amount of processing power simply in how messages are routed. My hat off
to Bill on this.
So lets use MidiRouter to select where to place routes and how to filter
the data. By using routes between MidiIn and MidiOut alone there are a
number of useful things to do. First, lets create an environment where
all notes coming from MIDI channel 1 is layered such that a minor
chord is played with the 3rd and 5th of the chord each playing a different
sound.
The Display Mask
----------------
First, since no midi data will be sent to MIDI out until a route is
created, lets create a route with no filtering from MidiIn to MidiOut.
To do this we must first set the display mask to include all MIDI messages.
This is the default state when the program is first run.
The display mask is the setting of the gadgets in the top half of the
MidiRouter window. The row of gadgets to the right of the "MSG:" text is
used to select which MIDI message types are to be shown on the display.
It also says what message filtering to use on NEW routes created. It
will not change the settings of routes already connected. But it will
change the routes currently display. This will be demonstrated in a
moment. The gadgets right of the "CH:" text are used to select which
MIDI channels are active. The scrolling gadget to the right of the text
"Solo" is used to change the mode of the message and channel filter
gadgets. When "Solo" is selected, the five options may be selected by
holding down the left mouse button and moving the mouse up or down. The
options are:
None - Each gadget for MSG: and CH: only toggle on or off.
MSG - When selecting a MSG: gadget, turn off all other messages.
Chan - When selecting a CH: gadget, turn off all other channels.
Both - Solo both Message and Channel gadgets.
AllOn - Turn all message and channel gadgets on.
First lets make sure there are currently no routes. On the menu for window
"MidiRouter #1", under the menu option "Routes" select the option "Clear".
This will erase all routes.
> Execute menu option "Clear" under menu "Routes"
Now make sure all message types and channels are on.
> Use "Solo" scroll gadget and select "AllOn".
Now we can connect are route from MidiIn to MidiOut.
> Point to MidiIn icon on left then MidiOut icon on right.
If at any time we wish to remove a route, simply point to the two icons
of the route to delete. This only works if there is only one route between
these two modules.
> Point to MidiIn icon then MidiOut icon to delete route.
> Reconnect route again as before.
So now we want to add a second route between MidiIn and MidiOut. But we
can not just point to the two icons because that would remove the old
route instead. The "Add" icon is used to add routes over existing ones.
> Point to the "Add" gadget in the "MidiRouter" window.
The message "--> Select Source" is displayed in the MidiRouter's prompt
window just above the line in the middle of the window.
> Point to MidiIn. Message on prompt line changes.
> Point to MidiOut.
A new route is added and the line changes color to indicate that more than
one route is now connected. Since we want this new route
to transpose the note and MIDI channel, we first have to edit the routes.
To do this point to the "edit" command and then select the source and
destination of the routes to edit.
> Click on "Edit".
> Select "MidiIn" then Select "MidiOut"
The route edit window is now entered. This is where you can edit all
parameters used by the MidiLib route manager. In the example we are doing,
we want to shift the second note to be a minor 3rd above the root. We
also want this to be a different sound so we will want to shift the MIDI
channel. But before we do that, note that since we never turned off any
of the other midi message types, all the controllers, system exclusive,
pitch bends, program changes, etc. will be duplicated. To prevent this
we need to turn off all message types except notes in the second route.
There is a short cut to doing this. Clicking on the "Clear" gadget on the
right side of the route to clear.
> Click on "Clear" gadget on the far right of route 2.
If the route editor is left with all messages or channels cleared, the
route is deleted. Now turn on note filtering, channel 1, and note
transpose to a miner 3rd.
> Click on route 2's note filter to toggle to "Y".
> Scroll note transpose to 3. Note transpose is the scroll gadget
second from the left.
> Click on channel 1 for route 2.
Last we need to increment the MIDI channel. By changing offset to
1, messages on channel one will be mapped to channel two.
> Scroll route 2 offset to 1.
All changes in this window are effective now. Be careful not to have notes
on when changing either the channel offset or the Note transpose as this
will leave notes hanging.
Leave the edit window by closing it. We can now use the message display
mask to tell us something about where we have messages. If you set the
Solo scroll gadget to "Both" and select "PW" and "CH1", the number of
routes display will be two and the color will be yellow instead of white
indicating more than one route (at least yellow with my preferance).
> Close route editor window.
> Select "Both" for Solo gadget.
> Click Note (N) Message. All other filter turns off.
> Click on channel 1. All other channels turn off.
The route turns yellow. There is more than one route connected from
MidiIn to MidiOut with note messages on channel 1.
> Click on channel 2. Channel 1 goes off.
The route turns white. There is only one route passing only notes on
channel 2. If you move the Solo gadget back to "None" (all the way up) and
select channel 1, the route agains turns yellow indicating multiple
route with notes on channel 1 or channel 2.
> Scroll "Solo" to "None"
> Click on channel 1. Channel 2 should still be on.
By using the display filter you can keep tract of the
route path for each type of midi message and/or MIDI channel. With
other modules connected, this display mask is very effective in keeping
route paths clear for each type of MIDI data. Another great benefit
of being able to deal with message types separatly is that controllers and
other MIDI streams can be filtered off or re-routed early in the path.
For example, the split note module uses only note and program change MIDI
messages. So if a path was connect from MidiIn to SplitNote and from
SplitNote to MidiOut, the other MIDI data would have to be passed thru
two paths before being sent to MidiOut instead of only one if a separate
route was added. This example will be elaborated later and can be
loaded via the MidiRouter environment file "Basic-Split.env".
But we have not completed the minor chord. With the two routes we have
the root and the third. So we need to add a third route. When we added
the second route, we left the display message maksk to all on. But since
what we want is only notes, change the display mask.
> Select "Both" for Solo.
> Click MSG Note.
> Click CH 1.
Once again we want to add a route where there are already routes. In the
first case, clicking MidiIn and MidiOut would remove the route. Since there
are multiple routes, clicking the two icons will bring up the edit routes
window as if the Edit gadget was clicked. So lets add the third route and
edit it.
> Click "Add".
> Click MidiIn then MidiOut.
> Click MidiIn then MidiOut again to start route editor. This is the
same as clicking "edit" then MidiIn and MidiOut.
There are now three routes with the last one being the one we just added.
Note that only the filters specified in the display filter were added.
Now change the note shift and channel offset.
> Scroll route 3's note transpose to 7 to add the fifth of our chord.
> Scroll route 3's offset to 2. MIDI channel 1 is now mapped to 3.
So finally we have the desired results. These three routes could
have been entered with fewer commands by adding all three routes before
editing. Now for every note played on channel 1, three notes are played.
The root played on channel 1, a minor 3rd above that on channel 2, and
a perfect 5th above the root on channel 3.
Whenever you are done with a window, it should be closed. This frees up
more of the computer for MIDI. Also, not more than one edit program may
be called at a time. To open a new edit window the other edit windows will
have to be closed first.
> Close route editor window. (Window "Edit-Route")
At this point you will be able to save the routes in a route file or save
an environment which also saves the presets for the modules. But this
function is disabled for the demo. However, I have include the
ability to read these environment files and the route example above may
be loaded from the environment file "chord.env".
I have also included a route file I use with my guitar synthesizer.
It maps MIDI channels 1 thru 7 to channel 1. I need to do this because
I have my PitchRider set up to send each string on a different MIDI channel
and channel 7 is used by the hold function. There are times when I want
to play with a sound just on my DX7 with the guitar. Since my DX7 only
receives on one MIDI channel, (at least I have it set up that way) I
am able to quickly move this module into a patch panel MIDI stream.
I can call this patch panel with only MidiIn, MidiOut, and 8 routes a
module because multiple copies of the MidiRouter can be run, each with
its own routes and modules. So a PatchPanel can act as a new module in
a second copy of the Patch Panel (MidiRouter), This feature is not
completely working yet so I am going to save an example of this for
the next release. But go a head and load the route file "OMNI.router".
> From MidiRouter's Menu, execute "read" option from "routes" menu.
> Give the name "OMNI". Do NOT give the extension ".route".
All other routes are deleted.
That's it! If you want to see the routes, click MidiIn then MidiOut.
To leave MidiRouter, simply close its window. The program will verify
that you really want to quit. Unless the modules where run with options
saying otherwise, all modules will be close when the MidiRouter exits.
> Close MidiRouter window.
> Quit. Are you sure?? Click on OK
Using MidiRouter with SoundScape
================================
First, make sure MidiRouter is not running. It will needed to be started
with different options to run with SoundScape.
Since MidiLib and the MIDI message passing system used by SoundScape are
different, there must a program that will read MIDI messages from the
SoundScape MIDI stream and pass them in to MidiLib and the other
way around. The program SSBridge does just that. Running SSBridge does
several things. First, if SoundScape is not already running, it loads
SoundScape. SSBridge then creates the Node's needed by MidiLib and opens
a small window in the upper left corner.
> Double click on SSBridge icon to start SoundScape and MidiLib.
At this point you should have a window of the SoundScape Patch Panel with
a new icon. This icon is the letters M.L. in a box. This is your Node
in and out of ANY MidiLib module, weather written for MidiRouter or not.
However, when used with MidiRouter, another icon is included in the
MidiRouter Patch Panel that is the letters "S.S." for "SoundScape".
There are allot of considerations when using MidiRouter with SoundScape.
But I am only going to mention one of them here. Be default, when
MidiRouter starts it includes the MidiIn and MidiOut nodes used by
MidiLib. Since SoundScape has its own Midi In/Out routines, the MIDI
ports will only work with one of them. By including the "-midi" option
to MidiRouter, it will not include its own Midi ports. This may be done
either by executing the command "MidiRouter -midi" from CLI or by
including the -midi option in the .info file. I have included the
.info file with this option already set in "MidiRouter-midi.info".
> Double click on "MidiRouter-midi" icon.
> click on OK of CopyRight window.
The MidiRouter Patch Panel window is now displayed but with the "SS"
(for SoundScape) instead of the MIDI in and out icons.
You may also choose to use the MIDI ports set up by MidiLib instead
of SoundScape's MIDI ports. To do this, do not include the -midi
option for MidiRouter. Include it in the SSbridge program instead. This
will remove the MIDI ports from the SoundScape Patch Panel. This option
is already set in "SSBridge-midi.info".
Connecting routes to MidiRouter from SoundScape is the same as for any
other modules. To use data from SoundScape in MidiRouter, use the
SS icon like you would use MidiIn and MidiOut. Messages come from
SoundScape via the SS icon on the left and messages are sent to
SoundScape by sending them to the SS icon on the right.
This is not a very complete description of every thing you should know
but should be enough to get you going. Let me give these last warnings.
First, if you uses the MIDI ports of MidiLib with the MIDI ports
of SoundScape, either SoundScape or MidiLib will have control of the
ports depending on the order things have happened. The ports are
not freed until you reboot. So if you are having problems with the
MIDI port, try rebooting and make sure you only use one or the other
MIDI ports. If you start SoundScape and/or MidiRouter then exit then run
SoundScape and/or MidiRouter again, if you do not do things in the correct
order, you may loose your MIDI port so that one program or another can not
use MIDI. Reboot to correct. If you have problems, leave a message on
the "Musicains SnowBird's Den" for me.
Last, I ran into allot of problems when I has writing SoundScape utilities
before I wrote MidiRouter. I believe the problem to be that the Manx
"C" compiler/linker does not do the same thing as the lattice compiler/
linker, which is what was used for SoundScape. But I believe SSBridge
works well enough. As I start having more time to use this software
for my music, and not just writing the software, I may find more
problems. Please let me know if you have problems. Please no collect
calls, but do call if you want to know more!!!
Using SplitNote
---------------
The SplitNote utility module is but one module that will be available
for the MidiRouter program. This one module will describe how modules
are used in the system. The following tutorial may be run weather
you are running MidiRouter alone or with SoundScape.
> If not already running, start MidiRouter. SSBridge may be running
or started now too.
> Start SplitNote module by double clicking on SplitNote. Do NOT
start the "SplitNote+midi" copy of this module as this will connect
routes to MIDI. All routes should be connected with MidiRouter.
Routes may now be connected to the icons of modules as before. To enter
the edit routine of a module, double click on its icon in the MidiRouter's
window.
> Double click on SplitNote icon in MidiRouter's window.
A new window is opened which is the edit window for this module. This
edit window will be different for every module except for some common
gadgets that are common to most modules I have in mind.
Module common features
----------------------
First, so that you can see the edit window and this tutorial, you may want
to resize and position the edit window for SplitNote. Whenever you change
this window, the new position is remembered. This position is also saved
by MidiRouter when saving environments.
> Resize and move the SplitNote's edit window.
So now if we close this edit window, the position and size are remembered
the next time the window is opened.
> Close SplitNote's edit window
> Double click on SplitNote icon in MidiRouter's window.
There are 3 scroll gadgets used by most modules. The first of these
is the "Preset" gadget. Every module may define from 1 to 128 preset
slots. Each preset slot contains a new configuration for the module.
In the case of the SplitNote routine, changing the preset slot number
will change how many and where the split points are. The number of
slots is defined when the module is first loaded, or when a MidiRouter
environment is loaded. This means that if you need only two different
split point maps for one song and 32 maps for the next song, when the
environment for the two songs is loaded, the number of slots used in the
module is redefined and reloaded. There can be 128 preset slots defined
except that for this Demo you may define only 1-3 slots.
Another common gadget for most modules is "Preset via MIDI". This gadget
is used to allow MIDI to change the modules preset map. This gadget
has three values. When "Preset via MIDI" is "Disabled", the modules
preset map can not be changed from MIDI. The only way to change the
preset is to use the mouse. When "Preset via MIDI" is "Enabled", the
modules preset map may be changed by a MIDI program change. So a program
change of 2 will set preset 2, 3 will set preset 3, etc. If a program
change is sent that is greater then the number of slots, nothing happens.
If the gadget is set to "Wraped", MIDI program changes will change the
preset as with "Enabled" but if the program change is greater than the
number of slots, the program number is wraped around so that it will
change the preset. For example, if the number of slots is 2, a PC of
1 set preset 1, 2 sets 2, 3 set preset 1 again, etc. So in this case
all odd program change numbers will set SplitNote preset map 1 while
all even program change numbers will set SplitNote preset map 2. This
is very powerful for being able to change your entire setup including
module configuration from your MIDI controller, which is where all the
control should be coming from in the first place!
The last common gadget is the MIDI channel number used to control preset
changes for this module. So if set to 1, PC on all other channels are
ignored. If you want program changes to change the modules preset
regardless of the MIDI channel, set this scroll gadget to "OMNI".
The whole concept of using MIDI program changes to control module
configuration really needs allot more explanation, but that will have to
wait until I have more modules and start writing the "real" documentation
for this program.
How SplitNote works
-------------------
SplitNote is a basic note split routine. A different split point may be
set for all 16 MIDI channels. When a note enters the SplitNote module,
its MIDI channel is examined. The note is compared with the split point
set for that channel. A new midi channel is assigned depending if
the note was above or below the split. If the new channel is less than or
equal to the original input channel, the note with its new channel is sent
to the modules destination. If not, another split point is searched based
on the new midi channel.
For example, in preset #2 of the SplitNote module, there is a split point
on channel 1 at C2 and and channel 2 at C4. If we get a MIDI note message
at say G4 on MIDI channel 1, the split point at channel 1 is examined.
Since G4 is greater then the split point of C2 for channel 1, the channel
is reassigned to channel 2, since that is the channel for the upper part
of the split. Now, since channel 2 is greater then the input channel of
1, the note is compared with the split point at the new MIDI channel,
channel 2 in this case. Since once again the note is greater then the
split point, the MIDI channel is again reassigned to the upper split.
So now the channel is 3 and since 3 is greater then the input channel of
2, another split point is checked for MIDI channel 3. Since the split
point at channel 3 is set to "Lower", all notes will be passed to the
lower channel number, in this case 3. Since the new MIDI channel is now
equal to the input channel for this split point (that is 3), the note is
now sent to the destination.
To change the split point, use the mouse and position the pointer over
the "C 3" text under "Split Point" and right of "Input Channel 1". Press
and HOLD the left mouse button while moving the mouse up or down. As
long as you hold the left mouse button down the value under the pointer
will change. Even where the value to change is only yes/no, the value
may be changed my holding the left button. If there is only two values
then the value is toggled.
Another way to look at how to set split points with this module is this.
Starting at the input channel of your controller, (usually 1), set the
split point to the lowest split you want set. Leave the lower and upper
channel numbers to there default. Change the split point of input
channel 2 to where you want your next split point. Continue this
for the split point on channel 3, 4, etc. until you have as many split
as you want (up to 16). The important thing is that the split point for
channel 1 is lower that for channel 2 which is lower than the split point
for channel 3, etc.
The values of all split points for all presets in this module may be saved
to disk either for this module alone or as part of the environment. This
function is disabled thou for this Demo.
Split points and layering with multiple routes
----------------------------------------------
The real power of this kind of module can be better demonstrated with other
examples. But most of these examples I will leave for another time.
Let me leave with one more example thou that demonstrates how using this
module with multiple routes gives us more power then would first be
suspected.
In the above example on setting split points, each split point range
can have only one MIDI channel. We wanted to set up the split points
so that below C2 notes are on channel one, from C2 to below C4 notes are
layered on channel 1 AND channel 2, and from C4 and above notes are sent
on channel 2. There are actually several ways to do this. The best way
is the one that uses the fewest routes or makes copy of routes as close
to MidiOut as is possible. One way is to have the SplitNote module change
the MIDI channel for notes in every range that we want something
different to happen. In
this example we have 3 different ranges that are all doing something
different, even thou we are only using two MIDI channels. So if
we use preset number 2 of the default settings for SplitNote, notes
will have MIDI channels as follows:
below C2 -> Channel 1
C2 - B3 -> Channel 2
C4 and above -> Channel 3
Execute the following to connect are controller to SplitNote.
> Clear all routes with "Clear" menu command under "Routes"
> Set Solo to "AllOn"
> Set Solo to "Chan"
> Select CH: 1 in display mask
> Turn off display mask message for all but N and PC.
> Connect route from MidiIn to SplitNote.
We now have a way to identify which of the three split areas a note was
played in. The rest can be done with routes. Connect three routes
from the SplitNote icon on the left to MidiOut. The first route
passes only messages on channel 1. Since what is coming out of channel
1 is already what we want, this takes care of the first range.
> Set Solo to "Both"
> Select MSG: N in display mask
> Select CH: 1 in display mask
> Select Solo to "None"
> Select MSG: PC. Both N and PC should be on.
> Add route from SplitNote to MidiOut
Next, the notes on channel 2 need to also be copied to channel one.
There are two steps here. First, since in the last route we selected
channel 1 only, the notes on channel two will be filtered. Simple add
channel 2 to the filter mask of the route already created from SplitNote
to MidiOut. To do this you will need to bring up the route edit window.
Changing the display mask channels will not change any routes already
created.
> Select "Edit" and click SplitNote then MidiOut icon
> Click on route 1's channel 2 filter to turn it to 'Y' for Yes.
> Close edit window.
We now have notes below C2 on channel one and between C2 and C4 on
channel 2. Now add a second route to copy notes on channel 2 to
channel 1.
> Set Solo to "Both"
> Select MSG: N
> Select Chan: 2
> Click "Add" then SplitNote on left and MidiOut
The route line changes color to indicate more than one route is connected.
This new route now copies every note on channel 2 to channel 2. Since
this is not what we want, edit the routes from SplitNote to MidiOut.
> Click "Edit" then SplitNote then MidiOut.
To change the midi channel from 2 to 1, scroll the "Offset" for route 2
to -1.
> Scroll route 2's "Offset" to -1
> Close route edit window
Last, there are still all the notes above C4 on channel 3. We need to
add a route that passes these note and shifts the channel to 2.
> Select CH: 3. Channel 2 should go off
> Click "Add" then SplitNote then MidiOut
To change the channel offset open the edit routes window.
> Click "Edit"
> Click SplitNote then MidiOut
> Scroll Offset for route 3 to -1
> Close edit window
We now have the result we wanted. The last think you may want to
do is to pass the controller, pitch bend, etc. to MidiOut since we have
never connect a route that didn't filter it out.
> Scroll Solo to "AllOn"
> Scroll Solo to "None"
> Turn off MSG: N and PC
> Connect a route from MidiIn to MidiOut
This example is in the environment file "Split-Layer.env"
From here we can change this example to many others with only the splits
and routes we currently have. For example, try changing the note
transpose on route 2 from SplitNote to MidiOut. This will give the
doubling of the notes in the mid range of the keyboard an interval. Or
maybe you want a different sound for the top part of the keyboard. Change
the channel shift for route 3. The list goes on.
There are a number of points I have left out of this documentation. There
are still plenty of places to get into trouble. I can not cover every-
thing about this program here and choose not to cover as much as I could
as an incentive to contact me. Let me help you on this point, though. Do
not change the split points, channel offset, or note shift while you
are playing. This will cause hang notes. I have another module that
helps to release some of these hangs because of changes. This is needed
mostly when I use the MIDI program change to change the split points (i.e.
the SplitNote preset number via MIDI), but want to keep playing the
chord I have until after the new split points are enabled. So keep in
touch for more help.