2009-06-12 37 views
11

Tengo un montón de diferentes grabaciones de audio en formato WAV (todos los instrumentos y tonos diferentes), y quiero "normalizarlas" para que suenen aproximadamente el mismo volumen cuando se reproducen.¿Cómo puedo determinar qué tan fuerte sonará un archivo WAV?

He intentado medir la magnitud promedio de la muestra (la suma de todos los valores absolutos dividido por el número de muestras), pero la normalización por esta medida no funciona muy bien. Creo que este método no funciona porque no tiene en cuenta la frecuencia de los sonidos, y sé que las grabaciones de mayor frecuencia suenan más fuerte que los sonidos de baja frecuencia de la misma amplitud.

¿Alguien conoce un buen método para medir el volumen de un sonido?

+0

Parece que esto depende de muchos factores fuera de su control, uno de los más grandes es la sensibilidad relativa del oyente a varias frecuencias. Eso varía bastante de individuo a otro. –

+2

¿Eh? ¿Que es eso? – MusiGenesis

+0

Es una broma. Sí, mucho de esto variará por persona, pero me gustaría generalmente normalizar lo mejor posible. – MusiGenesis

Respuesta

10

Root Mean Square se utiliza a menudo para estimar el volumen de los archivos de sonido. Esto se debe a que un sonido que es muy fuerte podría no percibirse de esa manera si es muy corto. También recuerde que la potencia aumenta exponencialmente con el cuadrado de amplitud.

Los fanáticos del audio en Hydrogen Audio saben mucho sobre esto ... comprueben su gratisReplay Gain software. Es posible que no necesites hacer ninguna programación en absoluto.

EDITAR: Se incluyeron los comentarios de comentarios sobre la potencia frente a la amplitud.

+0

Funcionó como un amuleto, gracias. Mi licenciatura fue en Física, así que estoy un poco avergonzado de no haberme acordado de esto. Había hecho algo realmente estúpido antes, como multiplicar n muestras y tomar la enésima raíz, pensando que esa era la raíz cuadrada. Gracias por salvarme de mí mismo. – MusiGenesis

+1

Es posible que desee prestar atención al hecho de que no todas las frecuencias son percibidas de la misma manera por el oyente. Un cierto nivel de RMS de muy bajas frecuencias podría percibirse como un sonido mucho más fuerte que el mismo nivel de RMS de altas frecuencias. – sthg

+3

La percepción de la sonoridad depende de la frecuencia y sigue los contornos de sonoridad igual (http://en.wikipedia.org/wiki/Loudness). –

3

Bueno, al no ser un experto en audio y agregar al comentario anterior, debe determinar lo que define como "la menor cantidad de tiempo para la potencia máxima" y luego simplemente convertir la onda en punto flotante sin procesar y usar RMS el lapso de tiempo y tomar continuamente trozos de ese período de tiempo, encuentre el MAX y allí tiene su mayor potencia máxima.

-1

Podría estar muy lejos de aquí, pero, si tiene wavepad, puede cargar varios archivos y mezclar un poco los volúmenes para que todos sean iguales. Además, si tiene ciertas secciones de un archivo que son más fuertes, puede seleccionar esa sección y bajar el volumen para esa sección.

EDITAR: Y lo siento, no es realmente un "método" para medir el volumen, pero si solo tiene que hacer que todos sean iguales, esto debería funcionar bien.

2

Para añadir a la respuesta del PeterAllenWebb:

Antes de calcular el RMS, debe "centro" de su primera muestra (pensar en un 5 minutos a .wav, donde cada muestra tiene la máxima amplitud +). La mejor manera de hacerlo es usar un filtro de paso alto a una frecuencia subsónica.

Eso todavía no tomaría las frecuencias que los humanos son sensibles a contar. Para hacer eso, podrías usar A-ponderación. Hay una página donde se puede calcular en línea: http://www.diracdelta.co.uk/science/source/a/w/aweighting/source.html

El código parece estar aquí: http://www.diracdelta.co.uk/science/source/a/w/aweighting/multicalc.js

+0

Estoy descubriendo que la normalización por RMS funciona mucho mejor que la normalización por valor máximo en términos de obtener sonidos en el mismo tono para que sean aproximadamente iguales en volumen, pero la medición RMS parece relativamente insensible al tono, por lo que no está haciendo lo que quiero (que es bajar el volumen para sonidos agudos). El enlace de wikipedia de Webb mostró la curva de respuesta de frecuencia para el oído humano, pero gracias especialmente por el enlace a la fórmula, esta noche entrará en el código. – MusiGenesis

1

reiterar lo que otras personas han dicho, usar el valor RMS para estimar la "intensidad" de un pasaje de sonido.

Pero, si se trata de sonidos impulsivos como punteo o golpes de tambor, querrá hacer un valor RMS deslizante y seleccionar solo el valor RMS pico. Mide 100 ms del sonido, desliza la ventana, mide de nuevo, etc. y luego normalízalo según el valor más grande que encuentres.

Elimine definitivamente cualquier valor de CC antes de hacer el RMS, y la ponderación A lo hará más parecido a cómo lo escuchamos.Aquí está el código para la ponderación A en MATLAB/Octave y Python.

Cuestiones relacionadas