Pregunta

Estoy trabajando en un proyecto en el que necesito saber la amplitud del sonido que viene de un micrófono en un ordenador.

Actualmente estoy usando Python con el Snack-Sound Toolkit y puedo grabar audio llegando por el micrófono, pero necesito saber qué tan fuerte que el audio es. Podría guardar la grabación en un archivo y usar otro conjunto de herramientas para leer en la amplitud en determinados puntos en el tiempo a partir del archivo de audio, o tratar de obtener la amplitud, mientras que el audio está llegando (que podría ser más propenso a errores).

¿Hay bibliotecas o código de ejemplo que me puede ayudar con esto? He estado buscando y hasta ahora el kit de herramientas de sonido Snack-parece ser mi mejor esperanza, sin embargo, no parece ser una forma de obtener acceso directo a la amplitud.

¿Fue útil?

Solución

En cuanto a los ejemplos Toolkit Bocado de sonido, parece que hay una función dbPowerSpectrum.

A partir de la referencia:

  

dBPowerSpectrum ()

     

calcula el espectro de potencia FFT registro del sonido (en el número de muestra indicado en la opción de inicio) y devuelve una lista de valores en dB. Vea el elemento sección para una descripción del resto de las opciones. Opcionalmente un punto final se puede dar, mediante la opción final. En este caso el resultado es el promedio de las FFT consecutivas en el rango especificado. Su espaciado predeterminado se toma de la fftlength pero esto se puede cambiar usando la opción de salto, que cuenta cómo muchos puntos para mover la ventana FFT cada paso. Opciones:

EDIT: Estoy asumiendo que cuando se dice amplitud, que quiere decir la forma "fuerte" aparece el sonido a un ser humano, y no el voltaje de dominio de tiempo (lo que probablemente sería 0 a lo largo de toda la longitud desde la integral de ondas sinusoidales se va a ser 0. ejemplo: 10 * sen (t) es más alto que 5 * sin (t), pero su valor promedio en el tiempo es 0. (no desea enviar voltajes sin aire acondicionado a un altavoz de todos modos)).

Para obtener volumen de sonido que es, tendrá que determinar las amplitudes de cada componente de frecuencia. Esto se hace con una transformada de Fourier (FFT), que descompone el sonido en sus componentes de frecuencia. La función dbPowerSpectrum parece darle una lista de las magnitudes (perdonadme si éste no es la definición exacta de un espectro de potencia) de cada frecuencia. Para obtener el volumen total, sólo puede resumir toda la lista (que se estrecha, xept aún podría ser diferente de la sonoridad percibida ya que el oído humano tiene una respuesta de frecuencia en sí).

Otros consejos

estoy completamente en desacuerdo con esta "respuesta" de CookieOfFortune.

otorgada, la pregunta está mal redactada ... pero esta respuesta es hacer las cosas mucho más complejo de lo necesario. Estoy asumiendo que por 'amplitud' quiere decir el volumen percibido. como técnicamente cada muestra en la corriente (PCM) de audio representa una amplitud de la señal en un intervalo de tiempo dado. para obtener una representación sonoridad tratar un cálculo RMS simple:

RMS

| K <

No estoy seguro de si esto ayuda, pero skimpygimpy proporciona facilidades para analizar archivos WAVE en Python secuencias y vuelta - que potencialmente podrían utilizar este para examinar las muestras de forma de onda directamente y hacer qué te gusta. Usted tendrá que leer alguna fuente, estos subcomponentes no están documentadas.

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