The following table lists the major MIDI 1.0 messages in numerical (binary) order (adapted from "MIDI by the Numbers" by D. Valenti, Electronic Musician 2/88, and updated by the MIDI Association.). This table is intended as an overview of MIDI, and is by no means complete.
WARNING! Details about implementing these messages can dramatically impact compatibility with other products. We strongly recommend consulting the official MIDI Specifications for additional information.
Table 1: MIDI 1.0 Specification Message Summary | ||
Status D7----D0 |
Data Byte(s) D7----D0 |
Description |
Channel Voice Messages [nnnn = 0-15 (MIDI Channel Number 1-16)] |
||
1000nnnn | 0kkkkkkk 0vvvvvvv |
Note Off event. This message is sent when a note is released (ended). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. |
1001nnnn | 0kkkkkkk 0vvvvvvv |
Note On event. This message is sent when a note is depressed (start). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. |
1010nnnn | 0kkkkkkk 0vvvvvvv |
Polyphonic Key Pressure (Aftertouch). This message is most often sent by pressing down on the key after it "bottoms out". (kkkkkkk) is the key (note) number. (vvvvvvv) is the pressure value. |
1011nnnn | 0ccccccc 0vvvvvvv |
Control Change. This message is sent when a controller value changes. Controllers include devices such as pedals and levers. Controller numbers 120-127 are reserved as "Channel Mode Messages" (below). (ccccccc) is the controller number (0-119). (vvvvvvv) is the controller value (0-127). |
1100nnnn | 0ppppppp | Program Change. This message sent when the patch number changes. (ppppppp) is the new program number. |
1101nnnn | 0vvvvvvv | Channel Pressure (After-touch). This message is most often sent by pressing down on the key after it "bottoms out". This message is different from polyphonic after-touch. Use this message to send the single greatest pressure value (of all the current depressed keys). (vvvvvvv) is the pressure value. |
1110nnnn | 0lllllll 0mmmmmmm |
Pitch Bend Change. This message is sent to indicate a change in the pitch bender (wheel or lever, typically). The pitch bender is measured by a fourteen bit value. Center (no pitch change) is 2000H. Sensitivity is a function of the receiver, but may be set using RPN 0. (lllllll) are the least significant 7 bits. (mmmmmmm) are the most significant 7 bits. |
Channel Mode Messages (See also Control Change, above) |
||
1011nnnn | 0ccccccc 0vvvvvvv |
Channel Mode Messages. This the same code as the Control Change (above), but implements Mode control and special message by using reserved controller numbers 120-127. The commands are: |
All Sound Off. When All Sound Off is received all oscillators will turn off, and their volume envelopes are set to zero as soon as possible. c = 120, v = 0: All Sound Off | ||
Reset All Controllers. When Reset All Controllers is received, all controller values are reset to their default values. (See specific Recommended Practices for defaults). c = 121, v = x: Value must only be zero unless otherwise allowed in a specific Recommended Practice. |
||
Local Control. When Local Control is Off, all devices on a given channel will respond only to data received over MIDI. Played data, etc. will be ignored. Local Control On restores the functions of the normal controllers. c = 122, v = 0: Local Control Off c = 122, v = 127: Local Control On |
||
All Notes Off. When an All Notes Off is received, all oscillators will turn off. c = 123, v = 0: All Notes Off (See text for description of actual mode commands.) c = 124, v = 0: Omni Mode Off c = 125, v = 0: Omni Mode On c = 126, v = M: Mono Mode On (Poly Off) where M is the number of channels (Omni Off) or 0 (Omni On) c = 127, v = 0: Poly Mode On (Mono Off) (Note: These four messages also cause All Notes Off) |
||
System Common Messages |
||
11110000 |
0iiiiiii |
System Exclusive. This message type allows manufacturers to create their own messages (such as bulk dumps, patch parameters, and other non-spec data) and provides a mechanism for creating additional MIDI Specification messages. The Manufacturer's ID code (assigned by MMA or AMEI) is either 1 byte (0iiiiiii) or 3 bytes (0iiiiiii 0iiiiiii 0iiiiiii). Two of the 1 Byte IDs are reserved for extensions called Universal Exclusive Messages, which are not manufacturer-specific. If a device recognizes the ID code as its own (or as a supported Universal message) it will listen to the rest of the message (0ddddddd). Otherwise, the message will be ignored. (Note: Only Real-Time messages may be interleaved with a System Exclusive.) |
11110001 | 0nnndddd | MIDI Time Code Quarter Frame. nnn = Message Type dddd = Values |
11110010 | 0lllllll 0mmmmmmm |
Song Position Pointer. This is an internal 14 bit register that holds the number of MIDI beats (1 beat= six MIDI clocks) since the start of the song. l is the LSB, m the MSB. |
11110011 | 0sssssss | Song Select. The Song Select specifies which sequence or song is to be played. |
11110100 | Undefined. (Reserved) | |
11110101 | Undefined. (Reserved) | |
11110110 | Tune Request. Upon receiving a Tune Request, all analog synthesizers should tune their oscillators. | |
11110111 | End of Exclusive. Used to terminate a System Exclusive dump (see above). | |
System Real-Time Messages |
||
11111000 | Timing Clock. Sent 24 times per quarter note when synchronization is required (see text). | |
11111001 | Undefined. (Reserved) | |
11111010 | Start. Start the current sequence playing. (This message will be followed with Timing Clocks). | |
11111011 | Continue. Continue at the point the sequence was Stopped. | |
11111100 | Stop. Stop the current sequence. | |
11111101 | Undefined. (Reserved) | |
11111110 | Active Sensing. This message is intended to be sent repeatedly to tell the receiver that a connection is alive. Use of this message is optional. When initially received, the receiver will expect to receive another Active Sensing message each 300ms (max), and if it does not then it will assume that the connection has been terminated. At termination, the receiver will turn off all voices and return to normal (non- active sensing) operation. | |
11111111 | Reset. Reset all receivers in the system to power-up status. This should be used sparingly, preferably under manual control. In particular, it should not be sent on power-up. |
Table 3 - Control Change Messages and RPNs
The following table lists all currently defined MIDI 1.0 Control Change messages and Channel Mode messages, in control number order (adapted from "MIDI by the Numbers" by D. Valenti-Electronic Musician 2/88, and updated by the MIDI Association.) This table is intended as an overview of MIDI, and is by no means complete.
WARNING! Details about implementing these messages can dramatically impact compatibility with other products. We strongly recommend consulting the official MMA Detailed MIDI Specification for additional information.
Registered Parameter Numbers (RPNs) are an extension to the Control Change message for setting additional parameters. Appended at the bottom is a table of all currently defined RPNs.
WARNING! Details about implementing these messages can dramatically impact compatibility with other products. We strongly recommend consulting the official MMA Detailed MIDI Specification for additional information.
The following table lists all currently defined MIDI 1.0 Universal System Exclusive Messages. Universal System Exclusive Messages are defined as Real Time or Non-Real Time, and are used for extensions to MIDI that are NOT intended to be manufacturer exclusive (despite the name).
Many of these messages are defined in Specifications and Recommended Practice documentation that is available on this web site.
Table 4: Defined Universal System Exclusive Messages | |||
Non-Real Time (7EH) | |||
SUB-ID #1 | SUB-ID #2 |
DESCRIPTION |
|
00 | Unused | ||
01 |
Sample Dump Header |
||
02 |
Sample Data Packet |
||
03 |
Sample Dump Request |
||
04 | nn | MIDI Time Code | |
00 | Special | ||
01 | Punch In Points | ||
02 | Punch Out Points | ||
03 | Delete Punch In Point | ||
04 | Delete Punch Out Point | ||
05 | Event Start Point | ||
06 | Event Stop Point | ||
07 | Event Start Points with additional info. | ||
08 | Event Stop Points with additional info. | ||
09 | Delete Event Start Point | ||
0A | Delete Event Stop Point | ||
0B | Cue Points | ||
0C | Cue Points with additional info. | ||
0D | Delete Cue Point | ||
0E | Event Name in additional info. | ||
05 | nn | Sample Dump Extensions | |
01 | Loop Points Transmission | ||
02 | Loop Points Request | ||
03 | Sample Name Transmission | ||
04 | Sample Name Request | ||
05 | Extended Dump Header | ||
06 | Extended Loop Points Transmission | ||
07 | Extended Loop Points Request | ||
06 | nn | General Information | |
01 | Identity Request | ||
02 | Identity Reply | ||
07 | nn | File Dump | |
01 | Header | ||
02 | Data Packet | ||
03 | Request | ||
08 | nn | MIDI Tuning Standard (Non-Real Time) | |
00 | Bulk Dump Request | ||
01 | Bulk Dump Reply | ||
03 | Tuning Dump Request | ||
04 | Key-Based Tuning Dump | ||
05 | Scale/Octave Tuning Dump, 1 byte format | ||
06 | Scale/Octave Tuning Dump, 2 byte format | ||
07 | Single Note Tuning Change with Bank Select | ||
08 | Scale/Octave Tuning, 1 byte format | ||
09 | Scale/Octave Tuning, 2 byte format | ||
09 | nn | General MIDI | |
01 | General MIDI 1 System On | ||
02 | General MIDI System Off | ||
03 | General MIDI 2 System On | ||
0A | nn | Downloadable Sounds | |
01 | Turn DLS On | ||
02 | Turn DLS Off | ||
03 | Turn DLS Voice Allocation Off | ||
04 | Turn DLS Voice Allocation On | ||
0B | nn | File Reference Message | |
00 | reserved (do not use) | ||
01 | Open File | ||
02 | Select or Reselect Contents | ||
03 | Open File and Select Contents | ||
04 | Close File | ||
05-7F | reserved (do not use) | ||
0C | nn | MIDI Visual Control | |
00-7F | MVC Commands (See MVC Documentation) | ||
0D | nn | MIDI Capability Inquiry | |
00-7F | Inquiry/Response Messages (See Documentation) | ||
7B | -- | End of File | |
7C | -- | Wait | |
7D | -- | Cancel | |
7E | -- | NAK | |
7F | -- | ACK | |
Real Time (7FH) | |||
SUB-ID #1 | SUB-ID #2 |
DESCRIPTION |
|
00 | -- | Unused | |
01 | nn | MIDI Time Code | |
01 | Full Message | ||
02 | User Bits | ||
02 | nn | MIDI Show Control | |
00 | MSC Extensions | ||
01-7F | MSC Commands (see MSC Documentation) | ||
03 | nn | Notation Information | |
01 | Bar Number | ||
02 | Time Signature (Immediate) | ||
42 | Time Signature (Delayed) | ||
04 | nn | Device Control | |
01 | Master Volume | ||
02 | Master Balance | ||
03 | Master Fine Tuning | ||
04 | Master Coarse Tuning | ||
05 | Global Parameter Control | ||
05 | nn | Real Time MTC Cueing | |
00 | Special | ||
01 | Punch In Points | ||
02 | Punch Out Points | ||
03 | (Reserved) | ||
04 | (Reserved) | ||
05 | Event Start points | ||
06 | Event Stop points | ||
07 | Event Start points with additional info. | ||
08 | Event Stop points with additional info. | ||
09 | (Reserved) | ||
0A | (Reserved) | ||
0B | Cue points | ||
0C | Cue points with additional info. | ||
0D | (Reserved) | ||
0E | Event Name in additional info. | ||
06 | nn | MIDI Machine Control Commands | |
00-7F | MMC Commands (See MMC Documentation) | ||
07 | nn | MIDI Machine Control Responses | |
00-7F | MMC Responses (See MMC Documentation) | ||
08 | nn | MIDI Tuning Standard (Real Time) | |
02 | Single Note Tuning Change | ||
07 | Single Note Tuning Change with Bank Select | ||
08 | Scale/Octave Tuning, 1 byte format | ||
09 | Scale/Octave Tuning, 2 byte format | ||
09 | nn | Controller Destination Setting (See GM2 Documentation) | |
01 | Channel Pressure (Aftertouch) | ||
02 | Polyphonic Key Pressure (Aftertouch) | ||
03 | Controller (Control Change) | ||
0A | 01 | Key-based Instrument Control | |
0B | 01 | Scalable Polyphony MIDI MIP Message | |
0C | 00 | Mobile Phone Control Message | |