Python中用于频谱图的FFT
我想知道怎么用Python来读取WAV PCM文件中的频率峰值,然后生成一张图像,用于频谱分析。
我正在尝试制作一个程序,可以读取任何音频文件,把它转换成WAV PCM格式,然后找到频率的峰值和截止点。
4 个回答
5
from pylab import *
specgram(signal)
这是最简单的做法。在这个情况下也非常方便:
subplot
不过要注意:Matplotlib的速度很慢,但它能生成很漂亮的图像。如果你需要做复杂的动画,尤其是3D动画,最好不要用它。
16
用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的一部分。这里有一个更好的例子。
25
Python的wave库可以让你导入音频文件。导入之后,你可以使用numpy来对音频进行快速傅里叶变换(FFT)。
接下来,matplotlib可以制作非常好看的图表,效果完全可以和MATLAB媲美。
虽然这篇文章有点老旧,但它可能会帮助你入门,解决你描述的问题(当然,文章是用Python写的)。