Estoy tratando de calcular el volumen de una pista de audio que he almacenado en un búfer. El búfer contiene datos PCM de la señal y quiero saber qué tan 'alto' es usando Root Mean Squared. Supongo que puedo hacer esto en el dominio del tiempo en lugar de tener que cambiar al dominio de frecuencia. ¿Cuál sería el pseudocódigo para hacer esto?
¿Simplemente muestrearía durante un segundo (audio [0] - audio [44099], audio [44099] - audio [88199] etc.) y calcularía el RMS de esos valores? Entonces, por ejemplo, haría esto:
por cada segundo?
<!-- html comment -->
para evitar la restricción de caracteres en el raro caso de que una publicación perfecta tenga un error pequeño pero muy importante. Esta necesidad ocurre muy raramente: generalmente hay más de 6 caracteres de mejora por hacer. Por ejemplo, cuando faltan paréntesis, generalmente es mejor usar las construcciones\sqrt{}
y\frac{}{}
en TeX.Respuestas:
Otra cosa es que el valor RMS no está muy bien correlacionado con el volumen percibido. Es posible que desee considerar llamarlo nivel o volumen en su lugar. Hay algo llamado contornos de igual volumen que cuantifica cuán sensible es el oído a una frecuencia particular en comparación con otra frecuencia, vea el artículo de Wikipedia . Estas curvas dependen del nivel. Por ejemplo, el oído es muy sensible a un tono de 1 kHz en comparación con un tono de 100 Hz, como se muestra en esta imagen (el eje horizontal es la frecuencia en Hz):
Una de las cosas relativamente simples que puede hacer es filtrar los datos de su PCM con una curva de igual volumen invertida. O puede aplicar la ponderación A estándar, consulte el artículo Filtro de ponderación de Wikipedia . Luego puede calcular el valor RMS de la salida del filtro ponderado de igual intensidad.
fuente