十数年ずっとmp3・aacのエンコードをし続けているのに、元ソースがノンクリッピングでもエンコードした後の音源はクリップすることがあるという致命的な問題をまったく把握できていなかった。何故かあまりそれに関して騒ぎ立てるような情報が自分のアンテナにインプットされてこなかった。
この問題を把握するにあたって非常に参考になったリソースを紹介。
そして…
Mastered for iTunes
https://www.apple.com/jp/itunes/mastered-for-itunes/docs/mastered_for_itunes-jp.pdf
に記載されていることによれば、
よく用いられるプロセスのひとつがオーバーサンプリングです。オリジナルデータを4倍のサンプルレートでアップサンプリングすると、結果的にアナログへ変換されるデジタル音声信号のクオリティが向上します。この時にオリジナルデータが0dbFSであれば、オーバーサンプリングによりクリッピングが発生する可能性があります。オリジナルのデータが既にクリッピングしていた場合、オーバーサンプリングによってさらに悪化させることになりかねません。これを避けるため、デジタルマスターには若干の余裕(1db程度)を持たせることが推奨されています。
なので、wavの段階で波形が0dBに貼りついているような音源はまずアウト、となるとCDから直接aacにリッピングするようなケースはほぼアウトですよね…。
ただ、mp3/aacにエンコードした後、音量を均一化させるために私はmp3gain (aacgain)を使用していて、これで目標標準音量を音量を下げる方向に設定してやると、ノンクリッピングなファイルにすることはできます。
ここで気になるのは、エンコードした結果クリッピングしているファイルをmp3gain(aacgain)で補正した結果は本当に音がつぶれていないのか? それとも音がつぶれてしまった後で音量を下げているだけなのか?
元ファイルの音量を1~2dB下げてからエンコーダにかけるのと同じような効果が、mp3gain(aacgain)で手軽に得られるのなら、今までこの問題を知らずに作り続けてきたmp3/aacファイルをそのまま使い続けられるのですが。
でもこの問題を解き明かしたネット記事が今のところ、見つからないのです。
エンコード前の音量を下げておくという手順の追加は、根本的にクリッピングを解決できますがあまりにもインパクトが大きすぎるので、mp3/aacのスケールファクタで補正する手法で問題ないと安心したいのです。
以下、まったく自信のない私の推論。
ディザリングや丸め誤差の蓄積によって標本点の音量が元よりも大きくなって0dBを超えてしまった時、mp3/aacフォーマットは0dBよりも大きな音を記録できるのか。圧縮音源にはビット深度の概念がないようなので、それなら最大音量も定義できないように思えるけれども本当はどうなのか。
もしmp3/aacフォーマットが0dBよりも大きな音を「記録できる」が正解なら、スケールファクタを書き換えることで台形潰れ(saturation)していない波形を復元することができるけれども、「記録できない」が正解なら、エンコード前の音量を下げておくしか解決策になり得ないことになります。