Javascript Web音频API分析器节点未按预期工作

Javascript Web音频API分析器节点未按预期工作,javascript,html,audio,web,web-audio-api,Javascript,Html,Audio,Web,Web Audio Api,我只是想在这段代码中读取1000Hz正弦波的FFT值。但是,控制台输出显示'-128'a 1000次。为什么analyzer节点在这种情况下不工作 window.onload = init; var sourceNode; function init(){ var context = new AudioContext(); var osc = context.createOscillator(); var analyser = context.createAnalyser(); var ga

我只是想在这段代码中读取1000Hz正弦波的FFT值。但是,控制台输出显示'-128'a 1000次。为什么analyzer节点在这种情况下不工作

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]);
}

}
window.onload=init;
var源节点;
函数init(){
var context=新的AudioContext();
var osc=context.create振荡器();
var analyzer=context.createanalyzer();
var gain=context.createGain();
sourceNode=context.createBufferSource();
var amplitudeArray=新的Float32阵列(分析仪频率B计数);
osc频率值=1000;
osc.start();
增益增益值=0.07;
osc.连接(分析仪);
分析仪。连接(增益);
连接(上下文、目的地);
分析仪.getFloatFrequencyData(振幅阵列);

对于(var i=0;i在这种特殊情况下,因为您正在立即请求数据;虽然您调用了osc.start(),但音频系统尚未处理任何数据,因此当您调用getFloatFrequencyData()时,它充满了空数据。(FloatFrequencyData以分贝为单位,因此-128是噪声下限-也称为“零”)


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

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


在调用Analyzer.getFloatFrequencyData之前,请尝试等待一秒钟。您将看到输出不是常数-128。

谢谢。使用
setTimeout
延迟将FFT值插入
amplitudeArray