修复了Chrome Canary中通过http://code.google.com/p/chromium/issues/detail?id=112367获取麦克风输入的错误。这部分似乎正在工作。我可以将mic输入分配给音频元素,并通过扬声器听到结果。
但是,我想连接一个分析器节点以执行FFT。如果将音频源设置为本地文件,则分析器节点可以正常工作。问题在于当连接到麦克风音频流时,分析器节点仅返回基值,就好像它根本没有音频流一样。(如果您感兴趣,它一遍又一遍地是-100。)
有人知道怎么回事吗?还没有实现吗?这是Chrome的漏洞吗?我在Windows 7上运行26.0.1377.0版本,并启用了getUserMedia标志,并通过Python的simpleHTTPServer通过localhost提供服务以请求权限。
代码:
var aCtx = new webkitAudioContext();
var analyser = aCtx.createAnalyser();
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
// audio.src = "stupid.wav"
audio.src = window.URL.createObjectURL(stream);
}, onFailure);
}
$('#audio').on("loadeddata",function(){
source = aCtx.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(aCtx.destination);
process();
});
如果我将audio.src设置为注释版本,它就可以正常工作,但是使用麦克风时不行。处理过程包括:
FFTData = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(FFTData);
console.log(FFTData[0]);
我还尝试过使用createMediaStreamSource并绕过音频元素 - 示例4 - https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/webrtc-integration.html。但也没有成功。:(
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
var microphone = context.createMediaStreamSource(stream);
microphone.connect(analyser);
analyser.connect(aCtx.destination);
process();
}
我想可以将mediasteam写入缓冲区,然后使用dsp.js或其他工具进行fft处理,但在继续之前我想先确认一下。