网络音频API分析节点工作不正常

问题描述:

我只是想阅读该代码1000Hz的正弦波的FFT值。但是控制台输出显示'-128'一千次。分析仪节点为什么不工作?网络音频API分析节点工作不正常

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

} 

你基本上是要求分析仪的FFT数据右侧的振荡器启动时。在这一点上,内部缓冲区已满零,所以输出为-128分贝。也就是说,一切都是零。

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

+0

谢谢。使用'setTimeout'拖延插入FFT值到'amplitudeArray'。 –

在这种特殊情况下,因为您立即请求数据;尽管你已经调用了osc.start(),音频系统还没有处理任何数据,所以当你调用getFloatFrequencyData()时,它会充满空的数据。 (FloatFrequencyData以分贝为单位,所以-128是本底噪声 - 又名“零”)。

如果你有足够的开始之间()的getFloatFrequencyData()调用一段音频处理的时间间隔和,我想你会看到一些数据。