我如何使用Python从WAV PCM文件读取频率峰值,然后能够生成它的图像,用于光谱分析?
我正在尝试制作一个程序,允许您读取任何音频文件,将其转换为WAV PCM,然后找到峰值和频率截止值。
答案 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。