By John Moxey
Within the MIDI Specification there are two basic types of message byte: the status byte and the data byte. The Most Significant Bit of a status byte is always 1, the Most Significant Bit of a data byte is always 0. The maximum length for a standard MIDI message is three bytes but for some types of MIDI message the length can be less.
| Status | Data 1 | Data 2 |
| 1 t t t n n n n | 0 x x x x x x x | 0 x x x x x x x |
There are only 7 bits, in each byte, to represent the unique data that the message byte contains. It can easily be calculated that there are only 2^7, or 128, discrete values available per byte. This means that there are 8 fundamental types of status message (t) which, if a channel specific message, can be sent to any one of 16 different MIDI Channels. If the status message is not channel specific the lower nibble (4 bits) of the status represents one of 16 different message sub-classes.
There are two different classifications of MIDI messages: MIDI Data Messages and MIDI System Messages. MIDI Data Messages are channel specific, MIDI System Messages are not channel specific.
All values are in HEX format!
| Message | Status | Data 1 | Data 2 |
| Note Off | 8n | Note Number | Velocity |
| Note On | 9n | Note Number | Velocity |
| Polyphonic Aftertouch | An | Note Number | Pressure |
| Control Change | Bn | Controller Number | Data |
| Program Change | Cn | Program Number | Unused |
| Channel Aftertouch | Dn | Pressure | Unused |
| Pitch Wheel | En | LSB | MSB |
| Key |
| n is the MIDI Channel Number (0-F) |
| LSB is the Least Significant Byte |
| MSB is the Least Significant Byte |
| There are several different types of controller messages. |
MIDI DATA Messages - Control Messages
All values are in HEX format!
| Message | Status | Data 1 | Data 2 |
| 14 bit controllers MSB | Bn | 01 (Modulation Wheel) | Data |
| 02 (Breath Controller) | Data | ||
| 04 (Foot Contoller) | Data | ||
| 05 (Portamento Time) | Data
| ||
| 06 (Data Entry Slider) | Data | ||
| 07 (Main Volume) | Data | ||
| 14 bit controllers LSB | Bn | 21 (Modulation Wheel) | Data |
| 22 (Breath Controller) | Data | ||
| 24 (Foot Contoller) | Data | ||
| 25 (Portamento Time) | Data | ||
| 26 (Data Entry Slider) | Data | ||
| 27 (Main Volume) | Data | ||
| 7 bit controllers | Bn | 40 (Sustain Pedal) | 00-3F (off) 40-FF (on) |
| 41 (Portamento) | 00-3F (off) 40-FF (on) | ||
| 42 (Sostenato pedal) | 00-3F (off) 40-FF (on) | ||
| 43 (Soft pedal) | 00-3F (off) 40-FF (on) | ||
| 60 (Data Increment) | 7F | ||
| 61 (Data Decrement) | 7F | ||
| 62 (Non-Registered Parameter Number) | LSB | ||
| 63 (Non-Registered Parameter Number) | MSB | ||
| 64 (Registered Parameter Number) | LSB | ||
| 65 (Registered Parameter Number) | MSB | ||
| 79 (Reset All Controllers) | 7F | ||
| Channel Modes | Bn | 7A (Local) | 00 (off) / 7F (on) |
| 7B (All Notes Off) | 00 | ||
| 7C (Omni Off) | 00 | ||
| 7D (Omni On) | 00 | ||
| 7E (Mono) | 00-0A | ||
| 7F (Poly) | 00 |
| Key |
| n is the MIDI Channel Number (0-F) |
| LSB is the Least Significant Byte |
| MSB is the Least Significant Byte[/td |
System Exclusive
| Message | Status | Data 1 | Data 2 |
| System Exclusive Start | F0 | Manufacturers ID | Data, data, data |
| System Exclusive End | F7 | ||
| Polyphonic Aftertouch | An | Note Number | Pressure |
System Common
| Message | Status | Data 1 | Data 2 |
| Song Pointer | F2 | LSB | MSB |
Song Select | F3 | Song Number | |
| Tune Request | F6 |
MIDI Time Code
| Message | Status | Data 1 | Data 2 |
| Quarter Frame | F1 | Data |
System Realtime
| Message | Status | Data 1 | Data 2 |
| Timing Clock | F8 | ||
| Measure End | F9 | Unused | |
| Start | FA | ||
| Continue | FB | ||
| Stop | FC | ||
| Active Sensing | FE | ||
| Reset | FF |
| Key |
| n is the MIDI Channel Number (0-F) |
| LSB is the Least Significant Byte |
| MSB is the Least Significant Byte |
Discuss this article in our Music Forum.
About John Moxey

John Moxey started Songstuff in 2000 and is an active songwriter and musician as well as a regular Songstuff author of music and music technology related articles and member of the site crew.
John started playing his first instrument (piano) in 1971, and has been writing songs since 1979. He began playing his now main instrument, the guitar, in 1982. In 1986 he finished training as a studio engineer and in 1997 obtained an Honours Degree in Electronics and Music from the University of Glasgow.
John now plays several other instruments including mandolin, violin, bagpipes, didgeridoo, bodhran, and vocals.
John has a broad range of performance experience from choirs and orchestras to pipe bands. He has sung for, played in and written for various bands, and produced songs across a number of genres.