Chapter Three: MIDI

5. MIDI Data Format: Controller Change in Detail

Controller change data is where the real expressive power of MIDI comes into play. The data can be physically generated in realtime from a MIDI instrument via the mod wheel, a pedal, keyboard sliders, or even user-built data-driven devices, such as interactive Arduino-based interfaces, wireless devices such as Wiimotes or configurable mobile apps. Programs, like OSCulator, can translate other forms of user-generated data, such as OSC , into MIDI controller codes; or add easily user-designed controller functionality to your mobile device with apps like TouchOSC. Controller data can also be added manually while editing on DAWs to control virtual instrument functions.

Controllers are invoked by the controller change status byte (1011nnnn) followed by the controller number (0-127) followed by the controller value. The following chart shows one controller change packet with the mod wheel turned all the way up to 127.

Mod
Wheel
Status Byte
Ctrl+CH 1
Data Byte 1
Mod Wheel
Data Byte 2
Value
Binary 10110000 00000001 01111111
Decimal 176 1 127
click video image to play/pause

Continuous Controller Data Stream

Because these messages often result in a dense stream of changing values, running status is crucial for data reduction. Many MIDI sequencers will have the capacity to reduce the density of controller change data as well. On the left is the large stream of controller #1 (mod wheel) data on MIDI CH1 generated by turning a mod wheel up slowly. The term continuous data also includes some non-controllers, such as Pitch Bend and Aftertouch...pretty much anything that results in a stream of values.

In viewing the list of controller change numbers, you will notice that certain numbers have been assigned to specific functions. The most important of these are:

Ctrl # Function
1
modulation wheel
7
channel volume
10
pan controller
64
sustain pedal

In general, controller #'s 0-63 are reserved for continuous-type data, such as volume, mod wheel, etc., controllers 64-121 have been reserved for switch-type controllers (i.e. on-off, up-down), such as the sustain pedal. Older conventions of switch values, such as any data value over 0 = 'ON,' or recognizing only 0 = 'OFF' and 127 = 'ON' and ignoring the rest, have been replaced by the convention 0-63 = 'ON' and 64-127 = 'OFF.'

While the MIDI Specification suggests these 'default' uses, and most manufacturers have set the default for at least mod wheel, volume, panning and sustain pedal to respond to the specific numbers above, the actual response of an instrument is determined by the instrument's programming, which often can be altered. For example, while the instrument's default may be to use a sustain pedal to sustain a pitch, this may be reprogrammed to jump up an octave instead or simultaneously using the same controller # for both. When programming synth/sampler patches, combining the function of a single controller # to change multiple parameters of a sound is often a very powerful tool.

Factoid #7: It is little known (and little used) that controller #'s 32-63 are reserved as an additional 7-bit LSB for corresponding controller #'s 0-31, creating 14-bit resolution if desired, similar to Pitch Bend. For example, controller #39 can be used as a fine-tuning of controller #7 (main volume). The same is true for controller #33 which acts as an LSB for controller #1 (modulation wheel).

Controller #'s 122-127 are reserved for channel mode messages, described in the next section. A complete list of the MIDI 1.0 spec assigned controller numbers appears on the next page.