Control Change (CC) Messages In Depth
Control Change (CC) is one of MIDI's most flexible and powerful message types. From modulation wheels to expression pedals, from volume control to effect parameters, CC messages carry nearly all real-time control needs. This article provides a complete analysis based on the official MMA specification.
1. CC Message Structure
CC messages use status bytes 0xB0-0xBF (channels 1-16), followed by two data bytes: CC number (0-127) and CC value (0-127). While 7 bits give 128 controllers, MSB/LSB pairing (CC#0-31 with CC#32-63) enables 14-bit high-resolution control (value range 0-16383).
Status: 0xBn (n = channel 0-15) Data 1: 0xCC (CC number 0-127) Data 2: 0xVV (CC value 0-127) Example: Channel Volume (CC#7) = 100 on Channel 1 → 0xB0 0x07 0x64
2. CC Controller Categories
The MIDI 1.0 specification divides 128 CC numbers into several functional ranges:
3. Complete CC Reference Table
| CC# | Name | Range | Type | Description |
|---|---|---|---|---|
| 0 | Bank Select | 0-127 | MSB | 14-bit bank select for patch/preset groups |
| 1 | Modulation Wheel | 0-127 | MSB | Typically vibrato depth |
| 2 | Breath Controller | 0-127 | MSB | Wind controller breath pressure |
| 4 | Foot Controller | 0-127 | MSB | Expression pedal input |
| 5 | Portamento Time | 0-127 | MSB | Glide speed between notes |
| 6 | Data Entry MSB | 0-127 | MSB | Used with RPN/NRPN to set parameter values |
| 7 | Channel Volume | 0-127 | MSB | Per-channel volume level |
| 8 | Balance | 0-127 | MSB | Stereo balance (0=left, 64=center, 127=right) |
| 10 | Pan | 0-127 | MSB | Mono pan position |
| 11 | Expression | 0-127 | MSB | Expression pedal, scales channel volume |
| 12 | Effect Control 1 | 0-127 | MSB | Generic effect parameter 1 |
| 13 | Effect Control 2 | 0-127 | MSB | Generic effect parameter 2 |
| 64 | Damper Pedal (Sustain) | 0-63=Off, 64-127=On | Switch | Sustain pedal (piano style) |
| 65 | Portamento On/Off | 0-63=Off, 64-127=On | Switch | Toggle portamento/glide |
| 66 | Sostenuto | 0-63=Off, 64-127=On | Switch | Sustain only held notes |
| 67 | Soft Pedal | 0-63=Off, 64-127=On | Switch | Reduce note velocity/dynamics |
| 80 | General Purpose 5 | 0-127 | MSB | MS-3: Loop 1 control (0-63=Off, 64-127=On) |
| 81 | General Purpose 6 | 0-127 | MSB | MS-3: Loop 2 control |
| 82 | General Purpose 7 | 0-127 | MSB | MS-3: Loop 3 control |
| 83 | General Purpose 8 | 0-127 | MSB | General purpose controller |
| 91 | Reverb Send Level | 0-127 | MSB | Effects 1 Depth (reverb) |
| 93 | Chorus Send Level | 0-127 | MSB | Effects 3 Depth (chorus) |
| 100 | RPN LSB | 0-127 | Special | Registered Parameter Number - LSB select |
| 101 | RPN MSB | 0-127 | Special | Registered Parameter Number - MSB select |
| 120 | All Sound Off | 0 | Mode | Immediately mute all oscillators |
| 121 | Reset All Controllers | 0 | Mode | Reset all CC values to defaults |
| 122 | Local Control | 0=Off, 127=On | Mode | Toggle keyboard-to-sound engine link |
| 123 | All Notes Off | 0 | Mode | Release all active notes |
| 126 | Mono Mode On | 0-16 | Mode | Switch to monophonic mode |
| 127 | Poly Mode On | 0 | Mode | Switch to polyphonic mode |
4. RPN: Registered Parameter Numbers
RPN is an extension to CC messages for setting standard parameters registered with the MMA. Setting an RPN requires three steps: 1) Send CC#101 (MSB) + CC#100 (LSB) to select the parameter; 2) Set the value via Data Entry (CC#6 MSB + CC#38 LSB); 3) Optionally send RPN Null to disable the data entry.
| MSB | LSB | Parameter | Description |
|---|---|---|---|
| 0x00 | 0x00 | Pitch Bend Sensitivity | MSB = semitones, LSB = cents |
| 0x00 | 0x01 | Channel Fine Tuning | 00 00 = -100 cents, 40 00 = A440 |
| 0x00 | 0x02 | Channel Coarse Tuning | 00 = -64 semitones, 40 = A440 |
| 0x00 | 0x05 | Modulation Depth Range | For GM2 vibrato depth |
| 0x7F | 0x7F | Null / Reset RPN | Disable data entry until new RPN set |
5. Channel Mode Messages
CC#120-127 are reserved for Channel Mode messages. Unlike normal CCs, these change the channel's operating mode rather than controlling sound parameters. All Sound Off (CC#120) and All Notes Off (CC#123) are especially important in pedal switching scenarios — they cleanly stop all current voices. Local Control (CC#122) disconnects the keyboard from the sound engine to prevent double-triggering during DAW recording.
6. CC in Practice on MS-3
The MS-3 uses General Purpose controllers (CC#80-82) to control the on/off state of its 3 loops. Values 0-63 are Off, 64-127 are On. Additionally, CC#102/103 handle preset navigation and CC#90/91 handle tap tempo. This means any MIDI controller (external foot controller, DAW, MIDI keyboard) can control every MS-3 function by sending these CC messages.
7. Best Practices
8. Summary
Control Change messages are the foundation of real-time MIDI control. From basic volume/expression control to precise RPN parameter adjustment, to MS-3 loop switching — understanding the CC message system gives you true mastery over your device chain. In the LdA ecosystem, CC messages are the core mechanism for seamless pedal switching.