New*_*wmu 11 javascript google-chrome webrtc web-audio-api
针对Chrome Canary的http://code.google.com/p/chromium/issues/detail?id=112367阻止获取麦克风输入的错误现已修复.这部分似乎确实有效.我可以将麦克风输入分配给音频元素,并通过扬声器听到结果.
但我想连接分析仪节点以进行FFT.如果我将音频源设置为本地文件,分析器节点可以正常工作.问题是当连接到mic音频流时,分析器节点只返回基值,就好像它根本没有音频流一样.(如果你好奇的话,一遍又一遍-100.)
谁知道怎么了?它还没有实现吗?这是一个铬虫吗?我在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();
});
Run Code Online (Sandbox Code Playgroud)
同样,如果我将audio.src设置为注释版本,它可以工作,但是使用麦克风则不行.流程包含:
FFTData = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(FFTData);
console.log(FFTData[0]);
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用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();
}
Run Code Online (Sandbox Code Playgroud)
我想有可能将mediasteam写入缓冲区,然后使用dsp.js或其他东西来做fft,但我想在我走这条路之前先检查一下.
这是一个可变范围问题.对于第二个示例,我在本地定义麦克风,然后尝试使用分析器在另一个函数中访问其流.我只是让所有的Web Audio API节点全局化,让我们高枕无忧.此外,分析器节点还需要几秒钟才能开始报告非-100值.感兴趣的人的工作代码:
// Globals
var aCtx;
var analyser;
var microphone;
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
aCtx = new webkitAudioContext();
analyser = aCtx.createAnalyser();
microphone = aCtx.createMediaStreamSource(stream);
microphone.connect(analyser);
// analyser.connect(aCtx.destination);
process();
});
};
function process(){
setInterval(function(){
FFTData = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(FFTData);
console.log(FFTData[0]);
},10);
}
Run Code Online (Sandbox Code Playgroud)
如果您想听实时音频,可以将分析仪连接到目的地(扬声器),如上所述.请注意一些可爱的反馈!
归档时间: |
|
查看次数: |
4739 次 |
最近记录: |