Professional Audio Services

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.

Part 1:

MIDI Messages


Byte Structure

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.


Message Structure

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.


Running Status

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.


Channel Messages

Note Off8n, kk, vvKey number, kk = 00 to 7F
3C = Middle C
Note On9n, kk, vvVelocity, vv = 01 to 7F
40 = no velocity; 00 = note off
Polyphonic AftertouchAn, kk, vv 
Control ChangeBn, cc, vvControl number, cc = 00 to 65
Mode ChangeBn, cc, vvControl number, cc = 79 to 7F
Program ChangeCn, ppProgram number, pp = 00 to 7F
Channel AftertouchDn, vvPressure value, vv = 00 to 7F
PitchbendEn, ll, hhll = lsb, hh = msb Centre = 2000h = En, 00, 40

Notes: Channel number, n = 0 to F = Channels 1 to 16


System Common Messages

System Exclusive StartF0, ID, ...See table for manufacturers' IDs.
The ID byte is followed by data bytes terminated by any Status byte.
Quarter FrameF1, ddMIDI Time Code message dd = data
Song Position PointerF2, ll, hhll = lsb, hh = msb
hhll = 14 bit counter
1 count = 6 timing clocks
Song SelectF3, ssSong number, ss = 00 to 7F
Tune RequestF6 
System Exclusive EndF7"EOX"

System Real Time Messages

Timing ClockF824 clocks = 1 crotchet (quarter note)
ContinueFB, ss 
Active SensingFE 
System ResetFF 

Table of Contents     |     Next: MIDI Controller Numbers

| 1 | 2 | 3 | 4|

Last updated: 17 March 2014