Free technical help for digital creators - music, video, art, photography, graphic & web design

MIDI language specification

The MIDI language consists of two types of MIDI message, Channel Messages and System Messages ...

Channel Messages

A channel message is sent on a specific MIDI channel and communicates information to devices set to receive on this channel. There are two types ...

  1. Channel Voice Messages are used to transmit real-time performance data such as Note On and Off, Velocity, Pitch Bend, Program Change, and MIDI Controllers (which refer to non-note musical gestures) such as, Modulation and Sustain.
  2. Channel Mode Messages are used for to set MIDI modes (1-4), set Local on/off, and Reset All Controllers.

System Messages

System messages communicate non-performance information. They are not channel specific and thus intended for all devices in a MIDI chain. However only some devices will understand these messages such as those to which a specific System Exclusive message is addressed by means of a manufactures ID device number. These ID device numbers are not the same as MIDI channels but allow specific devices to receive data specific to it. There are three types of System Message ...

  • System Exclusive Messages are generally used to transfer device set-up data such as a Patch or Bank Dump used to describe the settings of a particular sound in a synth or a program in an FX processor.
  • System Common Messages such as Song Select, MIDI Time Code, and Song Position Pointer.
  • System Real-Time Messages are time critical and therefore have priority over other system messages. They may occur at any time, even in the middle of another MIDI message and include MIDI Clock, Song Start/Stop, and Active Sensing.

Channel Messages

Channel Voice Messages

Whenever a MIDI instrument is played, its controllers (keyboard, pitch wheel etc) transmit channel voice messages. There are 7 channel voice message types ...

  1. Note On
  2. Note Off
  3. Polyphonic key pressure
  4. Aftertouch
  5. Program change
  6. Control change
  7. Pitch bend change

1. Note-On This message indicates the beginning of a MIDI note and consists of 3 bytes. The 1st byte (Status byte) specifies a note-on event and channel. The 2nd byte specifies the number of the note played. The 3rd byte specifies the velocity with which the note was played.

2. Note-off This message indicates the end of a MIDI note. The 1st byte (Status byte) specifies a note-off event and channel. The 2nd byte specifies the number of the note played. The 3rd byte specifies the release velocity.

3. Polyphonic key pressure Key pressure or aftertouch, with each key sending its own independent message

4. Aftertouch This message is similar to polyphonic key pressure but is sent when additional pressure is applied to a key that is already being held down. Also, there is only one sensor for the whole keyboard i.e. it’s monophonic aftertouch

5. Program change These messages will change the programs of devices responding on the channel on which they are sent.

6. Control change These messages alter the way a note sounds by sliding it, sustaining it, modulating it etc.

Here are the numbers for all defined MIDI control change controllers. The first 32 numbers (0 to 31) are coarse adjustments for various parameters. The numbers from 32 to 63 are their respective fine adjustments (ie, add 32 to the coarse adjust number to get the fine adjust number, except for the General Purpose Sliders which have no fine adjust equivalents). For example, the coarse adjustment for Channel Volume is controller number 7. The fine adjustment for Channel Volume is controller number 39 (7+32). Many devices use only the coarse adjustments, and ignore the fine adjustments.

0 Bank Select (coarse)
1 Modulation Wheel (coarse)
2 Breath controller (coarse)
4 Foot Pedal (coarse)
5 Portamento Time (coarse)
6 Data Entry (coarse)
7 Volume (coarse)
8 Balance (coarse)
10 Pan position (coarse)
11 Expression (coarse)
12 Effect Control 1 (coarse)
13 Effect Control 2 (coarse)
16 General Purpose Slider 1
17 General Purpose Slider 2
18 General Purpose Slider 3
19 General Purpose Slider 4
32 Bank Select (fine)
33 Modulation Wheel (fine)
34 Breath controller (fine)
36 Foot Pedal (fine)
37 Portamento Time (fine)
38 Data Entry (fine)
39 Volume (fine)
40 Balance (fine)
42 Pan position (fine)
43 Expression (fine)
44 Effect Control 1 (fine)
45 Effect Control 2 (fine)
64 Hold Pedal (on/off)
65 Portamento (on/off)
66 Sustenuto Pedal (on/off)
67 Soft Pedal (on/off)
68 Legato Pedal (on/off)
69 Hold 2 Pedal (on/off)
70 Sound Variation
71 Sound Timbre
72 Sound Release Time
73 Sound Attack Time
74 Sound Brightness
75 Sound Control 6
76 Sound Control 7
77 Sound Control 8
78 Sound Control 9
79 Sound Control 10
80 General Purpose Button 1 (on/off)
81 General Purpose Button 2 (on/off)
82 General Purpose Button 3 (on/off)
83 General Purpose Button 4 (on/off)
91 Effects Level
92 Tremolo Level
93 Chorus Level
94 Celeste Level
95 Phaser Level
96 Data Button increment
97 Data Button decrement
98 Non-registered Parameter (fine)
99 Non-registered Parameter (coarse)
100 Registered Parameter (fine)
101 Registered Parameter (coarse)
120 All Sound Off
121 All Controllers Off
122 Local Keyboard (on/off)
123 All Notes Off
124 Omni Mode Off
125 Omni Mode On
126 Mono Operation
127 Poly Operation

7. Pitch bend These messages are transmitted whenever an instruments pitch wheel is moved.

Channel messages - Channel Mode Messages

Controller numbers 121-127 are reserved for Channel Mode Messages. They are ...

121 Reset all controllers
122 Local On/Off
123 All notes Off
124 Omni Mode Off
125 Omni Mode On
126 Mono Mode On
127 Poly Mode On

System Messages

System Exclusive Messages

System Exclusive, or Sys Ex, messages can be addressed to an individual hardware devices. Every manufacturer of MIDI hardware has a unique Manufacturer ID assigned to it.

For example Akai’s number is 71 (47H). Roland’s is 65 (41H). Manufacturers can also assign a device number to each of the devices they manufacture.

Thus Sys Ex data transmitted on a MIDI chain will be interpreted only by the hardware device to which it is addressed, regardless of MIDI channel settings. System Exclusive messages are primarily used for three reasons ...

  1. To transmit patch/program information which describes the setup of a MIDI device such as a synthesiser or FX processor, perhaps in order to edit, organise and store libraries of patches in a computer based librarian/editing program.
  2. To transmit a sample using the MIDI Sample Dump Standard, although this is now rarely used.
  3. To remotely control the various parameters of a hardware device with a computer based editing application.

System Common Messages

There are 5 types ...

  1. MIDI Time Code (MTC)
  2. Song Position Pointers are used by the MIDI Sync/Clock synchronisation protocol to tell a slave device the timing position of the master.
  3. Song Select selects a pre-programmed song sequence on a device such as a drum machine or sequencer.
  4. Tune Request asks a device to tune itself.
  5. End of exclusive

System Real-Time Messages

These are time critical and therefore have priority over other system messages. They may occur at any time, even in the middle of another MIDI message. They include.

  • MIDI Sync/Clock timing messages (24pqn)
  • Song Start: Play from beginning of internal sequence. For example, a drum machine will return to the beginning of a song and play when it receives this message.
  • Song Stop:
  • Continue: A device will resume playing from where it last stopped.
  • Active Sensing is transmitted whilst a synchronised system is in stop mode to tell devices that the transmitting device is still connected.
  • System Reset ... resets a device to its power-up default settings.

Other MIDI issues

Running Status

Running status is a condition in which the transmission of duplicate status bytes is suspended until the status changes.

If many data bytes of the same type (status) are being transmitted consecutively normally each would be proceeded by an identical status byte. Under running status it is possible to send the first status byte only. The system will then assume all following data bytes are of the same status until a different status byte is transmitted. In this way the transmission time may be reduced.

MIDI Modes

There are four MIDI modes, usually set from the front panel of a sound creating device such as a synthesiser. These modes are no longer as important as they were when MIDI was first specified ...

  1. Mode 1 - Omni On/Poly is useful in situations where one MIDI transmitter is playing a number of sound devices simultaneously without any distinction by MIDI channel number.
  2. Mode 2 - Omni On/Mono is not often used.
  3. Mode 3 - Omni Off/Poly is the most common mode. Most MIDI devices default to this on power-up.
  4. Mode 4 - Omni Off/Mono allows a polyphonic sound device to behave as several monophonic ones.