2009-08-20 433 views
24

我怎麼會去使用Python讀取從WAV PCM文件的頻率峯值,然後能夠產生它的一個形象,對頻譜圖分析?FFT的頻譜圖在Python

我試圖做一個程序,它可以讀取任何音頻文件,將其轉換爲WAV PCM,然後找到高峯和頻率截止。

回答

23

Python's wave library會讓你輸入的音頻。之後,您可以use numpy to take an FFT的音頻。

然後,matplotlib使得非常漂亮的圖表和圖形 - 絕對媲美MATLAB。

這是舊如糞土,但this article很可能讓你開始幾乎正是你描述的(當然,在Python的文章)的問題。

+8

matplotlib也可以用命令'specgram'直接計算譜圖。 – tom10 2009-08-20 03:00:20

+0

看起來像它將正是我所需要的。謝謝 :) – 2009-08-23 22:29:56

13

加載WAV文件可以方便地使用audiolab

from audiolab import wavread 
signal, fs, enc = wavread('test.wav') 

或讀取任何一般的音頻格式,並轉換爲WAV:

from audiolab import Sndfile 
sound_file = Sndfile('test.w64', 'r') 
signal = wave_file.read_frames(wave_file.nframes) 

的頻譜內置PyLab:

from pylab import * 
specgram(signal) 

具體而言,它是matplotlib的一部分。 Here's a better example.

2
from pylab import * 
specgram(signal) 

是最簡單的。也非常方便在這種情況下:

subplot 

但要注意:Matplotlib是很慢,但它創造美麗的圖像。當你在處理3D

1

如果您需要從PCM格式的整數轉換,則不應使用它爲要求苛刻的動畫,甚至更少,你要使用struct.unpack。