14-bit Control Change Messages
7-bit not enough
Standard MIDI Control Change (CC) messages use 7-bit values, which means they can represent values from 0 to 127.
This is often sufficient for switches or coarse controls, but it can feel stepped or imprecise for parameters like:
- filter cutoff
- pitch-related modulation
- smooth fades
- high-resolution encoders
To solve this, MIDI defines a way to combine two CC messages into a single 14-bit value.
What “14-bit” Means
A 14-bit value can represent:
0 – 16383This gives 128 times more resolution than a 7-bit CC.
How 14-bit CC Works
A 14-bit Control Change value is split into two parts:
- MSB (Most Significant Byte) — coarse value
- LSB (Least Significant Byte) — fine value
Each part is sent as a separate CC message.
Controller Number Pairing
MIDI reserves CC numbers in pairs:
| Purpose | CC Number |
|---|---|
| MSB | 0–31 |
| LSB | 32–63 |
Example:
- CC 1 → MSB
- CC 33 → LSB
Byte Structure Each CC message still follows the standard format:
[ Status ] [ Controller Number ] [ Value ]The difference is semantic, not structural.
Example: 14-bit Modulation Wheel
Modulation Wheel uses:
- CC 1 (MSB)
- CC 33 (LSB)
Sending MSB First
0xB0 1 64Sending LSB
0xB0 33 32Combining the Values
The final 14-bit value is computed as:
value = (MSB * 128) + LSBExample:
MSB = 64
LSB = 32
value = 64 * 128 + 32
value = 8224Order of Transmission
The MSB should be sent first, followed by the LSB. This allows devices that only support 7-bit CC to still respond to the MSB message.
Backward Compatibility
This design is intentional:
- Older devices ignore the LSB
- Newer devices combine MSB + LSB
This ensures compatibility across generations of MIDI hardware.
| Function | MSB | LSB |
|---|---|---|
| Bank Select | 0 | 32 |
| Modulation Wheel | 1 | 33 |
| Breath Controller | 2 | 34 |
| Foot Controller | 4 | 36 |
| Portamento Time | 5 | 37 |
| Data Entry | 6 | 38 |
Running Status and 14-bit CC
Running status applies normally:
0xB0 1 64
33 32This further reduces bandwidth.
Summary
14-bit Control Change messages provide high-resolution control by combining two standard CC messages: an MSB (0–31) and an LSB (32–63). Together they form a 14-bit value ranging from 0 to 16383. This mechanism allows smooth parameter control while remaining backward compatible with older MIDI devices.