This is a universal real time system exclusive message. It was introduced with the General MIDI 2 standard to standardize the control over individual keys (individual note numbers) for MIDI devices that have the capability of modifying the sound of individual keys. An example of such a device is a drum machine in which individual keys produce individual drum sounds and in which manufacturers will otherwise use proprietary system exclusive messages or non-registered parameter numbers to modify the sound of individual keys. The purpose of the message is to allow control over the individual keys, similar to the control that is provided over MIDI channels with the MIDI Controller message.
The form of the key-based instrument controller message is the following.
0xF0 0x7F 0xid 0x0A 0x01 0x0c 0xkk 0xnn 0xvv 0xnn 0xvv … 0xF7
0xF0 tells the MIDI device that this is a system exclusive message. 0x7F shows that this is a real time universal system exclusive message. 0xid is the target device ID (if this byte is also 0x7F, the message would be sent to all devices). 0x0A is sub-ID 1 of the message and shows that this is the key-based instrument controller message. 0x01 is the sub-ID 2 of the message and shows that this is a basic message. 0x0c is the MIDI channel (from 0x00 to 0x0F). 0xkk is the key number (note number, see MIDI Note On message). The pairs 0xnn 0xvv are the controller number and value pairs. These are described below. 0xF7 signifies the end of the message.
Any MIDI controller number 0xnn (see MIDI Controller message) can be used, except for 0x00 and 0x20 (bank select), 0x06 and 0x26 (data entry), 0x60 to 0x65 (RPN and NRPN), and 0x7A to 0x7F (mode changes). 0x78 and 0x79, which are also mode changes, can be used, but with different use than in channel controllers, as fine and coarse tuning respectively.
Controller values 0xvv range from 0x00 to 0x7F, with 0x40 recommended as the factory default and with lower values and higher values producing relative decreases or increases respectively in the controller. Several controllers are exceptions, and the controller values are absolute and not relative to a factory default. These include pan (controller number 0x0A), reverb send (controller number 0x5B), and chorus send (controller number 0x5D). See below.
According to the MIDI recommended practice, this message is designed for percussion channels and melody channels should not respond. The following four controllers have a precisely defined response in the recommended practice.
|Controller||Name||Value range||Value description||Default|
|0x07||Volume||0x00-0x7F||Relative: 0% at 0x00, 100% at 0x40, (127/64)*100% at 0x7F||0x40 (100%)|
|0x0A||Pan||0x00-0x7F||Absolute: Left-Center-Right, where center is 0x40|
|0x5B||Reverb send level||0x00-0x7F||Absolute: 0 to max|
|0x5D||Chorus send level||0x00-0x7F||Absolute: 0 to max|
An example key-based instrument controller message
The following is an example MIDI key-based instrument controller message.
0xF0 0x7F 0xid 0x0A 0x01 0x02 0x3C 0x0A 0x0x00 0xF7
0xF0 0x7F 0x7F shows that this is a universal real time system exclusive message sent to all devices. 0x0A shows that this is the key-based instrument controller message. 0x01 shows that this is a basic message. 0x02 is the MIDI channel. 0x3C (60 decimal) is the note number for middle C. 0x0A is the pan controller. The pan is set to 0x00, which is far left. 0xF7 is the end of the message. In other words, this message changes the pan of the sound produced by the middle C key on channel 2 to far left.