2009-08-20 15 views
24

Come utilizzerei Python per leggere i picchi di frequenza da un file PCM WAV e quindi essere in grado di generare un'immagine di esso, per l'analisi degli spettogrammi?FFT per Spettrogrammi in Python

Sto provando a creare un programma che consente di leggere qualsiasi file audio, convertirlo in WAV PCM e quindi trovare i picchi e i limiti di frequenza.

risposta

23

Python's wave library consente di importare l'audio. Successivamente, è possibile effettuare il use numpy to take an FFT dell'audio.

Quindi, matplotlib rende grafici e grafici molto carini - assolutamente paragonabili a MATLAB.

È vecchio come sporcizia, ma this article probabilmente ti consente di iniziare quasi esattamente il problema che stai descrivendo (articolo in Python, ovviamente).

+8

matplotlib può anche calcolare lo spettrogramma direttamente con il comando 'specgram'. – tom10

+0

sembra che sarà esattamente quello di cui ho bisogno. grazie :) –

13
file WAV

caricamento è facile utilizzando audiolab:

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

o per leggere qualsiasi formato audio generale e la conversione in WAV:

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

Lo spettrogramma è integrato in PyLab:

from pylab import * 
specgram(signal) 

In particolare, fa parte di matplotlib. Here's a better example.

2
from pylab import * 
specgram(signal) 

è il più semplice. Anche molto utile in questo contesto:

subplot 

Ma attenzione: Matplotlib è molto lento ma crea belle immagini. Non dovresti usarlo per le animazioni impegnative, tanto meno quando hai a che fare con 3D

1

Se hai bisogno di convertire dal formato PCM in numeri interi, ti consigliamo di usare struct.unpack.