views:

3533

answers:

2

How would I go about using Python to read the frequency peaks from a WAV PCM file and then be able to generate an image of it, for spectogram analysis?

I'm trying to make a program that allows you to read any audio file, converting it to WAV PCM, and then finding the peaks and frequency cutoffs.

+11  A: 

Python's wave library will let you import the audio. After that, you can use numpy to take an FFT of the audio.

Then, matplotlib makes very nice charts and graphs - absolutely comparable to MATLAB.

It's old as dirt, but this article would probably get you started on almost exactly the problem you're describing (article in Python of course).

Mark Rushakoff
matplotlib can also compute the spectrogram directly with the command `specgram`.
tom10
that looks like it will be exactly what I need. thank you :)
Eugene Bulkin
+2  A: 

Loading WAV files is easy using audiolab:

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

or for reading any general audio format and converting to WAV:

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

The spectrogram is built into PyLab:

from pylab import *
specgram(signal)

Specifically, it's part of matplotlib. Here's a better example.

endolith