A Roland GS SysEx Generator

I always needed to play quarter tones on my MIDI equipment. Back when I used to use an MT-32 (and even now when I have to prepare something for the Web, like the little tune on my Home Page, i.e. rely on any of the popular sound cards that comply to the General MIDI standard) the only way to do that was to insert Pitch Bend events, essentially manually by editing the Event List in a sequencing programme (phew!), at exactly the same point as the note to be lowered or raised (PB = ±2000 equals 50 cents, i.e. half a semitone), and then inserting another Pitch Bend (PB = 0) annulling the effect for the next non-quarter-tone note...

     As you can imagine, this went as smooth as a nightmare! Even when I could dispose of such niceties as Bars&Pipes custom Tools (on the AMIGA), or Cakewalk's CAL (= Cakewalk Algorithmic Language) (on the PC) which is a fancy way for saying Just Another Macro Language, things never went as smoothly as expected. If the thing worked at all, that is! Because, you see, all kinds of MIDI equipment can't process such a host of Events coming their way at the same speed. With some older sound modules, notes consistently glided in the ugliest of manners, instead of going directly to the desired pitch.

     In the case of Bars&Pipes, I had to use an extra Channel for each instrument that should play quarter tones, the idea being that the Custom Tool would then filter the coming notes and divert the ones I desire to a side-track that starts off with a Pitch Bend. A terrible waste of channels! Besides, I had to prepare a separate custom Tool for each and every combination of notes to receive the Pitch Bend; e.g. E half-flat, E & B both half-flat, F half-sharp, F half-sharp & B half-flat, ... etc. I happen to know other composers who still resort to adopting the same plan on their MC-50's.

     With Cakewalk things first gave me the impression of being a bit easier; all I had to do was conceive an algorithm, write the macro and run it on the desired portion of the music. It should do the filtering and intelligently add the Pitch Bend events, and annul them, all in the appropriate places. Right? ...Wrong!! Errors always popped up, and in the least reproducible of ways, which made debugging so difficult!!

      In case you can't understand why I had to go to such lengths, I need to remind you that Pitch Bend events involve the whole keyboard span for a given channel; meaning: a Pitch Bend event on channel 3 for example lowers, or raises, all notes following it until further notice! Which also means I could never use it for harmony; no way of playing C/Eb/G, unless that middle note is on a dedicated channel!

Enter System Exclusive (SysEx) Messages!

As the name implies, these are specific for any given system; i.e. you can't send a YAMAHA SysEx to a Roland thing and expect it to work! Still, the concept is the same; only the implementation differs. So, for the specific kind of SysEx we're interested in (as there are many), we are to tell the keyboard/module how to lower/raise each key within the octave, all in one go. Upon which, you can start playing your music, melody and/or chords, not worrying about anything. No channels wasted, no fussy PB's, just plain sailing... Well, after preparing and sending the SysEx, that is!

     Now, here's the harder part! Because...

  1. You need to study the MIDI Implementation Chart provided by the manufacturer of your equipment,
  2. Then, you should plan a separate SysEx for each channel you need to adjust, as this process is channel-specific,
  3. And you'll have to do that using hexadecimal notation (thank God I'm a programmer!),
  4. Then, you should sum up all the figures starting with the channel number, up to and including the seventh key in the octave (B), divide the result by 128, and subtract the remainder of the division from 128, and put the subtraction result as the last-but-one byte in the message, just before the ending F7 byte... Couldn't be simpler, really....

So, here's my solution...

I wrote a little Java applet (6536 bytes) to do all the grunt work. Then, realizing that my fellow Amigans have no Java-enabled browser just yet, I re-wrote it using JavaScript entirely. Then, becoming a real obsession for me (!), I wrote this little utility as  AMIGA and PC executables! But you'll have to ask for either one of these last two variants by e-mail. You might need to bear in mind that the AMIGA version is 8 800 bytes, while the PC one is 188 472 bytes, both un-compressed.

     I don't think you'll have any trouble using my baby; adjust the individual octave keys (-64 to +63, zero being the default, all measured in cents; remember that a semitone has 100 cents), then simply copy and paste the resulting SysEx Message into your favourite sequencing programme.

     As for the Natural Scale and Tempered Scale buttons, they'll have to have their own dedicated page...

This page is hosted by 
Get your own Free Home Page
Mail Me 
Write Me
My Home 
My Home Page