Web Audio API Analyzer节点未按预期工作

时间:2015-10-13 19:06:25

标签: javascript html5 audio web web-audio

我只是想在这段代码中读取1000Hz正弦波的FFT值。但是,控制台输出显示'-128'1000次。为什么分析器节点不能在此工作?

window.onload = init;
var sourceNode;

function init(){

var context = new AudioContext();
var osc = context.createOscillator();
var analyser = context.createAnalyser();
var gain = context.createGain();
sourceNode = context.createBufferSource();
var amplitudeArray = new Float32Array(analyser.frequencyBinCount);

osc.frequency.value=1000;
osc.start();


gain.gain.value=0.07;

osc.connect(analyser);
analyser.connect(gain);
gain.connect(context.destination);

analyser.getFloatFrequencyData(amplitudeArray);

for(var i=0;i<amplitudeArray.length;i++){
    console.log(amplitudeArray[i]);
}

}

2 个答案:

答案 0 :(得分:0)

在这种特殊情况下,因为您立即要求提供数据;虽然您已经调用了osc.start(),但音频系统尚未处理任何数据,因此当您调用getFloatFrequencyData()时,它会充满空数据。 (FloatFrequencyData以分贝为单位,因此-128是本底噪声 - 又名&#34;零&#34;)。

如果你在start()和getFloatFrequencyData()调用之间有足够的时间间隔来处理某些音频,我希望你能看到一些数据。

答案 1 :(得分:0)

振荡器启动时,您基本上是在向分析仪询问FFT数据。此时,内部缓冲区充满零,因此输出为-128 dB。也就是说,一切都是零。

在调用analyser.getFloatFrequencyData之前尝试等待一秒钟。你会看到输出不是常数-128。