Bestimmen, wie laut ein AudioClip ist

10

Ich habe einen Code, der GetSpectrumDatavon einer AudioSource verwendet wird, die einen Song spielt, um ein Level-Layout für den Player zu erstellen. Ich möchte eine Funktion hinzufügen, mit der die Spieler ihre eigenen Songs hochladen und die mit den Daten dieser Songs erstellten Levels spielen können. Leider habe ich beim Vergleich verschiedener Audiodateien Folgendes festgestellt:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, unterscheidet sich die Amplitude von Clip zu Clip drastisch, wodurch anschließend Ebenen erzeugt werden, die trivial zu vervollständigen oder fast unmöglich sind. Ich möchte einen Weg finden, diese "Lautstärke" zu bestimmen, damit ich sie abschwächen oder mit einem Multiplikator verstärken kann, nachdem ich die Daten aus dem Song erhalten habe. Gibt es auch eine Möglichkeit, diese Daten zu extrahieren, ohne das Lied abzuspielen?

Gärtner
quelle

Antworten:

9

Eine manuelle Möglichkeit, dies zu tun, besteht darin, AudioClip.GetData zu verwenden, um die Beispieldaten in einem Array abzurufen . Durchlaufen Sie dann die Daten und suchen Sie den quadratischen Mittelwert , um die "Lautstärke" des Audioclips zu ermitteln.

Sie können dann auch das gesamte Array so skalieren, dass der Maximalwert 1.0f beträgt, und es mit AudioClip.SetData in den Audioclip zurückschreiben . Dies wird als Normalisieren von Audio bezeichnet und bewirkt, dass Samples den lautesten Punkt bis zur maximalen Lautstärke haben. Beachten Sie, dass dies nicht berücksichtigt, wenn Ihre Audioclips sehr leise sind, aber sehr hohe Spitzen aufweisen. Hierfür gibt es fortgeschrittenere Techniken (siehe unten).

Unity führt die Standardisierung standardmäßig automatisch durch. Wenn Sie die Importeinstellungen nicht berührt haben, wird dieser Vorgang automatisch ausgeführt und Sie müssen sich darüber keine Gedanken machen. Wenn Sie immer noch das Problem haben, obwohl Sie sicher sind, dass das Audio normalisiert ist, müssen Sie das Audio wahrscheinlich mit Dynamikkomprimierung komprimieren (Hinweis: Ganz anders als Datenkomprimierung, hat nichts mit Dateigröße oder Speichernutzung zu tun) Passen Sie Ihre Anforderungen mit externer Software an.

Lasse
quelle
Tolle Antwort, werde all dies genauer untersuchen. Vielen Dank!
Gärtner
5
Der Maximalwert ist nicht immer die beste Option (wie Sie sagten). Sehr sehr kurze laute Spitzen (diese klingen wie Klicks) scheinen nicht so laut zu sein wie ein kontinuierlicher Ton. Wenn Sie die wahrgenommene Lautstärke wünschen, müssen Sie alle Werte quadrieren, diese mitteln und dann die Quadratwurzel ziehen. Dies auf diese Weise zu tun, ist das, was die Normalisierung tut. Hoffentlich ist eine Einheit dafür eingebaut.
Jezzamon
2
Lautheit hängt mit Schallenergie zusammen, und die Art und Weise, dies zu bestimmen, ist, wie @Jezzamon andeutet, die Berechnung des quadratischen Mittelwerts (RMS). dsp.stackexchange.com/questions/2951/loudness-of-pcm-stream
Zac Crites