2009-08-20 202 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。