FREE worldwide shipping on orders over $200.
Back to Lab

Control Change (CC) Messages In Depth

Advanced2025-02-01

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:

CC#0-31
14-bit controller MSB (coarse)
CC#32-63
14-bit controller LSB (fine)
CC#64-69
Switch controllers (on/off)
CC#70-79
Sound controllers (synthesizer parameters)
CC#80-83
General purpose (MS-3 uses for Loop control)
CC#91-95
Effects depth (reverb/chorus etc.)
CC#120-127
Channel Mode messages (special functions)

3. Complete CC Reference Table

CC#NameRangeTypeDescription
0Bank Select0-127MSB14-bit bank select for patch/preset groups
1Modulation Wheel0-127MSBTypically vibrato depth
2Breath Controller0-127MSBWind controller breath pressure
4Foot Controller0-127MSBExpression pedal input
5Portamento Time0-127MSBGlide speed between notes
6Data Entry MSB0-127MSBUsed with RPN/NRPN to set parameter values
7Channel Volume0-127MSBPer-channel volume level
8Balance0-127MSBStereo balance (0=left, 64=center, 127=right)
10Pan0-127MSBMono pan position
11Expression0-127MSBExpression pedal, scales channel volume
12Effect Control 10-127MSBGeneric effect parameter 1
13Effect Control 20-127MSBGeneric effect parameter 2
64Damper Pedal (Sustain)0-63=Off, 64-127=OnSwitchSustain pedal (piano style)
65Portamento On/Off0-63=Off, 64-127=OnSwitchToggle portamento/glide
66Sostenuto0-63=Off, 64-127=OnSwitchSustain only held notes
67Soft Pedal0-63=Off, 64-127=OnSwitchReduce note velocity/dynamics
80General Purpose 50-127MSBMS-3: Loop 1 control (0-63=Off, 64-127=On)
81General Purpose 60-127MSBMS-3: Loop 2 control
82General Purpose 70-127MSBMS-3: Loop 3 control
83General Purpose 80-127MSBGeneral purpose controller
91Reverb Send Level0-127MSBEffects 1 Depth (reverb)
93Chorus Send Level0-127MSBEffects 3 Depth (chorus)
100RPN LSB0-127SpecialRegistered Parameter Number - LSB select
101RPN MSB0-127SpecialRegistered Parameter Number - MSB select
120All Sound Off0ModeImmediately mute all oscillators
121Reset All Controllers0ModeReset all CC values to defaults
122Local Control0=Off, 127=OnModeToggle keyboard-to-sound engine link
123All Notes Off0ModeRelease all active notes
126Mono Mode On0-16ModeSwitch to monophonic mode
127Poly Mode On0ModeSwitch 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.

MSBLSBParameterDescription
0x000x00Pitch Bend SensitivityMSB = semitones, LSB = cents
0x000x01Channel Fine Tuning00 00 = -100 cents, 40 00 = A440
0x000x02Channel Coarse Tuning00 = -64 semitones, 40 = A440
0x000x05Modulation Depth RangeFor GM2 vibrato depth
0x7F0x7FNull / Reset RPNDisable 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

Use CC#7 (Channel Volume) with CC#11 (Expression) for relative volume control
Use 14-bit MSB/LSB pairs for high-precision parameters (e.g., pitch bend range)
Send CC#123 (All Notes Off) + CC#120 (All Sound Off) before preset changes to avoid stuck notes
Use CC#121 (Reset All Controllers) before a song starts to reset all parameters to defaults
Avoid sending too many CC messages per second in dense sequences — MIDI bandwidth is limited (31.25 Kbaud), excessive messages can cause latency

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.