Control Change (CC) 消息详解
Control Change (CC) 是 MIDI 协议中最灵活、最强大的消息类型之一。从调制轮到表情踏板,从音量控制到效果参数,CC 消息几乎承载了所有实时控制需求。本文基于 MMA 官方规范,完整解析 CC 消息体系。
1. CC 消息结构
CC 消息使用状态字节 0xB0-0xBF(通道 1-16),后跟两个数据字节:CC 编号 (0-127) 和 CC 值 (0-127)。CC 编号的高 7 位可表示 128 个控制器,但通过 MSB/LSB 配对(CC#0-31 与 CC#32-63),可实现 14-bit 高精度控制(值范围 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 控制器分类
MIDI 1.0 规范将 128 个 CC 编号分为几个功能区间:
3. 完整 CC 对照表
| CC# | 名称 | 范围 | 类型 | 说明 |
|---|---|---|---|---|
| 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:注册参数号
RPN 是 CC 消息的扩展机制,用于设置已在 MMA 注册的标准参数。设置 RPN 需要三步:1) 发送 CC#101 (MSB) + CC#100 (LSB) 选择参数号;2) 通过 Data Entry(CC#6 MSB + CC#38 LSB)设置值;3) 可选地发送 RPN Null (CC#101=0x7F, CC#100=0x7F) 以禁用数据入口。
| MSB | LSB | 参数 | 说明 |
|---|---|---|---|
| 0x00 | 0x00 | Pitch Bend Sensitivity | MSB=半音数, LSB=音分数 |
| 0x00 | 0x01 | Channel Fine Tuning | 00 00=-100音分, 40 00=A440 |
| 0x00 | 0x02 | Channel Coarse Tuning | 00=-64半音, 40=A440 |
| 0x00 | 0x05 | Modulation Depth Range | GM2 颤音深度 |
| 0x7F | 0x7F | Null / Reset RPN | 禁用数据入口,等待新 RPN |
5. 通道模式消息
CC#120-127 保留为通道模式消息。与普通 CC 不同,通道模式消息改变通道的运作模式而非控制声音参数。All Sound Off (CC#120) 和 All Notes Off (CC#123) 在效果器切换场景中尤为重要——它们可以干净地停止所有当前发声。Local Control (CC#122) 用于断开键盘与音源引擎的直接连接,在 DAW 录音时避免双重触发。
6. MS-3 上的 CC 实战
MS-3 利用 General Purpose 控制器(CC#80-82)来控制 3 组 Loop 的开关状态。值 0-63 为关闭,64-127 为打开。此外,CC#102/103 用于预设切换,CC#90/91 用于 Tap Tempo。这意味着任何 MIDI 控制器(外部脚踏控制器、DAW、MIDI 键盘)都可以通过发送这些 CC 消息来控制 MS-3 的每一项功能。
7. 最佳实践
8. 总结
Control Change 消息是 MIDI 实时控制的基石。从基础的音量/表情控制,到 RPN 的精确参数调节,再到 MS-3 的 Loop 切换——理解 CC 消息体系能让你真正掌控自己的设备链。在 LdA 生态中,CC 消息是实现无缝效果器切换的核心机制。