Mackie Control 协议是由 Mackie 公司在 MIDI 协议的基础上设计的一套设备控制协议。该协议利用 MIDI 系统保留事件、音符开启/关闭事件、CC 事件、弯音轮事件以及通道压力事件传递控制信息。
不同 DAW 的 Mackie Control 协议实现有细微差别,本文档采用 Logic 标准。
| 第 4 字节 uint8 值(下标从 0 开始) | Mackie Control 功能 | 其余字节功能 | 备注 |
|---|---|---|---|
| 0 | 设备查询 | - | |
| 1 | 宿主连接查询 | [5:11] 序列号 [12:15] 设备代码 |
|
| 2 | 宿主连接回应 | [5:11] 序列号 [12:15] 响应码 |
|
| 3 | 宿主连接确认 | [5:11] 序列号 | |
| 4 | 宿主连接错误 | [5:11] 序列号 | |
| 11 | LCD 背光灯 | [5] {0}: 关 {其它}: 开 [6] 背光关闭时间(分钟) |
仅背光打开时存在背光关闭时间 |
| 12 | 非触控音量推子 | [5] {0}: 触控开 {其它}: 触控关 | |
| 14 | 音量推子触摸灵敏度 | [5] 通道号 [6] 值 |
|
| 15 | 脱机 | - | |
| 16 | 时间码/BBT 显示 | [6:(size-2)] 值 | Mackie Char, 从右往左 |
| 17 | 模式 LED 数码显示 | [6:7] 值 | Mackie Char, 从右往左 |
| 18 | LCD | [5] {0:55}: 上面行 {56:111}:下面行 [6:(size-1)] 值 |
值为 ASCII 形式字符串 |
| 19 | 版本请求 | - | |
| 20 | 版本回应 | [6:(size-1)] 值 | 值为 ASCII 形式字符串 |
| 32 | 通道电平表模式 | [5] 通道号 [6] 模式 |
模式位掩码: {1}: 信号 LED 开关 {2}: 峰值保持显示开关 {4}: LCD 电平表开关 |
| 33 | 全局电平表模式 | [5] {0}: 水平 {其它}: 竖直 | |
| 97 | 全部推子设为最小值 | - | |
| 98 | 关闭全部 LED | - | |
| 99 | 重置 | - |
| 音符速度 | Mackie Control 功能 |
|---|---|
| 0 | 关闭 |
| 1 | 点动 |
| 127 | 开启 |
| 音符序号 | Mackie Control 功能 | 备注 |
|---|---|---|
| 0:7 | 通道录制 | 接受速度控制 通道号 = 音符序号 % 8 + 1 |
| 8:15 | 通道独奏 | 接受速度控制 通道号 = 音符序号 % 8 + 1 |
| 16:23 | 通道静音 | 接受速度控制 通道号 = 音符序号 % 8 + 1 |
| 24:31 | 通道选取 | 接受速度控制 通道号 = 音符序号 % 8 + 1 |
| 32:39 | 通道 V-选取 | 接受速度控制 通道号 = 音符序号 % 8 + 1 |
| 40 | 分配轨道 | |
| 41 | 分配发送 | |
| 42 | 分配声像 | |
| 43 | 分配插件 | |
| 44 | 分配 EQ | |
| 45 | 分配乐器 | |
| 46 | 前一推子组 | 接受速度控制 |
| 47 | 后一推子组 | 接受速度控制 |
| 48 | 前一推子通道 | 接受速度控制 |
| 49 | 后一推子通道 | 接受速度控制 |
| 50 | 翻页 | 接受速度控制 |
| 51 | 全局视图 | 接受速度控制 |
| 52 | 切换名称/值 | |
| 53 | 切换 SMPTE 时间码/拍 | |
| 54:61 | 拓展功能 | 功能号 = 音符序号 - 53 |
| 62 | MIDI 轨道视图 | |
| 63 | 输入视图 | |
| 64 | 音频轨道视图 | |
| 65 | 乐器视图 | |
| 66 | AUX 视图 | |
| 67 | 总线视图 | |
| 68 | 输出视图 | |
| 69 | 用户视图 | |
| 70 | Shift | 接受速度控制 |
| 71 | Option | 接受速度控制 |
| 72 | Ctrl | 接受速度控制 |
| 73 | Alt | 接受速度控制 |
| 74 | 自动化读取 | |
| 75 | 自动化写入 | |
| 76 | 自动化修整 | |
| 77 | 自动化风格 | |
| 78 | 自动化锁定 | |
| 79 | 组合 | |
| 80 | 保存 | |
| 81 | 撤销 | |
| 82 | 取消 | |
| 83 | 确认 | |
| 84 | 标记 | |
| 85 | 轻推 | |
| 86 | 循环 | |
| 87 | 丢弃 | |
| 88 | 替换 | |
| 89 | 点击 | |
| 90 | 独奏 | |
| 91 | 倒回 | 接受速度控制 |
| 92 | 快进 | 接受速度控制 |
| 93 | 停止 | 接受速度控制 |
| 94 | 播放 | 接受速度控制 |
| 95 | 录制 | 接受速度控制 |
| 96 | 上 | 接受速度控制 |
| 97 | 下 | 接受速度控制 |
| 98 | 左 | 接受速度控制 |
| 99 | 右 | 接受速度控制 |
| 100 | 缩放 | 接受速度控制 |
| 101 | 擦洗 | 接受速度控制 |
| 102 | 用户控制 A | |
| 103 | 用户控制 B | |
| 104:111 | 推子通道 | 接受速度控制 通道号 = 音符序号 - 103 |
| 112 | 推子主通道 | |
| 113 | SMPTE LED | |
| 114 | 拍号 LED | |
| 115 | 原始独奏灯 | |
| 116 | 中继点击 |
| CC 通道 | Mackie Control 功能 | CC 值 | 备注 |
|---|---|---|---|
| 16:23 | V-Pot | {0:62}: 顺时针 {其它}: 逆时针 | 通道号 = CC 通道号 - 15 tick值 = CC 值 % 64 |
| 46 | 外部控制器 | 控制器值 | |
| 48:55 | V-Pot LED 环 | {0:63}: 中心 LED 关 {其它}: 中心 LED 开 | 通道号 = CC 通道号 - 47 CC 值 % 64 在 0 到 15 之间: 单点模式 CC 值 % 64 在 16 到 31 之间: Boost/Cut 模式 CC 值 % 64 在 32 到 47 之间: Warp 模式 CC 值 % 64 在 48 到 63 之间: 传播模式 值 = CC 值 % 16 |
| 60 | 缓动轮 | {0:62}: 顺时针 {其它}: 逆时针 | tick值 = CC 值 % 64 |
| 64:73 | 时间码/BBT 显示 | Mackie 字符 | 数位 = 74 - CC 通道号 |
| 74:76 | 模式 LED 数码显示 | Mackie 字符 | CC 通道号: {74}: 右侧数码管 {其它}: 左侧数码管 |
Mackie Control 使用 MIDI 弯音轮事件控制推子音量。
当 MIDI 通道号为 1:8 时,表示推子通道 1-8;当 MIDI 通道号为 9 时,表示主通道推子。
弯音事件值即为推子值。
Mackie Control 使用 MIDI 通道压力事件控制电平表值。
电平表通道号 = 通道压力值 / 16 + 1.
当通道压力值 % 16 在 0 到 12 之间时,电平值 = (通道压力值 % 16) / 12 * 100%.
当通道压力值 % 16 等于 14 时,设置电平过载指示。
当通道压力值 % 16 等于 15 时,清除电平过载指示。
你可以参考如下代码转换 ASCII 字符为 Mackie 字符:
uint8_t charToMackie(char c) {
if (c >= 'a' && c <= 'z') { return static_cast<uint8_t>((c - 'a') + 1); }
else if (c >= 'A' && c <= 'Z') { return static_cast<uint8_t>((c - 'A') + 1); }
else if (c >= '0' && c <= '9') { return static_cast<uint8_t>((c - '0') + 0x30); }
return 0x20;
}mackie-control-monitor
V2Mackie
tracktion_engine
mc_protocol_mappings
Mackie Control MIDI Map