Pregunta

Soy nuevo al análisis de audio, pero la necesidad de realizar una (aparentemente) tarea sencilla. Tengo una matriz de bytes que contiene una grabación de 16 bits (un solo canal) y una frecuencia de muestreo de 44100. ¿Cómo puedo realizar un análisis rápido para obtener el volumen en un momento dado? Necesito calcular un umbral, por lo que una función devuelva true si está por encima de una cierta amplitud (volumen) y falso en caso contrario. Pensé que podría iterar a través de la matriz de bytes y comprobar su valor, con 255 siendo el más fuerte, pero esto no parece funcionar, ya que incluso cuando no grabe nada, el ruido de fondo y se mete en algunos de la matriz está llena de 255. Cualquier sugerencia sería grande. Gracias

¿Fue útil?

Solución

A medida que tiene datos de 16 bits, se debe esperar que la señal varíe entre -32768 y 32767. Para calcular el volumen se puede tomar intervalos de, digamos, 1000 muestras, y calcular su valor RMS. Sumar los valores de muestra cuadrado se divide por 1000 y la raíz cuadrada. comprobar este número en tu contra umbral.

Otros consejos

Normalmente se mide la energía de las ondas utilizando raíz media cuadrada .

Si quieres ser más perceptualmente precisa se puede tomar la señal de dominio de tiempo a través de una transformada de Fourier discreta a una señal de dominio de frecuencia, e integrar más de las magnitudes con alguna función de ponderación (ya que las ondas de baja frecuencia son perceptivamente más fuerte que las ondas de alta frecuencia en la misma energía).

Pero no sé material de audio o bien así que estoy inventando cosas. ?

Yo podría intentar aplicar una desviación estándar de ventana corrediza. Otoh, yo no habría asumido que 255 = más fuerte. Puede ser, pero me gustaría saber qué se está utilizando la codificación. Si ningún tipo de compresión está presente, entonces dudo 255 es "más fuerte".

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