Chrome发送MIDI消息至Reaper的Faust插件失效问题咨询
问题排查与修复方案
你要发送的MIDI消息本身是正确的,[0xB1, 11, 10]确实匹配你需要的1号通道CC11、值为10的目标消息,符合需求。但代码和配置层面存在多个问题导致无法生效,具体如下:
- 端口ID硬编码错误
Web MIDI API的端口ID是浏览器运行时随机生成的标识,不同设备、不同浏览器启动实例的端口ID完全不同,你写死的那串ID几乎不可能匹配你本地的MidiThrough端口0。正确的做法是先遍历所有可用输出端口,匹配名称找到目标端口再调用。
你可以先运行以下代码查看本地所有MIDI输出端口的名称和ID:
navigator.requestMIDIAccess() .then(access => { for (const output of access.outputs.values()) { console.log(`端口ID:${output.id},端口名称:${output.name}`) } })
找到你MidiThrough端口0对应的ID替换你的newPort值,或者直接在代码里按名称匹配避免每次手动改ID:
const targetPortName = "MidiThrough 端口0" // 替换成你打印出来的实际端口名称 const output = Array.from(mAccess.outputs.values()).find(p => p.name.includes(targetPortName))
- 缺少错误捕获逻辑
你目前的代码只写了请求MIDI权限成功的回调,没有处理权限被拒绝、浏览器不支持Web MIDI、端口不存在的异常情况,根本不知道请求环节哪里出了问题。需要补充catch逻辑捕获错误:
navigator.requestMIDIAccess() .then(function(access) { midiSend(access, 20, 64, 64); }) .catch(err => console.error("MIDI访问失败:", err))
另外注意Chrome仅在HTTPS环境或者localhost本地调试环境下允许调用Web MIDI API,非安全环境下API会被直接禁用。
- Reaper侧配置缺失
就算浏览器成功发出了MIDI消息,也需要Reaper对应配置才会转发给插件:
- 打开Reaper的MIDI设置,确认MidiThrough端口0的输入已被启用
- 选中Faust插件所在的轨道,将轨道的MIDI输入源设置为MidiThrough端口0
- 开启轨道的录音准备(Arm)或者MIDI监听开关,否则Reaper不会把收到的MIDI消息转发给轨道上的插件
- 可选调试步骤
如果还是无法生效,可以先用第三方MIDI监控工具(Windows用MIDI-OX,Mac用MIDI Monitor)接收MidiThrough端口的消息,确认浏览器是否成功发出了消息,先排除前端问题再排查Reaper和插件的问题。
另外你代码存在冗余逻辑:定义的midiSend函数接收了x、y、z三个参数,但实际没有用到,不影响当前固定消息发送,后续要动态传参可以修改对应逻辑。
内容的提问来源于stack exchange,提问作者Dominique Blanchemain
相关产品推荐
相关产品推荐

