Determinar qué tan fuerte es un AudioClip

10

Tengo un código que utiliza GetSpectrumDataun AudioSource que reproduce una canción para crear un diseño de nivel para que el reproductor lo reproduzca. Quiero agregar una funcionalidad donde los jugadores puedan subir sus propias canciones y reproducir los niveles creados con los datos de estas canciones. Desafortunadamente, al comparar diferentes archivos de audio, me encontré con esto:

ingrese la descripción de la imagen aquí

Como puede ver, la amplitud difiere drásticamente de un clip a otro, creando posteriormente niveles triviales para completar o casi imposibles. Quiero encontrar una manera de determinar este "volumen" para poder atenuarlo o amplificarlo con un multiplicador después de obtener los datos de la canción. Además, ¿hay alguna forma de extraer estos datos sin reproducir la canción?

Jardinero
fuente

Respuestas:

9

Una forma manual de hacerlo es usar AudioClip.GetData para obtener los datos de muestra en una matriz. Luego recorra los datos y encuentre el Root Mean Square para encontrar el "volumen" del clip de audio.

También puede escalar toda la matriz para que el valor máximo sea 1.0f y volver a escribirla en el clip de audio con AudioClip.SetData . Esto se llama normalización de audio , y hace que las muestras tengan el punto más alto al volumen máximo. Tenga en cuenta que esto no tiene en cuenta que si sus clips de audio tienen un volumen muy bajo, pero tienen picos muy altos. Existen técnicas más avanzadas para eso (que se indican a continuación).

Unity también está haciendo la normalización automáticamente por defecto. Entonces, si no ha tocado la configuración de importación, esta operación se realiza automáticamente y no necesita preocuparse por ello. Si todavía tiene el problema aunque esté seguro de que el audio está normalizado, probablemente necesite comprimir el audio con compresión de rango dinámico (nota: algo muy diferente de la compresión de datos, no tiene nada que ver con el tamaño de los archivos o el uso de memoria) Se ajusta a sus necesidades con software externo.

Lasse
fuente
Impresionante respuesta, investigará todo esto con más detalle. ¡Gracias!
Jardinero el
55
El valor máximo no siempre es la mejor opción (como dijiste). Los picos fuertes muy cortos (estos suenan como clics) no parecen tan fuertes como un sonido continuo. Si desea el volumen percibido, debe cuadrar todos los valores, promediar eso y luego sacar la raíz cuadrada. Hacerlo de esta manera es lo que hace la normalización, así que espero que haya una Unidad incorporada.
Jezzamon
2
La sonoridad está relacionada con la energía del sonido, y la forma de determinar esto es, como sugiere @Jezzamon, calculando la raíz del cuadrado medio (RMS). dsp.stackexchange.com/questions/2951/loudness-of-pcm-stream
Zac