网络音频API分析节点工作不带麦克风输入(Web Audio API Analyser Node N

2019-08-06 03:08发布

防止每越来越麦克风输入错误http://code.google.com/p/chromium/issues/detail?id=112367为Chrome Canary版现在是固定的。 这部分似乎是工作。 我可以将麦克风输入到音频元素和通过扬声器听到的结果。

但我想一个分析节点,以便做FFT连接。 如果我设置音频源到本地文件分析器节点工作正常。 的问题是,当连接到麦克风的音频流中,分析器节点仅返回基准值,如果它不具有音频流的。 (这遍地是-100再次,如果你很好奇。)

任何人都知道这是怎么回事? 难道还没有实现? 这是Chrome的bug? 我运行在Windows 7上26.0.1377.0并启用了getUserMedia标志,并通过Python的simpleHTTPServer通过本地主机正在服务,因此它可以请求的权限。

码:

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,但我想先检查之前,我这条路走。

Answer 1:

这是一个变量范围的问题。 对于第二个例子,我被局部地限定所述麦克风,然后试图与分析器在另一个函数来访问它的流。 我只是做了安心所有的网络音频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);
}

如果你想听到现场的声音,你可以连接分析仪的目的地(扬声器)如上注释掉。 当心一些可爱的反馈,但!



文章来源: Web Audio API Analyser Node Not Working With Microphone Input