JA EN
体系音声圧縮
·★ 会員·10分で読めます

音声圧縮を1から — 聴こえない音を捨てる技術

MP3はなぜ1/10以下のサイズで「同じように」聴こえるのか。聴覚マスキング→MDCT→ビット割り当ての順で音声コーデックの原理を前提知識ゼロから解説し、MP3/AAC/Opusの使い分けまでつなげる。

対象audioタスクcompression

生の音は思ったより重い

音は空気の圧力が細かく揺れる波です。マイクはこの揺れを電圧に変え、ADコンバータが一定間隔で電圧を測って数値の列にします。CD品質なら1秒間に44,100回、1回の測定を16ビットで、それをステレオ2チャンネル分。掛け算すると 44,100 × 16 × 2 = 約141万ビット/秒、1分あたり約10MBです。5分の曲で50MB——スマホで音楽が聴き放題になる世界は、このままでは来ませんでした。

MP3の定番設定である128kbpsは、この約1/11です。ZIPのような可逆圧縮(元に完全に戻せる圧縮)では、音声波形はほとんど縮みません。波形の数値列は一見ランダムに近く、繰り返しパターンがほぼ無いからです。桁を1つ落とすには「完全に戻せる」ことを諦め、何かを捨てるしかない。では何を捨てるか。音声コーデックの答えは明快で、人間の耳に聴こえない音を捨てます。

比喩: 電車の中のささやき声

静かな部屋でなら聴こえるささやき声も、走る電車の轟音の中では消えます。声は物理的には存在しているのに、知覚されない。これが聴覚マスキングです。耳の内部では、大きな音が鳴ると基底膜という器官のその周波数付近の感度が占有され、近くの小さな音の情報が脳に届かなくなります。

コーデックが利用する性質は2つあります。

つまり人間の耳は高性能ですが、穴だらけの測定器です。音声コーデックはこの穴の地図——心理音響モデル——を信号ごとに計算し、穴の中にだけ劣化を押し込みます。

直感: 捨てるのではなく「雑音を隠す」

正確に言うと、コーデックは音を選んで「削除」しているわけではありません。やっているのは数値を粗く丸めること(量子化)です。丸めればビット数は減りますが、丸めた分だけ元との差、つまり量子化雑音が生まれます。音声圧縮の本質は、この雑音をマスキングの傘の下に隠すことです。

心理音響モデルは周波数帯域ごとに「ここでは雑音がこのレベル以下なら聴こえない」というマスキング閾値を計算します。信号の強さと閾値の比(SMR: signal-to-mask ratio)が大きい帯域は丁寧に(多ビットで)、小さい帯域は雑に(少ビットで)量子化する。全帯域で雑音が閾値の下に収まれば、データは1/10でも耳には元と区別がつかない——これが「聴こえない音を捨てる」の正体です。

この「周波数に変換して、粗く丸めて、劣化を知覚の穴に押し込む」という三段構えは、JPEGが画像でやっていることとまったく同じ構造です。丸めの荒さを上げると何が起きるかは、画像のほうが目で見えるぶん体感しやすいので、ここで触ってみてください。

FIG 1変換→量子化→復元の流れをJPEGで体感する。Q値を下げる=丸めを粗くすると、残る係数が減り劣化が浮き出す。音声コーデックはこれと同じことを、劣化が「聴こえない」帯域を選んで行う

仕組み: MDCT — 継ぎ目なくブロックを刻む

周波数帯域ごとに丸めの粗さを変えるには、まず波形を周波数成分に分解する必要があります。音は刻々と変わるので、波形を短いブロック(たとえば2048サンプル≒43ミリ秒)に切って、ブロックごとに変換します。

ところが素朴にぶつ切りにすると、量子化で丸めたあと復元したときにブロックの境界で波形が食い違い、周期的な「ブツブツ」というノイズになります。これを解決するのが MDCT(修正離散コサイン変換) で、現代の音声コーデックのほぼすべてに載っている心臓部です。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

コメント

コメントにはログインが必要です