MIDI Protocol Guide
The Musical Instrument Digital Interface grew from an original proposal for a "Universal Synthesizer Interface" by Sequential Circuits Inc in 1981. By 1982 several other manufacturers including Oberheim, E-mu, Yamaha, Korg and Roland were involved and an optically isolated 31.25kBaud interface was evolving, but was primarily concerned with note triggering only. A counter proposal was made later in 1982 by several Japanese manufacturers which included other operations, a lot based on the Roland parallel DCB interface, and which introduced the Status and Data structure. SCI then combined both proposals to form the MIDI specification and placed it into the public domain. It was first made public in October 1982 with the first products appearing in 1983 and was adopted by most of the world's electronic musical instrument manufacturers within the first year.
MIDI's strength lies in being fully specified and suitable for the purpose it was intended and most manufacturers adopted it with that spirit resulting in a worldwide standard that is still in use over 20 years since its introduction. Nobody licenses or polices MIDI, it is a co-operative standard. When used for its original purpose it works well, when used for other purposes, such as timecode, it is dubious. When used directly instrument to instrument it works as well as it can, when a modern multitasking computer is used or another serial standard relays it, the timing may become questionable. The sheer number of MIDI instruments made ensures that MIDI is not going to go away or change.
The MIDI Interface operates at 31.25 k Baud (+1%) using an asynchronous serial data byte comprising 1 Start bit, 8 Data bits (0 to 7) and 1 Stop bit. This makes a total of 10 bits per serial byte with a period of 320 microseconds.
MIDI messages comprise a STATUS byte (bit 7 = 1) followed by DATA bytes (Bit 7 = 0). Messages are divided into two main categories: Channel and System. Channel messages contain a four bit channel number encoded into the Status byte which addresses the message specifically to one of sixteen channels. System messages are not encoded with channel numbers and are divided into three main types: System Common, System Real Time and System Exclusive.
System Real Time messages are all single bytes and may be interleaved between any other messages (including System Exclusive). Any Status byte except System Real Time may terminate a System Exclusive Block.
For Channel messages only, the Status byte may be omitted if it would otherwise repeat the last Status byte sent. This is commonly used to reduce the length of Note On / Note Off sequences (where Note On with zero velocity is used for Note Off) or Continuous Controller movements.
System Common Messages
System Real Time Messages