You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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是最大
  • 弯音轮:属于弯音消息,格式为 [状态字节, 低7位数值, 高7位数值]
    • 状态字节:通道1用0xE0,通道n则是0xE0 + (n-1)
    • 14位总数值范围0到16383,中间值8192对应无弯音;小于8192是降调,大于是升调
    • 需要把14位数值拆成两个7位字节:低7位是value & 0x7F,高7位是(value >> 7) & 0x7F

结合现有代码的实现示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:43:29