¿Cómo extraer información de frecuencia de una transmisión de audio de entrada (usando PortAudio)?

StackOverflow https://stackoverflow.com/questions/259451

Pregunta

Quiero grabar sonido (voz) usando PortAudio (PyAudio) y emitir la onda de sonido correspondiente en la pantalla. Sin esperanzas como soy, no puedo extraer la información de frecuencia del flujo de audio para poder dibujarla en forma de Hz / tiempo.


Aquí hay un fragmento de código de ejemplo que graba y reproduce audio grabado durante cinco segundos, en caso de que ayude a alguno:

p = pyaudio.PyAudio()

chunk = 1024
seconds = 5

stream = p.open(format=pyaudio.paInt16,
                channels=1,
                rate=44100,
                input=True,
                output=True)

for i in range(0, 44100 / chunk * seconds):
    data = stream.read(chunk)
    stream.write(data, chunk)

Deseo extraer la información necesaria de la variable anterior "datos". (O utilice algún otro enfoque de alto nivel con PortAudio u otra biblioteca con enlaces de Python).


¡Estaría muy agradecido por cualquier ayuda! Incluso los datos vagamente relacionados de la sabiduría de análisis de audio son apreciados. :)

¿Fue útil?

Solución

Lo que quiere es probablemente la transformación de Fourier de los datos de audio. Hay varios paquetes que pueden calcular eso por usted. scipy y numpy son dos de ellos. A menudo se llama "Transformada rápida de Fourier". (FFT), pero ese es solo el nombre del algoritmo.

Aquí hay un ejemplo de su uso: https : //svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py

Otros consejos

La Transformada de Fourier no lo ayudará mucho si desea que el análisis se realice tanto en el dominio de la frecuencia como en el del tiempo. Es posible que desee echar un vistazo a "Transformaciones Wavelet". Hay un paquete llamado pywavelets ... http://www.pybytes.com/pywavelets/#discrete-wavelet- transform-dwt

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top