In order to understand how the Mustang
worked, I first had to understand what
the Mustang dumps meant and relate
controller actions to messages sent.
This required a refresher on the midi
standard. Midi has 16 separate channels, and changing the sending channel
is done by adding the value of the
channel minus one to the message type
value. My first example is a midi “note
on” message, which has a decimal value
of 144 in the first byte for channel 0.
To send the same message on channel
6, add 5 to 144.
Action: held fret one of low E and picked
TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT
0023E843 1 -- 95 29 00 6 F 2 Note Off
0023E843 1 -- 95 29 7D 6 F 2 Note On
0023E847 1 -- F0 Buffer: 8 Bytes System Exclusive
SYSX: F0 08 40 0A 05 06 7D F7
The dumps I had found came from a
Windows program called Midi Ox, which
showed the data in hex. The midi specification shows data in binary, and I was
used to seeing this data with aseqdump
in decimal. I converted all the examples I
had been provided with into decimal so I
could understand their behavior. The midi
spec states that note on-and-off events
contain 3 bytes of data. The first byte is
event type plus channel; the second is
From left to right: custom-built guitar
synth, custom-built rack for VG- 99, Axon
AX- 100 and Fantom-XR.
note number, and the third is velocity.
From experience, I’ve seen that many
devices send a velocity event of 0 instead
of an actual note off event, which is what
the above shows. So, the result after it
has been converted to decimal is (note:
velocity zero below is really note off):
Type Channel Note Velocity (Note On 149) 5 41 00 (Note On 149) 5 41 125
SysEx is short for System Exclusive
messages, and they are free-form
messages to send data that doesn’t fit
into the predefined midi message types.
Initially, I tried to treat the data from
the dumps as a normal midi controller,
and I ignored the SysEx data in the
WWW.LINUXJOURNAL.COM SEPTEMBER 2011 | 63