2015-10-13 53 views
0

我只是想閱讀該代碼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]); 
} 

} 

回答

0

你基本上是要求分析儀的FFT數據右側的振盪器啓動時。在這一點上,內部緩衝區已滿零,所以輸出爲-128分貝。也就是說,一切都是零。

嘗試調用analyser.getFloatFrequencyData之前等待第二。你會看到輸出是不是一個常數-128。

+0

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

0

在這種特殊情況下,因爲您立即請求數據;儘管你已經調用了osc.start(),音頻系統還沒有處理任何數據,所以當你調用getFloatFrequencyData()時,它會充滿空的數據。 (FloatFrequencyData以分貝爲單位,所以-128是本底噪聲 - 又名「零」)。

如果你有足夠的開始之間()的getFloatFrequencyData()調用一段音頻處理的時間間隔和,我想你會看到一些數據。