Firefox接收SysEx消息仅能获取前1024字节?该限制可配置吗?
Firefox对WebMIDI SysEx消息的接收字节数限制及配置方法
- Firefox确实存在WebMIDI接收SysEx消息的默认长度限制,默认值为1024字节,这就是你只能收到前1024字节的原因。Chrome会自动处理并拼接超长的SysEx数据包,但Firefox默认会直接截断超出部分。
- 这个限制是可以手动配置的:
- 在Firefox地址栏输入
about:config并回车,进入高级配置页面 - 在搜索框中查找
security.webmidi.sysex.max-length配置项 - 将默认的1024修改为满足你需求的数值(比如5000,覆盖4688字节的程序转储)
- 重启Firefox后,配置即可生效
- 在Firefox地址栏输入
- 额外建议:即使修改了浏览器配置,也建议在代码中添加分片SysEx消息的拼接逻辑。因为部分合成器本身会把大的程序转储拆分成多个数据包发送,手动拼接能提升跨浏览器和跨设备的兼容性,示例代码如下:
import { WebMidi, MessageEvent } from 'webmidi'; // 用于缓存分片的SysEx数据 let sysexBuffer: number[] = []; WebMidi.inputs[0].addListener('sysex', handleMessage); const handleMessage = (result: MessageEvent) => { const data = result.message.data; // 检测到SysEx起始标记,初始化缓冲区 if (data[0] === 0xF0) { sysexBuffer = [...data]; } else { // 拼接后续的分片数据 sysexBuffer.push(...data); } // 检测到SysEx结束标记,处理完整消息 if (data.at(-1) === 0xF7) { console.log('完整SysEx消息长度:', sysexBuffer.length); // 这里添加你的完整消息处理逻辑 processCompleteSysex(sysexBuffer); // 清空缓冲区,准备接收下一条消息 sysexBuffer = []; } }; const processCompleteSysex = (fullData: number[]) => { // 实现你的业务逻辑,比如解析程序转储 };
内容的提问来源于stack exchange,提问作者adhdj
相关产品推荐
相关产品推荐

