Ich versuche, die Lautstärke einer Audiospur zu berechnen, die ich in einem Puffer gespeichert habe. Der Puffer enthält PCM-Daten des Signals und ich möchte mit Root Mean Squared ermitteln, wie laut es ist. Ich gehe davon aus, dass ich dies im Zeitbereich tun kann, anstatt in den Frequenzbereich wechseln zu müssen. Was wäre der Pseudocode dafür?
Würde ich einfach eine Sekunde lang probieren (Audio [0] - Audio [44099], Audio [44099] - Audio [88199] usw.) und den Effektivwert dieser Werte berechnen? Also würde ich zum Beispiel Folgendes tun:
für jede Sekunde?
<!-- html comment -->
, um die Zeichenbeschränkung in dem seltenen Fall zu umgehen, dass ein ansonsten perfekter Beitrag einen winzigen, aber sehr wichtigen Fehler aufweist. Dieser Bedarf tritt sehr selten auf: In der Regel sind mehr als 6 Zeichen für Verbesserungen erforderlich. Wenn beispielsweise eckige Klammern fehlen, ist es normalerweise besser, die Konstrukte\sqrt{}
und\frac{}{}
in TeX zu verwenden.Antworten:
Eine andere Sache ist, dass der RMS-Wert nicht sehr gut mit der wahrgenommenen Lautstärke korreliert. Vielleicht möchten Sie es stattdessen als Lautstärke oder Lautstärke bezeichnen. Es gibt so etwas wie gleiche Lautheitskonturen, die quantifizieren, wie empfindlich das Ohr für eine bestimmte Frequenz im Vergleich zu einer anderen Frequenz ist (siehe Wikipedia-Artikel) . Diese Kurven sind pegelabhängig. Das Ohr reagiert beispielsweise sehr empfindlich auf einen 1-kHz-Ton im Vergleich zu einem 100-Hz-Ton, wie in diesem Bild gezeigt (die horizontale Achse ist die Frequenz in Hz):
Eine der relativ einfachen Möglichkeiten besteht darin, Ihre PCM-Daten mit einer invertierten Gleichlautheitskurve zu filtern. Sie können auch die Standard-A-Gewichtung anwenden (siehe Artikel zum Wikipedia- Gewichtungsfilter) . Dann können Sie den Effektivwert des Ausgangs des gleich lauten Filters berechnen.
quelle