以前予告したようにmp3に変換すると無音部分ができてしまう理由について

ちょっと専門的な話しになるので、音楽関係の方以外は読んでも分からないかもしれませんが

調べてみてビックリしたんだけど、無音が足されてしまうのにはいくつか理由がありまして

★エンコーダ(圧縮)が挿入する無音

★デコーダ(復元)が挿入する無音

mp3はフレーム単位記録の為、デコード時にその単位と合致しない分の無音が挿入される


★エンコーダ(圧縮)が挿入する無音

エンコーダの仕様により曲頭に無音(エンコーダ・ディレイ)を付加してしまう。

(何でそんな仕様なのかは文系の私には分からず…w)

参照した資料によるディレイ値

iTunes7 528サンプル

音質がいいと話題になったLameだと

LAME 3.11 and earlier: 528サンプル 

LAME 3.12-3.50 1160サンプル

LAME 3.54 and newer 48サンプル

ヴァージョンによってもこんなに違うんですね

この画像を見てもらうと
o0400033413234241817
上から

★サイン波をPro Toolsで生成しオーディオ化したもの

PTWav書き出ししたものを再度インポート

WavデータをiTunesmp3に変換したもの

WavデータをPTmp3に変換したもの

WavデータをAudioGateAACに変換したもの

WavデータをiTunesAACに変換したもの

3段目のiTunesmp3に変換したものは見事に528サンプルの無音ができています。

ちなみにPTのほうは672サンプルの無音…iTunesより長い
o0400032213234241816

下段2つのAAC変換したものは無音無しですね。

★デコーダ(復元)が挿入する無音
デコーダの仕様によりこちらも曲頭に無音(デコーダ・ディレイ)を付加してしまう。

(こちらも例によって、何故にそんな仕様なのかは分からずですすいません…)
 

mp3はフレーム単位記録の為、デコード時にその単位と合致しない分の無音が挿入される

これも某所からの引用になりますが

MP3はフレーム単位(44.1kHzのサンプル周波数なら1152サンプル = 0.0261秒)でデコードを行う。つまり、MP3ファイルは1152サンプル(0.0261秒)の整数倍の曲長しかとり得ないことを意味する。

具体例として,サンプル周波数44.1kHz1秒のMP3を作ることを考えると、必要なMP3フレーム数は44100÷1152=38.3となり、小数点は切り上げ、39フレームということになる。39フレームでMP3ファイルを作ると,デコード後の曲長は 39×1152サンプル(0.0261)= 1.0179秒になってしまい,正確に1秒のMP3ファイルは作れない。つまり、ファイル末尾に約0.02秒弱の無音部分が付いてしまう。この末尾に付加された余計なサンプルのことを,パッディングと呼ぶ」

画像の中段2つのmp3ファイルは、曲頭、曲終わりに付加された無音部分の長さこそ違えど、ファイルとしての長さは同じ
o0400022013234261594

このケースの場合は1324800サンプルなのでこれを1152で割ってみると

1324800÷11521150

ちゃんと整数倍になってる!

スゲー!

 

以上のような問題を乗り超えてギャップレス再生するためには、

パッディング・サンプル数をデコーダーに伝達し、余計な部分を再生しないようにしつつ、

エンコーダ自身が作り出すディレイ・サンプル数みデコーダーに伝達して先頭の余計な部分を再生しないようにする。
さらに!
デコーダー自身が発生させるディレイ・サンプル数を認識して先頭の余計な部分を再生しないようにする。
 

というわけで、こういったディレイタイムをメタデータとして認識させ、先頭・末尾の不要サンプルを除去しながら再生することで余白が無い状態で聞くことが可能になるわけですね。

ちなみにmp3の頭のズレを取り除いて曲終わりを比べるとこんな感じ
o0400018313234482473
 この場合、AACのほうが付加されてる無音が長いですね。

AACiTunes変換とAudioGate変換でファイル全体の長さや付加される無音の長さも全く一緒で、曲頭には1サンプルたりとも無音は付加されませんでした。

AACに関しても少し調べてみたんですが、英語で書かれてるものが殆どで、細かいとこまでチェックしきれてないですが、こちらは1024サンプル単位(もしくは2048単位?)でのエンコード・デコードで云々書いてありまして、より高度な計算をしつつもメタデータのやり取りが優秀なのか、こちらのほうがギャップレス再生に向いている設計になってるみたいです。

AACに関しても時間がある時にもっと調べてみます!
 

なんか書くのに疲れて最後は雑な感じになってしまいましたが()

PC DJ用のデータでmp3を使う時とかはそんなに問題にならないけど、制作や録音など音楽仕事で使うデータはやはり非圧縮(WAVAIFF)でやり取りするにこしたことないですね。


録音データをmp3で送る→WAVに変換して取り込む再度mp3で送る→WAVに変換して取り込む……なんてことを数回繰り返してたらとんでもないことになってきますよ…。