Specifications

converter 1.5
2000 - 2005 urr Sound Technologies Inc.
84
midi data protocol specifications
Midi is a simple asynchronous serial interface able to transmit data at a rate of 31.25Kbps, which allows
a maximum transfer rate of about 3000 bytes per second. Midi data is formatted into data ‘packets’
called messages. Each message begins with a status byte, and may be followed by any number of
additional data bytes as determined by the message type. Some messages only consist of a statusbyte
(notably the system realtime messages such as the midi timing clock), while others are followed by one,
two, or more data bytes. For most applications using converter, only channel-oriented midi messages
(called voice messages) will be used under normal circumstances (so don’t worry about the variable
multi-byte system exclusive messages, time code quarter frames, and the like unless necessary).
Midi data is always transmitted sequentially from statusbyte to last databyte. To reduce the
transmission of redundant data, a type of run-length-encoding called running status exists, where
messages of the same status byte are sent without re-sending the status byte. For instance, if three
notes were pressed on a keyboard transmitting on midi channel one, there would be one status byte for
a note on message on channel 1 (status byte 144), followed by the first note number and note velocity,
then the second note number and velocity, and then the third note number and velocity. It is assumed
that any data following that original status byte is the data bytes for an additional note on, and this
condition remains until a new status byte is received which cancels this running status.
For a much more in-depth explanation of midi, do some research on the web, or visit:
http://www.harmony-central.com/MIDI/Doc/doc.html
voice messages (channel specific)
message type status byte data byte 1 data byte 2
note off 128 – 143 note number note velocity
note on 144 – 159 note number note velocity
polyphonic aftertouch 160 – 175 note number aftertouch amount
controller / mode change* 176 – 191 controller number* controller value*
program change 192 – 207 program number not used
channel aftertouch 208 – 223 aftertouch amount not used
pitch wheel control 224 – 239 pitch wheel LSB pitch wheel MSB
* see the table of controller (or ‘continuous controller’) definitions on the next page.
system common and real-time messages (not channel-specific)
message type status byte data following statusbyte
system exclusive 240 machine – specific variable – length bytestream
midi time code ¼ frame 241 1 data byte, many bytes comb. for time position
song position pointer 242 byte #1: LSB byte #2: MSB
song select 243 1 data byte: song number
tune request 246 none
end of system exclusive (EOX) 247 none
timing clock 248 none
midi tick 249 none
start 250 none
continue 251 none
stop 252 none
active sensing 254 none
system reset 255 none