私は音楽プレーヤーを書いていますが、さまざまな曲の音量を正規化したいです。
私はこれを行うためのいくつかの異なる方法を考えることができます、例えば:
すべてのPCMサンプルを調べ(浮動小数点が-1から1であると想定)、m = max(abs(sample))を選択します。次に、係数1/mをすべてのPCMサンプルに適用します。これにより、ピークは1になります。
PCMストリームを通過し、位置ごとに、その周囲の幅のハニングウィンドウを取得し、絶対サンプルの平均を計算し、それらのデータから最大値を選択して、すべてを正規化します。
2と同じですが、ある種の平均値を取得する他の方法があります。
2と3には、クリッピングが必要になる可能性があるため、品質が低下するという欠点があります。1に正規化するのではなく、0.95程度に正規化することで、ある程度回避できるかもしれません。しかし、2と3には、これがユーザーにとってより自然な正規化である可能性があるという利点があると思います。ウィキペディアにもこれに関する情報があり、曲のラウドネスを測定するためのRMS、ReplayGain、またはEBUR128について言及しています。
他のポピュラー音楽プレーヤー(iTunesなど)はこれをどのように行っていますか?