如何通过Web MIDI API发送摇杆MIDI CC1调制轮与弯音轮消息?
通过Web MIDI API发送调制轮(CC1)与弯音轮消息
核心MIDI消息格式说明
- 调制轮(CC1):属于控制变更消息,格式为
[状态字节, CC编号, 数值]- 状态字节:通道1用
0xB0,通道n则是0xB0 + (n-1) - CC编号:固定为
0x01(十进制1) - 数值:范围
0x00到0x7F(十进制0-127),0是最小调制量,127是最大
- 状态字节:通道1用
- 弯音轮:属于弯音消息,格式为
[状态字节, 低7位数值, 高7位数值]- 状态字节:通道1用
0xE0,通道n则是0xE0 + (n-1) - 14位总数值范围
0到16383,中间值8192对应无弯音;小于8192是降调,大于是升调 - 需要把14位数值拆成两个7位字节:低7位是
value & 0x7F,高7位是(value >> 7) & 0x7F
- 状态字节:通道1用
结合现有代码的实现示例
navigator.requestMIDIAccess() .then(function(midiAccess) { const outputs = midiAccess.outputs.values(); let midiOutput; // 获取第一个可用的MIDI输出(可根据需求选择特定输出) for(const output of outputs) { console.log(output); midiOutput = output; break; } if (!midiOutput) { console.error("未找到可用的MIDI输出设备"); return; } // 1. 发送调制轮(CC1)消息:通道1,调制量设为最大(127) const MODULATION_WHEEL_CC = 0x01; midiOutput.send([0xB0, MODULATION_WHEEL_CC, 0x7F]); // 2. 发送弯音轮消息:通道1,升调半音(示例值) // 多数设备默认弯音范围±2半音,对应数值0(-2半音)到16383(+2半音) const PITCH_BEND_VALUE = 8192 + 4096; // 升1半音 const pitchBendLow = PITCH_BEND_VALUE & 0x7F; const pitchBendHigh = (PITCH_BEND_VALUE >> 7) & 0x7F; midiOutput.send([0xE0, pitchBendLow, pitchBendHigh]); // 原有的发送音符代码 const NOTE_ON = 0x90; midiOutput.send([NOTE_ON, 60, 0x7F]); // 发送中央C(60)的音符开消息 });
关键细节说明
- 若需指定其他MIDI通道,直接调整状态字节:比如通道2的调制轮消息用
0xB1,弯音轮用0xE1 - 弯音轮的数值与实际音高偏移量取决于接收设备设置,可根据需求自行调整数值
- 发送消息时可添加第二个参数指定延迟发送时间(毫秒,基于页面加载时间),例如
midiOutput.send([...], performance.now() + 1000)表示1秒后发送
内容的提问来源于stack exchange,提问作者mr_blond
相关产品推荐
相关产品推荐

