扬声器输入的示波器在几秒钟后停止渲染

oscilloscope of speaker input stops rendering after a few seconds

本文关键字:几秒 输入 示波器 扬声器      更新时间:2023-09-26

以下脚本从用户麦克风读取音频,并在 html 画布上呈现示波器。

源代码取自 Mozilla 开发者网络的示例:使用 Web 音频 API 的可视化

这是小提琴:http://jsfiddle.net/b7j8pktp/

mozGetUserMedia

(注意:代码没有针对不同浏览器的分叉机制:仅适用于 Firefox)

它可以正常工作几秒钟,然后立即停止渲染。

而这工作完全稳定:http://mdn.github.io/voice-change-o-matic/


该问题可以简化为以下代码。麦克风激活图标(在 Firefox 中的地址栏旁边)在大约 5 秒后消失:

navigator.mozGetUserMedia({audio: true},                           
    function() {}, function() {} );

(http://jsfiddle.net/b7j8pktp/2/)

这是 Firefox 中的一个已知错误。只需从getUserMedia调用中获取流并将其连接到窗口,如下所示:

navigator.mozGetUserMedia({audio: true}, function(stream) { window.stream = stream; // rest of the code }, function err() { // handle error });

希望我们能尽快修复它。问题是,当我们执行AudioContext.createMediaStreamSource调用时,我们未能添加对流的引用,因此当getUserMedia回调返回时,流不再被任何内容引用,并且在运行时(即几秒钟后)由循环收集器收集

您可以在 https://bugzilla.mozilla.org/show_bug.cgi?id=934512 中跟随。