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.
The FFT Spectrogram trend, sometimes known as a color density spectral array (CDSA), displays a density spectral array of the frequency and power characteristics of the EEG, derived from a fast Fourier transform (FFT) analysis, as a function of time.
We can obtain the magnitude of frequency from a set of complex numbers obtained after performing FFT i.e Fast Fourier Transform in Python. The frequency can be obtained by calculating the magnitude of the complex number. So simple ab(x) on each of those complex numbers should return the frequency.
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).
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With