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

midicube(MIDI.js新版本)audioDetect.js报错排查求助

问题分析与解决

错误原因

你遇到的Cannot read properties of null (reading 'appendChild')和removeChild错误,核心原因是脚本执行时机过早:midicube的audioDetect模块尝试向document.body添加音频检测元素,但你的脚本可能在<body>标签加载完成前就运行了,此时document.body为null,导致DOM操作失败。

另外,midicube最后一次提交在3年前,确实存在浏览器API兼容性过时的问题——现代浏览器对音频上下文、DOM操作的时机要求更严格,旧版本库的逻辑可能不再适配。

修复步骤

1. 调整脚本执行时机

把脚本放到<body>标签末尾,或者用DOMContentLoaded事件包裹,确保DOM加载完成后再初始化:

<body>
  <!-- 页面内容 -->
  <script src="releases/midicube.js"></script>
  <script>
    document.addEventListener('DOMContentLoaded', () => {
      MIDI.loadPlugin({
        soundfontUrl: "./examples/soundfont/",
        onerror: console.warn,
        onsuccess: () => {
          MIDI.noteOn(0, 60, 127); // 注意:音量参数建议设127(设0会静音)
        }
      });
    });
  </script>
</body>

2. 备选方案:更换维护活跃的MIDI库

如果调整时机后仍有兼容性问题,建议替换为适配现代浏览器的活跃库,比如:

  • 直接使用Web MIDI API(需用户授权MIDI设备)
  • SoundfontPlayer(基于Web Audio API,轻量且维护更新及时)

总结

你的操作存在脚本执行时机的小问题,但midicube的过时也是导致错误的重要因素。先调整脚本位置尝试修复,若仍有问题,建议换用更现代的方案。

内容的提问来源于stack exchange,提问作者root

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:05:54