2009-08-20 13 views
24

¿Cómo podría utilizar Python para leer los picos de frecuencia de un archivo WAV PCM y luego poder generar una imagen de este, para el análisis de spectogram?FFT para espectrogramas en Python

Estoy tratando de hacer un programa que le permita leer cualquier archivo de audio, convertirlo a WAV PCM, y luego encontrar los picos y los límites de frecuencia.

Respuesta

23

Python's wave library le permitirá importar el audio. Después de eso, puede use numpy to take an FFT del audio.

Luego, matplotlib hace muy buenos cuadros y gráficos, absolutamente comparables a MATLAB.

Es viejo como suciedad, pero this article probablemente te pondría en contacto con casi el problema que estás describiendo (artículo en Python, por supuesto).

+8

matplotlib también puede calcular el espectrograma directamente con el comando 'specgram'. – tom10

+0

que parece que será exactamente lo que necesito. gracias :) –

13
archivos WAV

de carga es fácil usando audiolab:

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

o para leer cualquier formato de audio general y convertir a WAV:

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

El espectrograma se construye en PyLab:

from pylab import * 
specgram(signal) 

Específicamente, es parte de matplotlib. Here's a better example.

2
from pylab import * 
specgram(signal) 

es el más fácil. También es muy útil en este contexto:

subplot 

Pero tenga cuidado: Matplotlib es muy lento pero crea hermosas imágenes. No debe usarlo para animaciones exigentes, incluso menos cuando se trata de 3D

1

Si necesita convertir de formato PCM a enteros, querrá usar struct.unpack.