RMSでトラックのラウドネスを取得する


15

バッファーに保存したオーディオトラックの音量を計算しようとしています。バッファーには、信号のPCMデータが含まれています。ルート平均二乗を使用して、それがどれほど「大きい」のかを知りたいです。周波数ドメインに切り替える代わりに、時間ドメインでこれを行うことができると思います。これを行うための擬似コードは何でしょうか?

単純に1秒間サンプリングし(audio [0]-audio [44099]、audio [44099]-audio [88199]など)、それらの値のRMSを計算しますか?したがって、たとえば、私はこれをしますか:

RMS=オーディオ[0]2+オーディオ[1]2+オーディオ[2]2オーディオ[44099]244100

毎秒?


1
上記の式では不足しているブラケットがあります-私はそれを自分自身を追加したいが、編集は明らかに少なくとも6つの文字である必要はあり...
ポール・R

3
@PaulR- <!-- html comment -->それ以外の場合は完璧な投稿に小さなながらも非常に重要なエラーがあるというまれなケースでは、文字制限を回避するためにを追加できます。この必要性は非常にまれです。通常、6文字以上の改善が必要です。たとえば、角かっこがない場合、通常TeXで\sqrt{}and \frac{}{}構造を使用する方が適切です。
ケビンフェルメール

1
@Kevin:ヒントをありがとう-今後、HTMLコメントの提案を使用します。
ポールR

@PaulR-これは以前に議論されました:制限は意図的であり、不完全または無意味な編集を防ぐように設計されています(こちらの防御をご覧ください)が、反対者がいます(こちらの議論をご覧ください)。
ケビンフェルメール

4
RMSだけでは音量はわかりません。極端に低いまたは高い周波数は、同じRMS値の3 kHzより低い音量で聞こえます。A重み付けフィルターを使用すると、より正確な推定値が得られます。 gist.github.com/148112
endolith

回答:


12

もう1つのことは、RMS値が知覚される音量とあまり相関していないことです。代わりに、レベルまたはボリュームの呼び出しを検討することをお勧めします。等ラウドネスコンターと呼ばれるものがあります。これは、別の周波数と比較して、特定の周波数に対する耳の感度を定量化するものです。Wikipediaの記事を参照してください。これらの曲線はレベルに依存しています。たとえば、次の図に示すように、耳は100Hzのトーンと比較して1kHzのトーンに非常に敏感です(横軸はHz単位の周波数です)。

等ラウドネスの等高線

比較的簡単にできることの1つは、PCMデータを逆等ラウドネスカーブでフィルター処理することです。または、標準のA重み付けを適用できます。WikipediaWeighting Filterの記事を参照してください。次に、等ラウドネス加重フィルターの出力のRMS値を計算できます。


質問者のコードからこれにどのように移行するかはわかりません。質問の例は、オーディオサンプルの平方を合計します。答えは、フィルターを周波数に適用することについてであるため、「PCMデータを逆等ラウドネス曲線でフィルター処理する」だけでは十分ではないようです。最初に各周波数の値を取得する必要があります。次に、曲線を正しく適用する方法を理解できますか?しかし、それは大きな一歩です。
gman

@gmanアイデアは、フィルターでオーディオを前処理し、その結果を質問(RMS計算)のように使用することです。私はあなたが何を意味するのか100%確信していません。フィルター処理の方法やフィルター設計の方法が不明ですか?
ナイアレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.