オーディオ ボリュームの正規化については既に質問しました。ほとんどのメソッド (たとえば、私が最も興味を持っているReplayGain ) では、PCM 制限を超えるピークが得られる可能性があります (ここでも読むことができます)。
単純なクリッピングは、おそらく私ができる最悪のことです。ウィキペディアが示唆しているように、何らかの形でダイナミック レンジ圧縮を行う必要があります。
個々の PCM サンプル値に適用する関数について話しています。別の同様の質問では、これを行うだけでは不十分であるか、私がすべきことではないという回答が 1 つあります。ただし、クリッピング ケースを処理する必要があるため、それはよくわかりません。答えは、一度に複数のサンプルで範囲圧縮を行い、すべてのサンプルに加えて単純なハードクリッピングを行うことを示唆していますか?
それはさておき、ウィキペディアの記事で説明されている関数は、私が望んでいるものとは少し違うようです (多くの場合、最終的にはまだクリッピング ケースがあります)。tanhのようなものを使用することを考えています。それは悪い考えですか?ボリュームはわずかに減少しますが、クリッピングが発生しないことが保証されます。
私のアプリケーションは一般的な音楽プレーヤーです。私は常にそれをオンにすることができ、ユーザーがこれをオフにしたくない可能性が非常に高いように、ほとんどすべての人に最適なソリューションを探しています。