我使用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)中观察到了这个问题。 有没有人知道任何变通办法?
答案 0 :(得分:23)
这看起来更像是你的脚本处理器对象正在收集垃圾。尝试将其保存在全局变量中,看看是否能解决问题。