Determinare quanto è forte un AudioClip


10

Ho un po 'di codice che utilizza GetSpectrumDatauna sorgente audio per riprodurre un brano per creare un layout di livello per la riproduzione del lettore. Voglio aggiungere una funzionalità in cui i giocatori possono caricare i propri brani e riprodurre i livelli creati con i dati di questi brani. Sfortunatamente, quando ho confrontato diversi file audio, ho riscontrato questo:

inserisci qui la descrizione dell'immagine

Come puoi vedere, l'ampiezza differisce drasticamente da clip a clip, creando successivamente livelli che sono banali da completare o quasi impossibili. Voglio trovare un modo per determinare questo "volume" in modo da poterlo attenuare o amplificarlo con un moltiplicatore dopo aver ottenuto i dati dalla canzone. Inoltre, c'è un modo per estrarre questi dati senza riprodurre la canzone?

Risposte:


9

Un modo manuale per farlo è utilizzare AudioClip.GetData per ottenere i dati di esempio in un array. Quindi scorrere tra i dati e trovare il Root Mean Square per trovare il "volume" della clip audio.

È inoltre possibile ridimensionare l'intero array in modo che il valore massimo sia 1.0f e riscriverlo nell'audioclip con AudioClip.SetData . Questo si chiama normalizzazione dell'audio e fa sì che i campioni abbiano il punto più alto al massimo volume. Nota che ciò non tiene conto del fatto che se le tue clip audio hanno un volume molto basso, ma hanno picchi molto alti. Ci sono tecniche più avanzate per questo (annotate di seguito).

Unity sta anche eseguendo la normalizzazione automaticamente per impostazione predefinita. Quindi, se non hai toccato le impostazioni di importazione, questa operazione viene eseguita automaticamente e non devi preoccuparti. Se il problema persiste anche se sei sicuro che l'audio è normalizzato, probabilmente dovrai comprimere l'audio con la compressione dell'intervallo dinamico (nota: cosa molto diversa dalla compressione dei dati, non ha nulla a che fare con le dimensioni dei file o l'utilizzo della memoria) per soddisfare le tue esigenze con un software esterno.


Risposta eccezionale, esamineremo tutto questo con maggiori dettagli. Grazie!
Giardiniere

5
Il valore massimo non è sempre l'opzione migliore (come hai detto). I picchi molto brevi (questi suoni come clic) non sembrano forti come un suono continuo. Se si desidera il volume percepito, è necessario quadrare tutti i valori, in media quello e quindi prendere la radice quadrata. Farlo in questo modo è ciò che fa la normalizzazione, quindi spero che ci sia un Unity incorporato per questo.
Jezzamon,

2
La sonorità è correlata all'energia sonora e il modo per determinarlo è, come suggerisce @Jezzamon, calcolando il radice-media-quadrato (RMS). dsp.stackexchange.com/questions/2951/loudness-of-pcm-stream
Zac Crites
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.