MIDI 消息入门
MIDI(Musical Instrument Digital Interface)自 1983 年发布以来,已成为电子乐器通信的全球标准。本文基于 MMA(MIDI Manufacturers Association)官方 MIDI 1.0 规范,系统介绍 MIDI 消息的完整体系。
1. MIDI 消息分类
MIDI 1.0 规范将消息分为两大类:通道消息(Channel Messages)和系统消息(System Messages)。通道消息通过 16 个逻辑通道传输,仅影响分配到该通道的设备;系统消息则发送给 MIDI 系统中的所有设备。
2. 状态字节与数据字节
MIDI 消息由状态字节(Status Byte)开始,后跟 0-2 个数据字节(Data Byte)。状态字节的最高位 (D7) 始终为 1,数据字节的最高位始终为 0。这种设计使接收设备可以轻松区分消息的开始位置。
Status Byte: 1nnn nnnn (MSB=1, n=message type/channel) Data Byte: 0ddd dddd (MSB=0, d=data)
3. 通道语音消息详解
3.1 Note On / Note Off
最常用的 MIDI 消息。Note On(状态字节 0x9n)包含音符编号 (0-127) 和力度 (0-127)。Note Off(0x8n)同样包含音符编号和释键速度。Note On 中 Velocity=0 等同于 Note Off(Running Status 优化)。
Note On, Ch.1, Middle C, Velocity 100: 0x90 0x3C 0x64 Note Off, Ch.1, Middle C: 0x80 0x3C 0x40 (or 0x90 0x3C 0x00)
3.2 Control Change
Control Change(0xBn)是 MIDI 中最灵活的消息类型,携带 CC 编号(0-127)和值(0-127)。CC#0-31 为 14-bit MSB 控制器,CC#32-63 为对应的 LSB。CC#64-69 为开关型踏板。CC#120-127 保留给通道模式消息。详见本站 Control Change 专文。
3.3 Program Change
Program Change(0xCn)仅携带一个数据字节:音色/预设编号 (0-127)。配合 Bank Select(CC#0 MSB + CC#32 LSB),可访问最多 128×128=16,384 个音色。在 LdA MS-3 中,PC 1-100 直接对应预设 1-100。
3.4 Pitch Bend
Pitch Bend(0xEn)是唯一的 14-bit 通道语音消息,通过两个数据字节(LSB + MSB)组合实现高精度弯音控制。中心位置为 0x2000 (8192),范围 0-16383。灵敏度由接收端通过 RPN 0 设定。
4. 系统消息
4.1 System Exclusive (SysEx)
SysEx(0xF0...0xF7)是 MIDI 协议中最强大的扩展机制。制造商可定义任意长度的自定义消息,用于音色数据转储、固件升级、设备配置等。SysEx 消息以制造商标识(1 或 3 字节)开头,结尾为 0xF7。LdA 使用临时 ID 0x7D。
4.2 System Real-Time
系统实时消息为单字节消息(无数据字节),可随时插入——即使在 SysEx 消息中间。Timing Clock (0xF8) 每四分音符发送 24 次,用于设备同步。Active Sensing (0xFE) 每 300ms 发送一次以检测连接存活。
| 消息 | 状态字节 | 说明 |
|---|---|---|
| Timing Clock | 0xF8 | 每四分音符 24 次 |
| Start | 0xFA | 开始播放 |
| Continue | 0xFB | 从停止处继续 |
| Stop | 0xFC | 停止播放 |
| Active Sensing | 0xFE | 每 300ms 连接检测 |
| Reset | 0xFF | 重置所有设备 |
5. Running Status(运行状态)
Running Status 是 MIDI 1.0 的带宽优化技术:如果连续发送相同类型的状态字节,可以省略后续消息的状态字节,仅发送数据字节。这在高密度场景下(如连续 Note On 消息)可节省约 33% 的带宽。
// Without Running Status: 0x90 0x3C 0x64 0x90 0x3E 0x64 0x90 0x40 0x64 // With Running Status: 0x90 0x3C 0x64 0x3E 0x64 0x40 0x64
注意:Running Status 仅适用于通道消息(0x80-0xEF)。系统消息和 SysEx 会中断 Running Status。
6. 总结
理解 MIDI 消息体系是掌握 MIDI 设备通信的基础。从简单的 Note On/Off 到复杂的 SysEx,每种消息类型都有其设计意图和最佳用途。LdA MS-3 充分利用了 Program Change(预设切换)、Control Change(Loop 控制)和 SysEx(数据管理)来提供完整的 MIDI 控制体验。