用于Python中频谱图的FFT

时间:2009-08-20 00:14:04

标签: python image graphics audio fft

我如何使用Python从WAV PCM文件读取频率峰值,然后能够生成它的图像,用于光谱分析?

我正在尝试制作一个程序,允许您读取任何音频文件,将其转换为WAV PCM,然后找到峰值和频率截止值。

4 个答案:

答案 0 :(得分:23)

Python's wave library可让您导入音频。之后,您可以use numpy to take an FFT音频。

然后,matplotlib制作了非常漂亮的图表和图表 - 绝对可与MATLAB相媲美。

它已经过时了,但是this article可能会让你开始几乎完全是你正在描述的问题(当然是Python中的文章)。

答案 1 :(得分:15)

使用audiolab

轻松加载WAV文件
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 :(得分:3)

from pylab import *
specgram(signal)

是最简单的。在这方面也非常方便:

subplot

但要注意:Matplotlib非常慢但它可以创造出漂亮的图像。您不应该将它用于要求苛刻的动画,更不用说处理3D

答案 3 :(得分:1)

如果需要从PCM格式转换为整数,则需要使用struct.unpack。