Ich empfange PCM-Samples über einen Stream mit einem Kanal und 8000 Samples pro Sekunde. Ich fand heraus, wie ich die Lautstärke herausfinden kann, indem ich die "Kraft" des Signals berechnete, indem ich den Abs-Wert aller nächsten 1000 Samples addierte und dann durch die Anzahl der Samples dividierte, die 1000 beträgt. Es funktioniert etwas gut, aber manchmal werden meine Berechnungen verrückt, meine Summe der absoluten Werte von Proben scheinen sich ständig aufzubauen und lächerliche Werte zu erreichen ... also denke ich, dass ich dort etwas falsch mache. Lustige Sache ist, dass, wenn Berechnungen verrückt werden, alles wieder normal wird, wenn ich mit meiner Hand auf 'Soundeingabegerät' drücke;)
Wie auch immer. Meine Frage ist: Wie kann man die Lautstärke eines Satzes von PCM-Samples richtig berechnen?
Antworten:
Berechnen Sie den Effektivwert (Root-Mean-Square), um die Energie zu messen (die eng mit der "Lautstärke" zusammenhängt, aber nicht mit dieser identisch ist).
You can do this in any block size of samples. You can do it on all the samples at once to get an average energy, or you can break your sample set into chunks to see how the energy changes with time.
There are also more sophisticated methods that take into account the body and brain's quirks. You can find more information about that here.
quelle
I'm no expert and not sure what you are trying to achieve, but it sounds like you've made a programming error somewhere, could you show us the code?
When you say loudness do mean it as defined here? In that case you need to account for the listener.
If you're just interested in energy, maybe RMS is a better choice, or averaged squares.
quelle