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.