Esto es lo que me gustaría hacer. Me gustaría encontrar la frecuencia de audio y la amplitud de un archivo .wav en cada digamos 1ms de ese archivo .wav y guardarlo en un archivo. He graficado la frecuencia contra la amplitud y he graficado la amplitud con el tiempo, pero no puedo calcular la frecuencia de las horas extras. Mi objetivo final es poder leer el archivo y usar la amplitud para ajustar las variables y la frecuencia para activar qué variables se usan, esa parece ser la parte fácil. He estado usando numpy, audiolab, matplotlib, etc ... usando FFT pero no puedo entender esto, ¡cualquier ayuda es apreciada! ¡Gracias!Python encuentra frecuencia de audio y amplitud en el tiempo
Respuesta
Use una STFT con ventanas superpuestas para estimar el espectrograma. Para ahorrarse la molestia de enrollar el suyo, puede usar el specgram method de Matlabotlib's mlab. Es importante usar una ventana lo suficientemente pequeña para la cual el audio sea aproximadamente estacionario, y el tamaño del búfer debe ser una potencia de 2 para usar de manera eficiente un radix-2 fft común. 512 muestras (aproximadamente 10,67 ms a 48 ksps, o 93,75 Hz por contenedor) deberían ser suficientes. Para una velocidad de muestreo de 48 ksps, superponga por 464 muestras para evaluar una ventana deslizante a cada 1 ms (es decir, cambie por 48 muestras).
Editar:
He aquí un ejemplo que utiliza mlab.specgram
en una señal de 8 segundos que tiene 1 tono por segundo desde 2 kHz hasta 16 kHz. Tenga en cuenta la respuesta en los transitorios. He ampliado la imagen en 4 segundos para mostrar la respuesta con más detalle. La frecuencia cambia exactamente a 4 segundos, pero se necesita una longitud de búfer (512 muestras, aproximadamente +/- 5 ms) para que pase el transitorio. Esto ilustra el tipo de manchas espectrales/temporales causadas por transiciones no estacionarias a medida que pasan a través del buffer. Además, puede ver que incluso cuando la señal es estacionaria existe el problema de la fuga espectral causada por la ventana de los datos. Se utilizó un Hamming window function para minimizar los lóbulos laterales de la fuga, pero esto también ensancha el lóbulo principal.
import numpy as np
from matplotlib import mlab, pyplot
#Python 2.x:
#from __future__ import division
Fs = 48000
N = 512
f = np.arange(1, 9) * 2000
t = np.arange(8 * Fs)/Fs
x = np.empty(t.shape)
for i in range(8):
x[i*Fs:(i+1)*Fs] = np.cos(2*np.pi * f[i] * t[i*Fs:(i+1)*Fs])
w = np.hamming(N)
ov = N - Fs // 1000 # e.g. 512 - 48000 // 1000 == 464
Pxx, freqs, bins = mlab.specgram(x, NFFT=N, Fs=Fs, window=w,
noverlap=ov)
#plot the spectrogram in dB
Pxx_dB = np.log10(Pxx)
pyplot.subplots_adjust(hspace=0.4)
pyplot.subplot(211)
ex1 = bins[0], bins[-1], freqs[0], freqs[-1]
pyplot.imshow(np.flipud(Pxx_dB), extent=ex1)
pyplot.axis('auto')
pyplot.axis(ex1)
pyplot.xlabel('time (s)')
pyplot.ylabel('freq (Hz)')
#zoom in at t=4s to show transient
pyplot.subplot(212)
n1, n2 = int(3.991/8*len(bins)), int(4.009/8*len(bins))
ex2 = bins[n1], bins[n2], freqs[0], freqs[-1]
pyplot.imshow(np.flipud(Pxx_dB[:,n1:n2]), extent=ex2)
pyplot.axis('auto')
pyplot.axis(ex2)
pyplot.xlabel('time (s)')
pyplot.ylabel('freq (Hz)')
pyplot.show()
- 1. Audio de Pygame simple a una frecuencia
- 2. Detección de frecuencia de Python
- 3. Medición de amplitud de micrófono en vivo en C#
- 4. encuentra el tiempo restante en un setTimeout()?
- 5. Detectar y grabar audio en Python
- 6. Frecuencia de variables globales en python?
- 7. Reproducir y grabar audio al mismo tiempo
- 8. ¿Con qué frecuencia encuentra javascript deshabilitado en los navegadores?
- 9. iOS: Unidades de audio: configuración de frecuencia de muestreo arbitraria
- 10. La frecuencia de muestreo de audio depende de los canales?
- 11. Distribuciones de frecuencia de trazado en python
- 12. recuento de frecuencia de elemento en python
- 13. Transmisión de audio y video con Python
- 14. Análisis de audio en tiempo real en Linux
- 15. Frecuencia de muestreo para la grabación de audio del iPhone
- 16. utilizando el módulo Python Wave obtener y escritura de audio
- 17. Python - conteo de frecuencia de letras y traducción
- 18. entrada midi en tiempo real y sincronización con audio
- 19. Amplitud media de un .wav en C#
- 20. ¿Grabar audio en tiempo real en java?
- 21. Audio en el iPhone
- 22. ¿Cómo obtener la frecuencia de muestreo y la frecuencia del archivo de música (MP3) en android?
- 23. Retraso de audio: obtener el tiempo de espera agotado
- 24. Extracción de datos de amplitud desde PCM lineal en el iPhone
- 25. Detección en tiempo real de picos de frecuencia de eventos
- 26. Archivo de datos de audio en bruto abierto Python
- 27. Reproducir audio con Python
- 28. cómo convertir archivo de onda para flotar amplitud
- 29. Python: Cambiar el tono del archivo de audio
- 30. ¿Cómo leer/escribir datos de audio en bruto en tiempo real (con python)?
Un archivo de sonido no tiene un solo "frecuencia" en un momento dado, a menos que sea simplemente una grabación de un tono sinusoidal pura. Lo que probablemente necesite hacer es capturar el * espectro de potencia * a intervalos regulares y almacenar eso, o posiblemente hacer algún tipo de procesamiento en el espectro de potencia, como identificar los picos N más grandes y almacenarlos. –
http://stackoverflow.com/questions/604453/analyze-audio-using-fast-fourier-transform – sylvanaar