Abrufen der Lautstärke eines Titels mit RMS

15

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:

RMS=Audio-[0]2+Audio-[1]2+Audio-[2]2.....Audio-[44099]244100

für jede Sekunde?

XSL
quelle
1
Es gibt eine fehlende Klammer im obigen Ausdruck - ich würde es selbst hinzufügen, aber Änderungen müssen anscheinend aus mindestens 6 Zeichen bestehen ...
Paul R
3
@PaulR - Sie können ein hinzufügen <!-- 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.
Kevin Vermeer
1
@Kevin: danke für den tipp - ich werde deinen HTML kommentar vorschlag in zukunft nutzen.
Paul R
@PaulR - Dies wurde bereits zuvor besprochen: Die Einschränkung ist beabsichtigt, um unvollständige oder sinnlose Änderungen zu verhindern (siehe Verteidigung hier ), hat aber ihre Gegner (siehe Diskussion hier ).
Kevin Vermeer
4
Beachten Sie, dass RMS allein nicht die Lautstärke angibt. Extrem niedrige oder hohe Frequenzen klingen leiser als 3 kHz bei gleichem RMS-Wert. Mit einem A-Bewertungsfilter erhalten Sie eine genauere Schätzung. gist.github.com/148112
endolith

Antworten:

12

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):

gleiche Lautheitskonturen

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.

Niaren
quelle
Ich bin mir nicht sicher, wie ich vom Code des Quesitons zu diesem gelangen soll. Im Beispiel der Frage werden die Quadrate der Audio-Samples summiert. In der Antwort geht es darum, Filter auf Frequenzen anzuwenden. Es scheint also nicht ausreichend zu sein, "Ihre PCM-Daten mit einer invertierten Kurve gleicher Lautstärke zu filtern". Sie müssen zuerst den Wert für jede Frequenz haben, dann können Sie herausfinden, wie die Kurve richtig angewendet wird. Aber das ist ein großer Schritt, der ausgelassen wurde.
gman
@gman Die Idee ist, das Audio mit einem Filter vorzuverarbeiten und dann das Ergebnis wie in der Frage zu verwenden (RMS-Berechnung). Ich bin nicht 100% sicher, was du meinst. Sind Sie sich nicht sicher, wie Sie filtern sollen oder wie Sie den Filter entwerfen sollen?
Niaren