我正在使用ScriptProcessorNode的onaudioprocess回调来处理麦克风输入。
通过将MediaStreamSourceNode连接到ScriptProcessorNode,我可以在onaudioprocess回调函数中获取原始音频数据。
但是,在大约30秒(从10到35秒不等)后,浏览器将停止调用onaudioprocess。
在以下代码中,console.log输出('>>')始终在大约30秒后停止。
var ctx = new AudioContext();
var BUFFER_LENGTH = 4096;
console.log('Buffer length is + ' + BUFFER_LENGTH);
navigator.webkitGetUserMedia({audio: true}, function (stream) {
var mediaStreamSource = ctx.createMediaStreamSource(stream);
var scriptProcessor = ctx.createScriptProcessor(BUFFER_LENGTH, 1, 1);
scriptProcessor.onaudioprocess = function (e) {
console.log('>>');
};
scriptProcessor.connect(ctx.destination);
}, function(e) {
console.error('Unable to get audio input source.');
});
我尝试了所有可能的BUFFER_LENGTH(256、512、1024、2048、4096、8192、16384),但情况没有改变(30秒后停止记录)。
我在最新的Chrome版本(版本35.0.1916.153)和Canary(版本37.0.2060.3 canary)中发现了此问题。
有人知道任何解决方法吗?
最佳答案
这看起来更像您的scriptprocessor对象正在收集垃圾。尝试将其保存在全局变量中,看看是否可以解决问题。
关于google-chrome - Chrome : onaudioprocess stops getting called after a while,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24338144/