2014-02-13 23 views
3

如何生成包含wav/riff聲音文件頻率頻譜的文件?我想用linux命令行。使用linux命令行從WAV/RIFF獲取頻譜

我知道酷襪函數生成PNG頻譜

sox sound.wav -n spectrogram 

但我不需要頻率的頻譜的可視化表示。我只想獲取數據文件中的頻譜,以便我能夠處理它們。我相信必須有一個使用sox的選項。 Sox需要在繪製數據之前生成這些數據。如何得到這個?

不知道,也許第二個解決方案是將wav文件導出到dat文件中。 dat文件中的每個樣本都是在某個時刻測量膜的位置。所以這不是頻譜。

sox sound.wav file.dat 

如何將這些膜位置轉換爲我需要的譜圖?

謝謝。

+0

SoX目前還不支持。我寫了一個補丁,添加了一個「-O FILE」選項,它將計算的數據保存到「FILE」中。查看郵件列表:https://sourceforge.net/p/sox/mailman/message/34779977/ – Thor

回答

3

你在找什麼叫做傅立葉變換或者快速傅立葉變換(FFT)。 FFT是一種數學算法,它將包含在.wav文件中的時域樣本(即膜位置,如您所說,在時間點上)轉換爲頻率分量。如果你使用Google FFT,你會發現更多的信息,包括你可以在Linux中編譯和重用的源代碼。請參閱How do I plot the spectrum of a wav file using FFT?一個良好的開端。

+0

謝謝。從SOX直接使用它怎麼樣? Sox必須在繪製該頻譜圖之前進行FFT以生成頻譜數​​據頻譜。它工作速度非常快。 – zsedc

+0

我同意SOX必須在內部進行FFT以生成頻譜。但是,我不確定是否有辦法讓SOX輸出原始FFT數據。但是,您可以使用SOX從wav文件中提取數字樣本,您需要將其輸入到FFT程序中。請參閱Randall Cook的答案http://stackoverflow.com/questions/15031544/extract-fast-fourier-transform-data-from-file瞭解更多關於此的想法。 – mti2935

1

您可以嘗試sox中的stat選項。

play track.wav stat -freq 
+0

這個命令的輸出是什麼意思? – theonlygusti