Applications

This chapter will guide you through the demo set included on your SLAVE
DRIVER distribution disk, and suggest some useful applications for this
software. From the SLAVE DRIVER edit screen, select LOAD SET from the TOOLS
menu, and load the file "\SETS\DEMO.SET". In creating this file I used
several songs that I use myself, some of which demonstrate the musical
flexibility of performing with SLAVE DRIVER, while others demonstrate some
useful MIDI scenarios which can be very handy to have around.

As mentioned earlier in this manual, different keyboards handle note off
events differently. In the demo set, I use a DX7 receiving and transmitting
on channel 1, and a Korg DSS1 receiving and transmitting on channel 2. The
DX7 transmits note on, velocity zero when a key is released, and is easier
to create maps for as note off relationships do not have to be created. The
DX7, however, does not transmit note on messages correctly. The maximum
velocity you can hit on a DX7 is somewhere between 108 and 110. In order to
play another keyboard from a DX7, I will normally scale velocity up to the
proper level by entering my MASTER velocity range as 0-108, and using 0-127
for the SLAVE events' velocity ranges, as demonstrated by the first
relationship in song 1, map 1. The DX7's local control also cannot be
turned off, so I only use this as a master if a) it's own keyboard sound is
to be included with the slave's sound, b) it's own sound is not needed (use
the SEND field to turn it's volume to 0 or set it to a "silent" patch, and
the RESET field to turn volume back up to 127), or c) either do a keyboard
scale in the DX7 patch that puts the octaves you want to play off the top
of the keyboard and scales the volume over the keyboard range down to 0, or
use the SEND field and a bulk message to edit whatever patch may be
currently called up on the DX in that fashion.

The DSS1 does transmit note off events, it's local control can be turned
off, and velocity values are transmitted normally. When I want the DSS1 to
play the DX7, I scale the velocity in the opposite direction, as
demonstrated in the second relationship in song 1, map 1.

These instruments' MIDI OUTs are merged into the ATARI MIDI IN port using a
Yamaha YMM-2 MIDI merger. This allows me to have two masters controlling
the SLAVE DRIVER program. Although you may not have the same gear that was
used in the demo, you will probably see ways to apply the demonstration to
your specific instruments. If you don't have a MIDI merger, you will only
be able to experiment with the relationships for one of the master
instruments at a time.

Check whether your instruments transmit note-off events or not. If one
does, set it to channel two and use it in place of the DSS1. If one
doesn't, use it in place of the DX7. If you do use another instrument in
place of the DX7, realize that the maps which scale up the velocity output
from channel 1 will act a little strangely - if you play the instrument
harder than a velocity of 108, the note on event will not be included in
the master range and no slaves will be generated (a velocity split will be
achieved where velocity values less than or equal to 108 will be rerouted,
velocity values above will not, and the instrument will only play itself
locally).

Song 1

As the first song's send field is executed automatically when a set is
loaded, I use song 1 as a "loader" song that loads MIDI files and
initializes my instruments for use with the set. If you move the cursor to
the SEND field and scroll down through the existing entries, you will see
load (L) commands for the various files listed in the BULK and SEQUENCE
fields.

After the load commands, we come to the event "2  C 97  127". This is the
beginning of a group of commands I have entered to initialize my DX7. Now,
before you say, "Hey, you said your DX7 was on channel 1", I'll explain. In
the section on SYNTH SCREEN in chapter 8, I mentioned that in order to use
a DX7 in SYS INFO UNAVAIL mode with the remote display module, you needed
to set the function parameter to the SYS INFO UNAVAIL screen on the DX
before putting the DX in play mode. Instead of going through that procedure
every night at the gig, I have set up the song 1 send field to perform some
"button remote" commands. First of all, I don't bother with the DX before
running the remote display module. Therefore, when the remote display
module sends a data increment command to turn the DX from SYS INFO UNAVAIL
to SYS INFO AVAIL mode, it instead increments the DX's MIDI channel. So
just in case this has happened, I send the data decrement message to
channel 2, decrementing the MIDI channel to 1. If the DX had already been
initialized and wasn't receiving on channel 2, then the message would be
ignored because my DSS1 (on channel 2) doesn't recognize data increment or
decrement commands.

Then a sysex file is sent, "P  BLK	2", which transmits the file
A:\SYSEX\DX7\LOAD_FIX.SYS. This is a MIDI file containing button remote
sysex messages for the DX, pushing first the FUNCTION MODE button, then the
#1 function "Master Tuning", the #8 button "MIDI Channel", and finally the
#8 button again, changing the display to "SYS INFO UNAVAIL". Now to return
the DX into play mode, I transmit sysex file #1, SEL_CART.SYS, which
pushes the MEMORY SELECT - CARTRIDGE button. I keep this button message in
a separate file because I use it in other places in the set, so that I
never have to push the cartridge button before pushing a program number on
the DX7 (all of my DX programs that are song triggers are on the cartridge
program numbers).

Now that my DX7 is initialized and ready to receive text from the remote
display module, the load commands for the sequence files have been entered.
With lots of sequences, loading from floppy can take a minute or two.
Meanwhile my DSS1 is also loading it's samples from it's own disk drive,
which will also take about a minute. When it is finished loading, it is in
SYSTEM mode, and needs to be put into the play mode in order for me to
select different programs. Once the sequences have been loaded by SLAVE
DRIVER, the DSS1 will also be loaded, so the next event in the SEND field
will transmit a PLAYMODE command to the DSS1, in the form of another SYSEX
MIDI file.

While the DSS1 and the remote display module were loading files, my DSM1
was also loading samples from it's disk drive. My DSM1, when first turned
on, does not know that it is supposed to be receiving on channel 4 until it
is put into the play mode. Therefore, I transmit to it a PLAY MODE sysex
command both on channel 4, and on it's power-up default channel 1 (by using
"1" instead of "P" in the BLK event, the file actually sees the message
as being on channel 4).

No trigger has been entered for this song/map, since it is only intended to
be run once when the set is first loaded. Three relationships have been
entered, only for demonstration of the DX7 scaling mentioned in an earlier
paragraph. You will also notice that this song has a second map. Click on
the UP arrow in the trigger box to display the data in this map.

This map again is only being used for it's send field, and has no trigger
as it is intended to be selected only by using the ATARI keyboard. On my
off weeks, I will often load a different set of programs into my DX7 for
working on my own solo project. Once I got to a gig with my ATARI computer,
and no monitor, only to discover that I had forgotten to replace my gig
sounds into the DX. So I later set up this map, so that all I had to do if
this happened again was to press 2 on the numeric keypad. This map first
sets SYS INFO AVAIL with the data increment command (1  C 96  127), then
plays a sysex file that presses all the appropriate memory protect buttons
on the DX7, loads my DX7 sounds that were saved with the bulk librarian,
transmits them to the DX, and then turns the DX7's memory protect back on.
The map also sends the appropriate reverb patches to my DSP128+ while it's
at it. To protect you from accidentally overwriting all of YOUR DX7 sounds
with MY DX7 sounds, you will have to put the load (L) commands in yourself
if you wish to try it out, but PLEASE save your own DX7 sounds with the
bulk librarian first. This map has no mercy, it changes the instruments
memory protect settings, so every time you select this map the sounds in
the DX WILL be overwritten regardless.

Note that the MIDI file sysex messages used in this song were hand-edited
using the PREFIX editor - a skill most of you will not be able to
accomplish without having documentation on the Standard MIDI File
Spec. A future version of SLAVE DRIVER will allow you to type in
sysex messages by hand that can be transmitted as BLK events.

Song 2

This song uses program #63 as a trigger, that is, it can be selected
remotely by pressing program cartridge 32 on the DX (or the 64th program on
some other instrument). It's benefit will be seen if you have two keyboards
merged into the Atari IN. For playing keyboard bass, this map will allow
you to play a pedalled bass using both hands. Playing a sixteenth note
pattern on a real bass is easy, the note is plucked on both the downstroke
and the upstroke. Using this map, you could play sixteenth notes just as
effortlessly, by playing the first note on one keyboard, the next on the
other, and back and forth.

First the send field turns the DX7 volume down to 0, so that it can be used
as a master keyboard without playing it's own sounds. Then, the bass patch
I normally use is selected on channel 5, my reverb on channel 9 is sent the
appropriate program change, and finally my DSS1's local control is turned
off on channel 2. When another song is selected, the reset field will turn
channel 2's local control back on, and turn channel 1's volume back up to
127.

The first two relationships reroute channel 2's key on and off messages to
the bass on channel 5. The third relationship reroutes channel 1's key
on/off messages to channel 5. Because the DX7 sends note on, velocity = 0
instead of note off messages, I don't need to create a note off relationship. As long as the
low limit of the master velocity is zero and the low limit of the slave
velocity is zero, a note on, velocity zero message will be rerouted to a
note on, velocity zero message. Note that the channel 1 master velocity
range is specified as 0-108, in order to scale up the velocity output from
a DX7. If you are not using a DX7 on channel 1, you will need to change
this range to 0-127. Also, if your instrument on channel 1 does transmit
note off messages, you will need to create a note-off relationship (click
on COPY F twice to automatically create one).

The fourth relationship reroutes the channel 1 sustain pedal to to the
channel 5 bass. The fifth map reroutes the DX7's cartridge programs 1-30
(MIDI program numbers 32-61) to the bass instruments programs 1-30 (MIDI
program numbers 0-29), so that I can change to a different bass sound
easily if I so desire. The sixth map reroutes channel 2's pitchbend wheel
to the bass channel.

This song also demonstrates a technique you can use to squeeze more than 20
songs into a set. Once you have selected the song's first map using the
Atari keyboard or by selecting DX cartridge 32, the other maps in the song
can be selected. The second map was set up for a song which I needed to
play left hand bass and piano in. I have set up a split with this map,
so that I could have both hands on the same keyboard.

First, the desired bass patch is selected on channel 5, and the
desired reverb patch is called up on channel 9 using the send field.
Because the first map's reset field is not executed until another song is
selected, the DX7 on channel 1's volume is still set at 0. So I set the
volume to 127 in the send field, and restore a volume of 0 in the reset
field (because I set volume to 0 in the song's first map send field, volume
0 is expected to be maintained throughout all of the maps in the song). Now
I can noodle on the DX7 if I want to.

The first two relationships assign the lower octaves of my DSS1 to playing
the bass on channel 5, transposed up one octave. The third relationship
reroutes the DX7's sustain pedal to my piano patch on channel 7 (I like to
use the DX7 sustain pedal because it is much nicer than the Korg one). The
fourth and fifth relationships reroute the upper octaves of my DSS1 to
playing my piano on channel 7.

The third map in this song demonstrates some improvisational sequence
control. First, program changes are sent to the various MIDI instruments.
Channel 1's volume is turned up to 127, reset to the song's "normal" volume
of 0 in the reset field.

The first relationship defines the sequence control for starting the main
part of the sequence. When the channel 2 sustain pedal is depressed,
sequence #1 is started with a PX event. Sequence #2 is set to wait for
sequence #1 to finish, at which point it will loop endlessly. This is
because we always play the song normally up to a certain point, and then we
just improvise and solo around for an indefinite number of measures.
Sequence #2 contains the progression which will loop as we solo away.

The second relationship defines the DX7's Data Decrement button to another
sequence event. Once we are ready to end the song, I simply press this
button just before the measure where we want to go into the ending. Once
sequence #2  finishes it's current loop, sequence #3 starts and plays the 4
measure ending of the song.

The remainder of the relationships in this map are relatively self
explanatory, with the exceptions of relationships 7, 8, and 9. As I am
playing three different sounds on my DSS randomly throughout the song, I
have set up an easy way to change patches on this instrument. Relationship
#7 is set up so that when I move my pitchbender all the way to the upwards
position, SLAVE DRIVER sends the sax patch change to the DSS (note that the
lower portion of the pitch bender was rerouted back to the DSS, I use
pitchbend from down to center when I'm playing sax). Relationship #8 causes
my oscillator modulation wheel to send a different patch change when it is
moved to it's full on position. Note that the DSS1's local control was
turned off by this song's first map send field, so the oscillator effect is
not heard. Also note that I entered this event using the MIDI edit feature
(described in chapter 3), and discovered that my oscillator wheel only goes
up to 124 instead of 127 when in the full on position. Likewise with the
VCF modulation wheel, rerouted to a different program change number in
relationship #9.

Song 3

This song was set up to play a recent rap/metal tune called Epic. It
demonstrates one way to avoid sequencing by setting up SLAVE DRIVER to
allow you to play more parts than you would normally be able to.In the send
field, program changes are sent, and one bulk sysex message. This message
is the same one used in song 1 to press the DX7 cartridge voice select
button. Because I sent the DX a program change #11, pushing the program
change buttons on the DX will now select internal voices instead of
cartridge ones. I always want to make sure that I can select cartridge
voices without having to push the cartridge button first, because my song
and map triggers are all on cartridge voices. So after I select an internal
voice on the DX, I always send this message.

The first relationships in the map are fairly normal, my DX7 plays itself
locally, and is rerouted by SLAVE DRIVER to also play itself down one
octave, and a brass patch on channel 6 at two octaves. So each note played
on the DX will result in four notes being played (this is a great way to
thicken up a brass sound!). In the third relationship, the DSS on channel 2
is rerouted to the piano on channel 7. Then things get a little weird. The
following four relationships allow me to play the bass piano part on my
DSS1 sustain pedal and my DX7 portamento pedal. In relationship #5, channel
1's portamento pedal first releases three notes on the piano, and the plays
MIDI note number 40 (E 1 or E 2 depending on your instrument's
interpretation of where C 3 is). Note that I have portamento disabled on
the DX7, and use this pedal for all kinds of nifty other things with SLAVE
DRIVER. The three note off slaves must be included because we don't know
which note was played by a pedal last. Therefore, this relationship first
shuts off the other three notes, and then plays note #40 when the pedal is
depressed. The specified release velocity is 64 for the note off events,
and note number 40 is always played at velocity 77.

In the next relationship, the release of the portamento pedal is defined to
shut off whichever of the three notes might have been on, and play MIDI
note number 47, using a velocity of 77. So now when we step on the pedal, E
1 is played, when we release it, it is as if we released the E 1 key and
played the B 1 key.

The DSS1 sustain pedal is used the same way, except for it plays the notes
C 1 and G 1 respectively. Now by simply stepping on and off these pedals, I
can play the bass part of the outro with my feet, and play a two handed
piano lead on the keyboard. The only problem now is that when we are ready
to stop playing, the last note played by the "bass pedals" is stuck on. So
we define the last note that we will play from the keyboard to first turn
the volume down on the piano, and then release all of the notes, when that
key is released (I never play that high E until the last note of the
song). The volume is first turned down because chances are I will have a
pedal depressed when I end. I don't want a key to be played when I release
that pedal at the end of the song, so I turn the volume down. If a pedal
was played with the volume down, the reset field makes sure that whatever
note it was assigned to gets shut off when another song is selected. The
reset field also makes sure that the volume gets turned back on channel 1.

Song 4

This song simply demonstrates the technique used to create a velocity split.
Although the velocity split was created for channel 1, I have entered note
off events for both types of note off messages, so this will work with any
keyboard. My note on range for the first relationship is 1 - 63, any key on
channel 1 played with a velocity somewhere in between these values will
result in keys being played on channel 2. The second relationship will
cause any key on that same keyboard played harder than velocity 63 (up to
108) to play an instrument receiving on channel 3. If you are not using a
DX on channel 1, any key hit harder than 108 will not play any keys at all.
You will notice that the send field turns the master instrument's volume
down, assuming that you are using a DX whose local control cannot be turned
off.

Song 5

This song demonstrates how to achieve a velocity crossfade. As in the last
song, any keyboard transmitting on channel 2 this time will work as note
on, velocity 0 and note off relationships have been entered.

First channel 2's local control is turned off, using the send field. Then,
channel 2's keyboard output is transmitted first back to itself normally,
then to an instrument on channel 3, with the velocity inverted. The result
of this is that the harder you play, the harder channel 2 is played and the
lighter channel 3 is played. Somewhere around the middle velocity, both
channel's instruments will be heard equally at a velocity of about 64. Note
that both instruments should be set up to respond to velocity in order for
the effects of this map to be observed.

Song 6

This song demonstrates SLAVE DRIVER's ability to change rerouting maps
while keys are being played. The first map is selected by pressing program
#3 on the channel 2 instrument. While in this map, channel 2 plays piano
(or whatever) on channel 7. The channel 1 sustain pedal is being rerouted
to both channel 7 and channel 8. When the channel 1 portamento pedal is
depressed, map 2 is selected. This map reroutes the key on/off messages
from channel 2 to both the piano on channel 7 and the strings on channel 8.
When the portamento pedal is released, the third map is selected, which is
essentially a copy of the first map, without the send and reset fields.

Notice that you can play the piano and strings sounds together while
stepping on the portamento pedal, maybe hold down a chord, and the release
the portamento pedal, playing just the piano over top of the held strings
chord. The sustain pedal is rerouted to both channel 7 and 8 on all three
maps so that you don't get the sustain pedal stuck on when you change maps.
This way you could also hit a strings chord, hold it with the sustain
pedal, and then play piano without holding the notes down for the strings
chord. Once you release the sustain pedal, the strings chord will be
released, no matter what map is currently selected within this song.

Song 7

This song demonstrates an easy way to run through your sysex libraries.
Upon selecting the song, nothing is activated except for the fact that you
can now select this song's second and third maps. The second map is
selected by pressing the DX7's data increment (yes) button. This map has
rerouted the white keys on the DX so that each one transmits a different
bank of patches to the DX's internal memory. Make sure that you have backed
up your DX7 sounds with the bulk librarian before testing this map, as it
modifies the DX7's memory protect. This saves you the time and bother of
ensuring that your DX7 is ready to receive - the map automatically ensures
that the DX7 is ready. You will also want to be sure and press the data
decrement (no) button before playing the DX keyboard, otherwise you will be
sitting back and waiting as the computer loads and transmits bulk messages
for each key you play.

Here's how it works. The first relationship in map 2 designates key #36,
velocity zero for the master. This means that the sysex file is not loaded
and transmitted until you actually release the key. This is because the DX
gets a little bit "buggy" if you transmit a bulk dump to it when keys are
held down.

The slave field starts by loading the sysex file for this key, namely, file
#9 "DXD33_64.SYS". This file contains the patches that come in the DX7IID's
internal banks. Then, data increment is sent to set SYS INFO to available
(make sure that your DX is initialized as mentioned earlier - if not,
simply select song 1 to automatically initialize it. It should be receiving
and transmitting on channel 1). Then a bulk file is played which uses DX7
button remote sysex commands to select the DX's internal memory protect
button. Data decrement is transmitted to turn memory protect off. Then the
actual bulk file containing the DX patches is transmitted, using a PE
event. This causes the file to erase itself once it has been transmitted,
freeing up the memory it used. Data increment is sent, to turn the
instrument's memory protect back on. Then a bulk file reselects the
internal memory button, so that the DX is back in the play mode and you can
immediately change programs to see what patches are in internal memory.
Finally, data decrement is sent again, this time turning the instruments
SYS INFO display back to unavailable.

Now press the data decrement button to select map 3, which will allow you
to harmlessly play the patches you have transmitted. To send a different
bank of patches, simply press data increment, select a different key to
transmit a different bank of sounds, and then press data decrement to try
out the new patches.

This is only one of many ways you could implement this sort of song.
Instead of using keys for different bulk patches, you could use cartridge
program numbers. Or simply transmit the bulk files from the send fields of
several maps in the song. Then you could send bulk patches by pressing the
number keys on the Atari's numeric keypad. SLAVE DRIVER is very flexible,
and basically can be set up to do whatever you want it to do. I've given
you some examples, now the rest is up to you as you use your imagination
and put SLAVE DRIVER to work making your life easier.
