2013-05-13 130 views
0

我試圖實現一個應用程序,使用低音音頻來繪製音頻的頻譜(http://www.un4seen.com/)。據我所知,我將不得不:繪製音頻譜

  1. 從流 浮子[]緩衝液=新的浮動[256]獲得的FFT數據; (處理,緩衝區,(int)(BASS_DATA_FFT_COMPLEX | BASS_DATA_FFT_NOWINDOW));

  2. 要對每一FFT,計算它的大小

  3. 應用窗函數的FFT(漢寧或海明都行)

  4. 然後,劃出一道美麗的頻譜分析

但問題是:

  • 看起來好像s BASS_DATA_FFT_COMPLEX BassData無法訪問。我可以看到它應該在文檔http://www.bass.radio42.com/help/html/a13cfef0-1056-bb94-81c4-a4fdf21bd463.htm中可用,但我不能使用它,因爲我得到一個錯誤,BassData不包括這樣的枚舉
  • 此外,我想知道我在做什麼是對的。要繪製一張譜圖,我應該簡單地繪製fft的幅度,或者將fft的幅度與fft的頻率進行對比?在這種情況下,我將如何獲得與fft相對應的頻率?我不介意從任何語言(C/C++,C#,VB,Java等)中截取任何代碼。

注意:我不確定這是否有幫助,但這是我正在使用的: 使用Microsoft圖表控件繪圖。 C#與 http://www.bass.radio42.com/ 任何幫助的BASS.NET API和建議,不勝感激

回答

2

你混淆了的步驟的順序 - 你需要前窗函數應用於時域數據計算FFT。步驟一般是:

1. acquire time domain data 
2. apply window function 
3. calculate FFT 
4. calculate log magnitude of FFT (log(re*re+im*im)) 
5. plot log magnitude (with appropriate scaling) against frequency 

注意,使用數幅度爲Y軸爲您提供了一個有效的規模dB,這是查看聲音振幅比線性量值量表更自然和有效的方法。

通常爲了可視化音頻等,您可以在連續的時域數據塊上應用上面的步驟1-5,通常重疊爲50%。