网络音频 API 分析器节点未按预期工作
Web Audio API Analyzer Node not working as expected
我只是想在此代码中读取 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]);
}
}
在这种特殊情况下,因为您正在立即请求数据;尽管您调用了 osc.start(),但音频系统尚未处理任何数据,因此当您调用 getFloatFrequencyData() 时,它充满了空数据。 (FloatFrequencyData 以分贝为单位,因此 -128 是本底噪声 - 又名 "zero")。
如果您在 start() 和 getFloatFrequencyData() 调用之间有足够的时间间隔来处理一些音频,我希望您会看到一些数据。
您基本上是在振荡器启动时立即向分析仪询问 FFT 数据。此时,内部缓冲区全为零,因此输出为 -128 dB。也就是说,一切都为零。
请稍等片刻,然后再拨打 analyser.getFloatFrequencyData。您会看到输出不是常量 -128。
我只是想在此代码中读取 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]);
}
}
在这种特殊情况下,因为您正在立即请求数据;尽管您调用了 osc.start(),但音频系统尚未处理任何数据,因此当您调用 getFloatFrequencyData() 时,它充满了空数据。 (FloatFrequencyData 以分贝为单位,因此 -128 是本底噪声 - 又名 "zero")。
如果您在 start() 和 getFloatFrequencyData() 调用之间有足够的时间间隔来处理一些音频,我希望您会看到一些数据。
您基本上是在振荡器启动时立即向分析仪询问 FFT 数据。此时,内部缓冲区全为零,因此输出为 -128 dB。也就是说,一切都为零。
请稍等片刻,然后再拨打 analyser.getFloatFrequencyData。您会看到输出不是常量 -128。