MIDI Electrical Specification Diagram & Proper Design of Joystick/MIDI Adapter


Figure 1: Electrical Specification Diagram

(Note: This diagram is superceded by MIDI 1.0 Electrical Specification Update [2014])

 

MIDI Standard Hardware NOTES:
1. Opto-isolator shown is Sharp PC-900. HP 6N138 or other can be used with changes.
2. Gates "A" are IC or transistor; Resistors are 5%.
3. Maximum cable length is fifty feet (15 meters), terminated on each end by a 5-pin DIN male plug (i.e. SWITCHCRAFT 05GM5M).
4. Cable is shielded twisted pair, with shield connected to pin 2 at both ends.


Figure 2: Joystick/MIDI Adapter Diagram

(Note: Clicking on the Image will open a full size Image in a new Window.)

Joystick Adapter NOTES:
1. A good choice for the Optoisolator 6N137. A 6N138 will work, but is slower.
2. Resistors are 5%
3. Inverter A can be an IC or a transistor.
4. It is extremely important not to ground pin 2 of the MIDI IN connector. A noise-causing ground loop will result if you do. Pin 2 of the MIDI OUT connector should be grounded. That way the shield of the MIDI cable will be grounded on one end as desired.

Ground loops will cause horrendous hum, buzzes, and other noises, especially when connected to computerized gear or lighting equipment. The noises are caused by differences in voltage potential from one end of the cable to the other. The remedy, of course, is to run balanced audio lines and to NEVER physically connect the chassis grounds of different pieces of equipment together. MIDI instrument designers understand ground loops. In fact, a major design goal of MIDI, as seen in the electrical specification explanation in the MIDI Specification Document, is to prevent any ground loops that might occur with the MIDI cables. This is done by using a balanced current loop through an opto-isolator and only grounding the MIDI outputs. The MIDI IN connector is not grounded to the receiver's chassis. When done correctly, there are no ground loops and no hum or other noises caused by the MIDI setup.

Designers of personal computers are not generally audio engineers and apparently have not heard of ground loops. In fact, given the noisy fans and screaming disk drives that go into the PC, it is a wonder they can hear at all. All that noise forces some audio professionals keep the computer in a closet or another room. But the primary source of ground loop problems in PC audio is the PC soundcard MIDI interface.

A PC soundcard exports the serial MIDI signal from its UART on two pins of its joystick or game port. A $50 cable converts this to the approved MIDI connector, and is supposed to include the necessary opto-isolator for conversion to the required balanced current loop. The MIDI IN connector is supposed to have the opto-isolator and no ground connection to pin 2 or to the shield for the express purpose of avoiding a ground loop.

We were able to locate six different such cables, all of which violate the MIDI hardware specification by grounding both MIDI connectors (MIDI IN and MIDI OUT). ALL of these cables will cause ground loops, and generate hum and other unnecessary noise.


MIDI Messages

Table 2 - Expanded Messages List (Status Bytes)
Table 3 - Control Change Messages (Data Bytes)
Table 4 - Universal System Exclusive Messages

Table 1 - Summary of MIDI Messages

The following table lists many of the major MIDI messages in numerical (binary) order. This table is intended as an overview of MIDI, and is by no means complete. Additional messages are listed in the printed documentation available from the MMA.

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.

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. 0mmmmmmm 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 transmitter. (llllll) are the least significant 7 bits. (mmmmmm) 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
[0iiiiiii
0iiiiiii]
0ddddddd
---
---
0ddddddd
11110111

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 2 - Expanded Messages List (Status Bytes)

TOP

The following table lists Status Bytes in binary numerical order (adapted from "MIDI by the Numbers" by D. Valenti, Electronic Musician 2/88, and updated 1995 By the MIDI Manufacturers Association.)

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.

Table 2: Expanded Status Bytes List 
STATUS BYTE
DATA BYTES
1st Byte Value
Binary |Hex| Dec
Function 2nd Byte 3rd Byte
10000000= 80= 128 Chan 1 Note off Note Number (0-127) Note Velocity (0-127)
10000001= 81= 129 Chan 2 Note off Note Number (0-127) Note Velocity (0-127)
10000010= 82= 130 Chan 3 Note off Note Number (0-127) Note Velocity (0-127)
10000011= 83= 131 Chan 4 Note off Note Number (0-127) Note Velocity (0-127)
10000100= 84= 132 Chan 5 Note off Note Number (0-127) Note Velocity (0-127)
10000101= 85= 133 Chan 6 Note off Note Number (0-127) Note Velocity (0-127)
10000110= 86= 134 Chan 7 Note off Note Number (0-127) Note Velocity (0-127)
10000111= 87= 135 Chan 8 Note off Note Number (0-127) Note Velocity (0-127)
10001000= 88= 136 Chan 9 Note off Note Number (0-127) Note Velocity (0-127)
10001001= 89= 137 Chan 10 Note off Note Number (0-127) Note Velocity (0-127)
10001010= 8A= 138 Chan 11 Note off Note Number (0-127) Note Velocity (0-127)
10001011= 8B= 139 Chan 12 Note off Note Number (0-127) Note Velocity (0-127)
10001100= 8C= 140 Chan 13 Note off Note Number (0-127) Note Velocity (0-127)
10001101= 8D= 141 Chan 14 Note off Note Number (0-127) Note Velocity (0-127)
10001110= 8E= 142 Chan 15 Note off Note Number (0-127) Note Velocity (0-127)
10001111= 8F= 143 Chan 16 Note off Note Number (0-127) Note Velocity (0-127)
10010000= 90= 144 Chan 1 Note on Note Number (0-127) Note Velocity (0-127)
10010001= 91= 145 Chan 2 Note on Note Number (0-127) Note Velocity (0-127)
10010010= 92= 146 Chan 3 Note on Note Number (0-127) Note Velocity (0-127)
10010011= 93= 147 Chan 4 Note on Note Number (0-127) Note Velocity (0-127)
10010100= 94= 148 Chan 5 Note on Note Number (0-127) Note Velocity (0-127)
10010101= 95= 149 Chan 6 Note on Note Number (0-127) Note Velocity (0-127)
10010110= 96= 150 Chan 7 Note on Note Number (0-127) Note Velocity (0-127)
10010111= 97= 151 Chan 8 Note on Note Number (0-127) Note Velocity (0-127)
10011000= 98= 152 Chan 9 Note on Note Number (0-127) Note Velocity (0-127)
10011001= 99= 153 Chan 10 Note on Note Number (0-127) Note Velocity (0-127)
10011010= 9A= 154 Chan 11 Note on Note Number (0-127) Note Velocity (0-127)
10011011= 9B= 155 Chan 12 Note on Note Number (0-127) Note Velocity (0-127)
10011100= 9C= 156 Chan 13 Note on Note Number (0-127) Note Velocity (0-127)
10011101= 9D= 157 Chan 14 Note on Note Number (0-127) Note Velocity (0-127)
10011110= 9E= 158 Chan 15 Note on Note Number (0-127) Note Velocity (0-127)
10011111= 9F= 159 Chan 16 Note on Note Number (0-127) Note Velocity (0-127)
10100000= A0= 160 Chan 1 Polyphonic Aftertouch Note Number (0-127) Pressure (0-127)
10100001= A1= 161 Chan 2 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10100010= A2= 162 Chan 3 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10100011= A3= 163 Chan 4 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10100100= A4= 164 Chan 5 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10100101= A5= 165 Chan 6 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10100110= A6= 166 Chan 7 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10100111= A7= 167 Chan 8 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10101000= A8= 168 Chan 9 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10101001= A9= 169 Chan 10 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10101010= AA= 170 Chan 11 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10101011= AB= 171 Chan 12 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10101100= AC= 172 Chan 13 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10101101= AD= 173 Chan 14 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10101110= AE= 174 Chan 15 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10101111= AF= 175 Chan 16 Polyphonic Aftertouch Note Number (0-127 Pressure (0-127)
10110000= B0= 176 Chan 1 Control/Mode Change see Table 3 see Table 3
10110001= B1= 177 Chan 2 Control/Mode Change see Table 3 see Table 3
10110010= B2= 178 Chan 3 Control/Mode Change see Table 3 see Table 3
10110011= B3= 179 Chan 4 Control/Mode Change see Table 3 see Table 3
10110100= B4= 180 Chan 5 Control/Mode Change see Table 3 see Table 3
10110101= B5= 181 Chan 6 Control/Mode Change see Table 3 see Table 3
10110110= B6= 182 Chan 7 Control/Mode Change see Table 3 see Table 3
10110111= B7= 183 Chan 8 Control/Mode Change see Table 3 see Table 3
10111000= B8= 184 Chan 9 Control/Mode Change see Table 3 see Table 3
10111001= B9= 185 Chan 10 Control/Mode Change see Table 3 see Table 3
10111010= BA= 186 Chan 11 Control/Mode Change see Table 3 see Table 3
10111011= BB= 187 Chan 12 Control/Mode Change see Table 3 see Table 3
10111100= BC= 188 Chan 13 Control/Mode Change see Table 3 see Table 3
10111101= BD= 189 Chan 14 Control/Mode Change see Table 3 see Table 3
10111110= BE= 190 Chan 15 Control/Mode Change see Table 3 see Table 3
10111111= BF= 191 Chan 16 Control/Mode Change see Table 3 see Table 3
11000000= C0= 192 Chan 1 Program Change Program # (0-127) none
11000001= C1= 193 Chan 2 Program Change Program # (0-127) none
11000010= C2= 194 Chan 3 Program Change Program # (0-127) none
11000011= C3= 195 Chan 4 Program Change Program # (0-127) none
11000100= C4= 196 Chan 5 Program Change Program # (0-127) none
11000101= C5= 197 Chan 6 Program Change Program # (0-127) none
11000110= C6= 198 Chan 7 Program Change Program # (0-127) none
11000111= C7= 199 Chan 8 Program Change Program # (0-127) none
11001000= C8= 200 Chan 9 Program Change Program # (0-127) none
11001001= C9= 201 Chan 10 Program Change Program # (0-127) none
11001010= CA= 202 Chan 11 Program Change Program # (0-127) none
11001011= CB= 203 Chan 12 Program Change Program # (0-127) none
11001100= CC= 204 Chan 13 Program Change Program # (0-127) none
11001101= CD= 205 Chan 14 Program Change Program # (0-127) none
11001110= CE= 206 Chan 15 Program Change Program # (0-127) none
11001111= CF= 207 Chan 16 Program Change Program # (0-127) none
11010000= D0= 208 Chan 1 Channel Aftertouch Pressure (0-127) none
11010001= D1= 209 Chan 2 Channel Aftertouch Pressure (0-127) none
11010010= D2= 210 Chan 3 Channel Aftertouch Pressure (0-127) none
11010011= D3= 211 Chan 4 Channel Aftertouch Pressure (0-127) none
11010100= D4= 212 Chan 5 Channel Aftertouch Pressure (0-127) none
11010101= D5= 213 Chan 6 Channel Aftertouch Pressure (0-127) none
11010110= D6= 214 Chan 7 Channel Aftertouch Pressure (0-127) none
11010111= D7= 215 Chan 8 Channel Aftertouch Pressure (0-127) none
11011000= D8= 216 Chan 9 Channel Aftertouch Pressure (0-127) none
11011001= D9= 217 Chan 10 Channel Aftertouch Pressure (0-127) none
11011010= DA= 218 Chan 11 Channel Aftertouch Pressure (0-127) none
11011011= DB= 219 Chan 12 Channel Aftertouch Pressure (0-127) none
11011100= DC= 220 Chan 13 Channel Aftertouch Pressure (0-127) none
11011101= DD= 221 Chan 14 Channel Aftertouch Pressure (0-127) none
11011110= DE= 222 Chan 15 Channel Aftertouch Pressure (0-127) none
11011111= DF= 223 Chan 16 Channel Aftertouch Pressure (0-127) none
11100000= E0= 224 Chan 1 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11100001= E1= 225 Chan 2 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11100010= E2= 226 Chan 3 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11100011= E3= 227 Chan 4 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11100100= E4= 228 Chan 5 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11100101= E5= 229 Chan 6 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11100110= E6= 230 Chan 7 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11100111= E7= 231 Chan 8 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11101000= E8= 232 Chan 9 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11101001= E9= 233 Chan 10 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11101010= EA= 234 Chan 11 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11101011= EB= 235 Chan 12 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11101100= EC= 236 Chan 13 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11101101= ED= 237 Chan 14 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11101110= EE= 238 Chan 15 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11101111= EF= 239 Chan 16 Pitch Bend Change Pitch Bender LSB (0-127) Pitch Bender MSB (0-127)
11110000= F0= 240 System Exclusive ** **
11110001= F1= 241 MIDI Time Code Qtr. Frame -see spec- -see spec-
11110010= F2= 242 Song Position Pointer LSB MSB
11110011= F3= 243 Song Select (Song #) (0-127) none
11110100= F4= 244 Undefined (Reserved) --- ---
11110101= F5= 245 Undefined (Reserved) --- ---
11110110= F6= 246 Tune request none none
11110111= F7= 247 End of SysEx (EOX) none none
11111000= F8= 248 Timing clock none none
11111001= F9= 249 Undefined (Reserved) --- ---
11111010= FA= 250 Start none none
11111011= FB= 251 Continue none none
11111100= FC= 252 Stop none none
11111101= FD= 253 Undefined (Reserved) --- ---
11111110= FE= 254 Active Sensing none none
11111111= FF= 255 System Reset none none
** Note: System Exclusive (data dump) 2nd byte= Vendor ID (or Universal Exclusive) followed by more data bytes and ending with EOX.

 

Table 3 - Control Change Messages (Data Bytes)

TOP

The following table lists all currently defined Control Change messages and Channel Mode messages, in control number order. (Adapted from "MIDI by the Numbers" by D. Valenti-Electronic Musician 2/88, updated by the MIDI Manufacturers Association.) 

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 Specificationfor additional information.

Table 3: Control Changes and Mode Changes
(Status Bytes 176-191)
Control Number
(2nd Byte Value)
Control Function 3rd Byte Value
Decimal Binary Hex Value Used As
0 00000000 00 Bank Select 0-127 MSB
1 00000001 01 Modulation Wheel or Lever 0-127 MSB
2 00000010 02 Breath Controller 0-127 MSB
3 00000011 03 Undefined 0-127 MSB
4 00000100 04 Foot Controller 0-127 MSB
5 00000101 05 Portamento Time 0-127 MSB
6 00000110 06 Data Entry MSB 0-127 MSB
7 00000111 07 Channel Volume (formerly Main Volume) 0-127 MSB
8 00001000 08 Balance 0-127 MSB
9 00001001 09 Undefined 0-127 MSB
10 00001010 0A Pan 0-127 MSB
11 00001011 0B Expression Controller 0-127 MSB
12 00001100 0C Effect Control 1 0-127 MSB
13 00001101 0D Effect Control 2 0-127 MSB
14 00001110 0E Undefined 0-127 MSB
15 00001111 0F Undefined 0-127 MSB
16 00010000 10 General Purpose Controller 1 0-127 MSB
17 00010001 11 General Purpose Controller 2 0-127 MSB
18 00010010 12 General Purpose Controller 3 0-127 MSB
19 00010011 13 General Purpose Controller 4 0-127 MSB
20 00010100 14 Undefined 0-127 MSB
21 00010101 15 Undefined 0-127 MSB
22 00010110 16 Undefined 0-127 MSB
23 00010111 17 Undefined 0-127 MSB
24 00011000 18 Undefined 0-127 MSB
25 00011001 19 Undefined 0-127 MSB
26 00011010 1A Undefined 0-127 MSB
27 00011011 1B Undefined 0-127 MSB
28 00011100 1C Undefined 0-127 MSB
29 00011101 1D Undefined 0-127 MSB
30 00011110 1E Undefined 0-127 MSB
31 00011111 1F Undefined 0-127 MSB
32 00100000 20 LSB for Control 0 (Bank Select) 0-127 LSB
33 00100001 21 LSB for Control 1 (Modulation Wheel or Lever) 0-127 LSB
34 00100010 22 LSB for Control 2 (Breath Controller) 0-127 LSB
35 00100011 23 LSB for Control 3 (Undefined) 0-127 LSB
36 00100100 24 LSB for Control 4 (Foot Controller) 0-127 LSB
37 00100101 25 LSB for Control 5 (Portamento Time) 0-127 LSB
38 00100110 26 LSB for Control 6 (Data Entry) 0-127 LSB
39 00100111 27 LSB for Control 7 (Channel Volume, formerly Main Volume) 0-127 LSB
40 00101000 28 LSB for Control 8 (Balance) 0-127 LSB
41 00101001 29 LSB for Control 9 (Undefined) 0-127 LSB
42 00101010 2A LSB for Control 10 (Pan) 0-127 LSB
43 00101011 2B LSB for Control 11 (Expression Controller) 0-127 LSB
44 00101100 2C LSB for Control 12 (Effect control 1) 0-127 LSB
45 00101101 2D LSB for Control 13 (Effect control 2) 0-127 LSB
46 00101110 2E LSB for Control 14 (Undefined) 0-127 LSB
47 00101111 2F LSB for Control 15 (Undefined) 0-127 LSB
48 00110000 30 LSB for Control 16 (General Purpose Controller 1) 0-127 LSB
49 00110001 31 LSB for Control 17 (General Purpose Controller 2) 0-127 LSB
50 00110010 32 LSB for Control 18 (General Purpose Controller 3) 0-127 LSB
51 00110011 33 LSB for Control 19 (General Purpose Controller 4) 0-127 LSB
52 00110100 34 LSB for Control 20 (Undefined) 0-127 LSB
53 00110101 35 LSB for Control 21 (Undefined) 0-127 LSB
54 00110110 36 LSB for Control 22 (Undefined) 0-127 LSB
55 00110111 37 LSB for Control 23 (Undefined) 0-127 LSB
56 00111000 38 LSB for Control 24 (Undefined) 0-127 LSB
57 00111001 39 LSB for Control 25 (Undefined) 0-127 LSB
58 00111010 3A LSB for Control 26 (Undefined) 0-127 LSB
59 00111011 3B LSB for Control 27 (Undefined) 0-127 LSB
60 00111100 3C LSB for Control 28 (Undefined) 0-127 LSB
61 00111101 3D LSB for Control 29 (Undefined) 0-127 LSB
62 00111110 3E LSB for Control 30 (Undefined) 0-127 LSB
63 00111111 3F LSB for Control 31 (Undefined) 0-127 LSB
64 01000000 40 Damper Pedal on/off (Sustain) ≤63 off, ≥64 on ---
65 01000001 41 Portamento On/Off ≤63 off, ≥64 on ---
66 01000010 42 Sostenuto On/Off ≤63 off, ≥64 on ---
67 01000011 43 Soft Pedal On/Off ≤63 off, ≥64 on ---
68 01000100 44 Legato Footswitch ≤63 Normal, ≥64 Legato ---
69 01000101 45 Hold 2 ≤63 off, ≥64 on ---
70 01000110 46 Sound Controller 1 (default: Sound Variation) 0-127 LSB
71 01000111 47 Sound Controller 2 (default: Timbre/Harmonic Intens.) 0-127 LSB
72 01001000 48 Sound Controller 3 (default: Release Time) 0-127 LSB
73 01001001 49 Sound Controller 4 (default: Attack Time) 0-127 LSB
74 01001010 4A Sound Controller 5 (default: Brightness) 0-127 LSB
75 01001011 4B Sound Controller 6 (default: Decay Time - see MMA RP-021) 0-127 LSB
76 01001100 4C Sound Controller 7 (default: Vibrato Rate - see MMA RP-021) 0-127 LSB
77 01001101 4D Sound Controller 8 (default: Vibrato Depth - see MMA RP-021) 0-127 LSB
78 01001110 4E Sound Controller 9 (default: Vibrato Delay - see MMA RP-021) 0-127 LSB
79 01001111 4F Sound Controller 10 (default undefined - see MMA RP-021) 0-127 LSB
80 01010000 50 General Purpose Controller 5 0-127 LSB
81 01010001 51 General Purpose Controller 6 0-127 LSB
82 01010010 52 General Purpose Controller 7 0-127 LSB
83 01010011 53 General Purpose Controller 8 0-127 LSB
84 01010100 54 Portamento Control 0-127 LSB
85 01010101 55 Undefined --- ---
86 01010110 56 Undefined --- ---
87 01010111 57 Undefined --- ---
88 01011000 58 High Resolution Velocity Prefix 0-127 LSB
89 01011001 59 Undefined --- ---
90 01011010 5A Undefined --- ---
91 01011011 5B Effects 1 Depth
(default: Reverb Send Level - see MMA RP-023)
(formerly External Effects Depth)
0-127 ---
92 01011100 5C Effects 2 Depth (formerly Tremolo Depth) 0-127 ---
93 01011101 5D Effects 3 Depth
(default: Chorus Send Level - see MMA RP-023)
(formerly Chorus Depth)
0-127 ---
94 01011110 5E Effects 4 Depth (formerly Celeste [Detune] Depth) 0-127 ---
95 01011111 5F Effects 5 Depth (formerly Phaser Depth) 0-127 ---
96 01100000 60 Data Increment (Data Entry +1) (see MMA RP-018) N/A ---
97 01100001 61 Data Decrement (Data Entry -1) (see MMA RP-018) N/A ---
98 01100010 62 Non-Registered Parameter Number (NRPN) - LSB 0-127 LSB
99 01100011 63 Non-Registered Parameter Number (NRPN) - MSB 0-127 MSB
100 01100100 64 Registered Parameter Number (RPN) - LSB* 0-127 LSB
101 01100101 65 Registered Parameter Number (RPN) - MSB* 0-127 MSB
102 01100110 66 Undefined --- ---
103 01100111 67 Undefined --- ---
104 01101000 68 Undefined --- ---
105 01101001 69 Undefined --- ---
106 01101010 6A Undefined --- ---
107 01101011 6B Undefined --- ---
108 01101100 6C Undefined --- ---
109 01101101 6D Undefined --- ---
110 01101110 6E Undefined --- ---
111 01101111 6F Undefined --- ---
112 01110000 70 Undefined --- ---
113 01110001 71 Undefined --- ---
114 01110010 72 Undefined --- ---
115 01110011 73 Undefined --- ---
116 01110100 74 Undefined --- ---
117 01110101 75 Undefined --- ---
118 01110110 76 Undefined --- ---
119 01110111 77 Undefined --- ---
Note: Controller numbers 120-127 are reserved for Channel Mode Messages, which rather than controlling sound parameters, affect the channel's operating mode. (See also Table 1.)
120 01111000 78 [Channel Mode Message] All Sound Off 0 ---
121 01111001 79 [Channel Mode Message] Reset All Controllers
(See MMA RP-015)
0 ---
122 01111010 7A [Channel Mode Message] Local Control On/Off 0 off, 127 on ---
123 01111011 7B [Channel Mode Message] All Notes Off 0 ---
124 01111100 7C [Channel Mode Message] Omni Mode Off (+ all notes off) 0 ---
125 01111101 7D [Channel Mode Message] Omni Mode On (+ all notes off) 0 ---
126 01111110 7E [Channel Mode Message] Mono Mode On (+ poly off, + all notes off)

Note: This equals the number of channels, or zero if the number of channels equals the number of voices in the receiver.

---
127 01111111 7F [Channel Mode Message] Poly Mode On (+ mono off, +all notes off) 0 ---


Table 3a: Registered Parameter Numbers

To set or change the value of a Registered Parameter:

1. Send two Control Change messages using Control Numbers 101 (65H) and 100 (64H) to select the desired Registered Parameter Number, as per the following table.

2. To set the selected Registered Parameter to a specific value, send a Control Change messages to the Data Entry MSB controller (Control Number 6). If the selected Registered Parameter requires the LSB to be set, send another Control Change message to the Data Entry LSB controller (Control Number 38).

3. To make a relative adjustment to the selected Registered Parameter's current value, use the Data Increment or Data Decrement controllers (Control Numbers 96 and 97).

Parameter Number Parameter Function Data Entry Value
MSB: Control 101 (65H) Value LSB: Control 100 (64H) Value
00H 00H Pitch Bend Sensitivity MSB = +/- semitones
LSB =+/--cents
01H Channel Fine Tuning
(formerly Fine Tuning - see MMA RP-022)
Resolution 100/8192 cents
00H 00H = -100 cents
40H 00H = A440
7FH 7FH = +100 cents
02H Channel Coarse Tuning
(formerly Coarse Tuning - see MMA RP-022)
Only MSB used
Resolution 100 cents
00H = -6400 cents
40H = A440
7FH = +6300 cents
03H Tuning Program Change Tuning Program Number
04H Tuning Bank Select Tuning Bank Number
05H  Modulation Depth Range
(see MMA General MIDI Level 2 Specification)
For GM2, defined in GM2 Specification.
For other systems, defined by manufacturer
 ...  ...  All RESERVED for future MMA Definition  ...
3DH (61) Three Dimensional Sound Controllers
00H AZIMUTH ANGLE  See RP-049
01H ELEVATION ANGLE  See RP-049
02H GAIN  See RP-049
03H DISTANCE RATIO  See RP-049
04H MAXIMUM DISTANCE  See RP-049
05H GAIN AT MAXIMUM DISTANCE  See RP-049
06H REFERENCE DISTANCE RATIO  See RP-049
07H PAN SPREAD ANGLE  See RP-049
08H ROLL ANGLE  See RP-049
 ...  ...  All RESERVED for future MMA Definition  ...
7FH 7FH Null Function Number for RPN/NRPN Setting RPN to 7FH,7FH will disable the data entry, data increment, and data decrement controllers until a new RPN or NRPN is selected.

 

Table 4 - Universal System Exclusive Messages

TOP
The following table lists all currently defined 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 whose printed documentation is available from the MMA. Others are defined in Recommended Practice documentation that may be found on this web site.

WARNING! Details about implementing these messages can dramatically impact compatibility with other products. We strongly recommend consulting the appropriate MMA Specification or Recommended Practice for additional information.

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)
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 Course 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