
The majority of MIDI communication consists of multi-byte packets beginning with a status byte followed by one or two data bytes. Bytes are groups of 8 bits (0's or 1's—a '1' is called set and a '0' is called reset). Status bytes begin with a '1' as their most significant bit (e.g., 1xxx xxxx) and are therefore 128 decimal or higher. Data bytes begin with a '0' (e.g., 0xxx xxxx) and are therefore 127 decimal or lower.
The status byte that begins a Note On message on channel 1, followed by a data byte carrying the note number 60 (middle C).
Each byte is framed by a start bit before it and a stop bit after it, so each byte takes 10 bits to send. The eight data bits go out least significant bit first, the reverse of the order in which we write them. At MIDI's rate of 31,250 bits per second, that comes to 320 µs per byte, about a third of a millisecond.
The same status byte on a MIDI cable, sent at 31,250 bits per second. Note the order of the bit numbers.
Messages fall into one of two main classes, Channel and System. Everything on this page describes MIDI 1.0. MIDI 2.0, adopted in 2020, keeps the same families of messages but packages them in Universal MIDI Packets built from 32-bit words, with much finer resolution for values such as velocity and controller data.
Ranges are status-byte values in decimal.
Channel messages come in two types, Channel Voice and Channel Mode. Since the message begins with a status byte, the most significant (left-most) bit is a '1' and it is followed by three more bits specifying the action (more on the next page). The right-most four bits (known as the LSN, or least significant nibble) specify which MIDI channel the message is intended for. As four bits yields 16 separate values (from 0000 to 1111, which MIDI numbers as channels 1–16), channel messages can address 16 separate channels. For a multi-timbral synthesizer, this provides the ability to play 16 separate timbres independently on one instrument or virtual instrument plug-in. For older mono-timbral instruments like the Yamaha DX7, it means you could chain up to 16 instruments with independent note data, controller data and more. In fact, Yamaha came up with a rack-mounted version of eight DX7 sound engines, the TX816 (pictured here set to MIDI channels 1–8), whose modules could share a common MIDI input while each answered to its own channel.
Channel Messages are Voice or Mode:
System messages are Common, Real-Time or Exclusive and do not contain specific channel data.
MIDI Monitor Apps
If you use a Mac, a great way to see the actual MIDI bytes being generated is the free MIDI Monitor app from Snoize.com. Windows users can try MIDI-OX, though it may be in need of an update. For a more visual view on Mac, Windows or Linux, there is also the free ShowMIDI.