Chapter Three: MIDI

3. MIDI Data Format: Message Types

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

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:

  • Channel Voice
    Control the instrument's 16 voices (timbres, patches), plays notes, sends controller data, etc.

  • Channel Mode
    Define instrument's response to Voice messages, sent over instrument's 'basic' channel

System Messages

System Messages are Common, Real-time or Exclusive and do not contain specific channel data.

  • System Common
    Messages intended to all networked instruments and devices

  • System Real-Time
    Intended for all networked instruments and devices. Contain only status bytes and are used for synchronization of all devices. Essentially a timing clock.

  • System Exclusive
    Originally used only for manufacturer-specific codes (each MMA member manufacturer was given specific ID codes), such as editor/librarians, this class has been expanded to include MIDI Time Code, MIDI Sample Dump Standard and MIDI Machine Control. These messages can be as long as is needed, before being ended by an EOX end-of-system-exclusive byte.

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.

*Known as the LSN or least significant nibble.