The majority of MIDI communication consists of multi-byte packets beginning with a status byte followed by one or two data bytes. Bytes are packets 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. Each byte is surrounded by a start bit and a stop bit, making each packet 10 bits long. Messages fall into one of two main classes, Channel and System.
Channel messages are 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 detail on next page). The right-most 4 bits* specify which MIDI channel the message is intended for. As four bits yields 16 separate values (from 0000 to 1111), a MIDI channel message may 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 DX-7, it means you could chain up to 16 instruments with independent note data, etc. In fact, Yamaha came up with a rack-mounted version of eight DX-7 modules, the TX816, daisy-chained internally, that was intended to be played this way, pictured here set to MIDI channels 1-8.
Channel Messages are Voice or Mode:
System Messages are Common, Real-time or Exclusive and do not contain specific channel data.
MIDI Monitor Apps
A great way to see the actual MIDI codes being generated if you use a Mac computer is to download the free MIDIMonitor software from Snoize.com. For PC users, you can try MIDIOX, though it may be in need of an update.