ホーム|サイト内検索:


spellbound

MP3などに代表される非可逆なオーディオ圧縮技術の改善には圧縮時に音質に問題が生じ易いサンプル音源の収集が重要である。このページでは WavPack でロスレス圧縮されたサンプル音源を公開してある。ロスレス圧縮された音源を「オリジナルの音源」と呼び、オリジナルの音源の音と非可逆圧縮後の音の違いで人間の聴覚で認識可能なものを「アーティファクト」と呼ぶことにする。人間の聴覚によって非可逆圧縮後の音をオリジナルの音源の音と区別できなくなったとき、その圧縮は「トランスペアレント」であると言う。非可逆オーディオ圧縮技術の目標は同一のビットレートでトランスペアレントになる場合をできるだけ増やすことであり、トランスペアレントにならない場合には不快な音の変質をできるだけ減らすことが目標になる。このページで公開してある音源を実際に聴けば何が問題であるかを実感することができるだろう。

注意:紹介するアーティファクトは筆者が優れていると感じてよく使っているエンコーダー (LAME と aoTuV) で生じる例に大きく偏っている。このページを見て聴いてそれらのエンコーダーが劣っていると誤解してしまわないように注意して欲しい。


WavPackで圧縮されたファイルの試聴の仕方

WavPackで圧縮されているWVファイルの試聴および他の形式への変換には foobar2000 を使うのが便利である。foobar2000は十得ナイフのように非常に便利なソフトなのでオーディオ圧縮技術に興味がある人はインストールしておいた方が良いだろう。二つの音源を聴き比べるときには foobar2000 の ABX comparator が便利である。WavPackのバイナリは http://www.rarewares.org/lossless.html からもダウンロードできる。


オリジナルの音源

spellbound.wav [2.6MB] (http://www.volny.cz/martel/ からダウンロードできる)

URL=http://www.hydrogenaudio.org/forums/index.php?showtopic=22105
URL=http://www.volny.cz/martel/
FILENAME=spellbound.wav
ARTIST=Dimmu Borgir
TITLE=Spellbound (by the Devil)
ALBUM=Enthrone Darkness Triumphant
TRACKNUMBER=02
DATE=1997
GENRE=
LENGTH=15sec
COMMENT=ringing sample

このサンプル音源を使えば、 LAME 3.96.1 の CBR と ABR で -q0,1 を使うとひどいリンギングを引き起こされることを容易に確認できる。これは LAME 3.96.1 の -q0,1 の有名なバグ。このサンプル音源を使えば LAME 3.96.1 のジョイントステレオが引き起こすアーティファクトを確認することもできる。


アーティファクト

LAME 3.96.1 の -q0,1 には音質を劣化させるバグがある

以下を聴き比べれば CBR 128kbps で LAME 3.96.1 の -q0,1 のバグによる音質劣化を確認できる。 -f (これは -q7 と同値) を付けてエンコードを速くしても同様の音質劣化が起こる (こちらはバグではない)。 -q0,1 を付けるとエンコード速度が遅くなる上に音質が劣化する。

以下を聴き比べれば ABR 128kbps で LAME 3.96.1 の -q0 のバグによる音質劣化を確認できる。

以下を聴き比べれば CBR 160kbps で LAME 3.96.1 の -q0 のバグによる音質劣化を確認できる。

以下を聴き比べれば CBR 192kbps で LAME 3.96.1 の -q0 のバグによる音質劣化を確認できる。

LAME 3.96.1 のジョイントステレオは完璧ではないが -m s はもっと悪い

以下を聴き比べれば CBR 128kbps で LAME 3.96.1 のジョイントステレオが原因のアーティファクトを確認できる。 -m s を付けずにジョイントステレオを使った方では右側から聴こえる最初の「ジャーン」の音の高周波成分が「シャー」と左側に漏れ出しているように聴こえる。

しかしジョイントステレオが原因のアーティファクトは一瞬だけである。ジョイントステレオによってステレオ分離性がサンプル全体で悪化することはない。それに対して -m s を付けてシンプルステレオ (強制LRステレオ) を使った場合には -q0 を付けた場合と同様のひどいリンギングが引き起こされ、全体の音質が大幅に劣化する。

現在の LAME のジョイントステレオは LR ステレオ (LR は Left-Right の略) と MS ステレオ (MS は Mid-Side の略) をフレームごとに使い分けることによって Huffman 符号化での圧縮率を上げる技術である。Huffman 符号化での圧縮率が上がれば同一のビットレートでより多くの情報を残すことができ、音質が改善される。

Huffman 符号化での圧縮率は音量が小さくなると高くなる。大抵のトラックでは左右のチャンネルの相関は大きいので S チャンネルの値は小さくなる。実際に S チャンネルが小さくなる場合には MS ステレオを使った方が効率良く圧縮できることになる。しかし左右のチャンネルに相関がほとんどない場合にはLRステレオを使った方が効率が良い。したがってLRステレオとMSステレオのどちらか片方のみを使うのではなく、その両方を状況に合わせて使い分けるのが圧縮率の観点からは効率的である。これが LAME のジョイントステレオの基本である。

LRステレオからMSステレオへの変換は可逆である。それにもかかわらずジョイントステレオ特有 (もしくはMSステレオ特有) のアーティファクトが発生してしまうのはどうしてなのだろうか。

LAMEのような心理音響解析を用いたエンコーダーは圧縮率を上げるために人間に聴こえ難いとみなされる成分を削る (マスキング)。 LAME$OMSステレオの使用時に M チャンネルよりも S チャンネルから音の成分をより多く削るように設計されているようだ (ソースコードを見て確認したわけではないのでこれは推測)。周波数の高い成分は人間にとって聴こえ難いので削られ易い。

以上を前提にすれば spellsound で生じたジョイントステレオが原因のアーティファクトをうまく解釈できる。LAMEは右側から聴こえる最初の「ジャーン」の音をMSステレオで扱うときに M チャンネルよりも S チャンネルから高周波成分をたくさん削ってしまう。そのとき、MSチャンネルをLRチャンネルに逆変換して解釈し直せば、右側の「ジャーン」の音の高周波成分が左側に付け加わることがわかる。 S = 0 という極端な状況は L = R に同値である。 S チャンネルから成分をたくさん削ると L = R という状況に近付くことになり、 R にしかない音が L に付け加わることになる。おそらくこのような仕組みで右側の「ジャーン」の高周波成分が左側に漏れて聴こえるようになっているのだろう。


サウンドスペクトログラム

当たり前のことだが、音質は耳で聴いて評価しなければいけない。音の波形やパワースペクトルやサウンドスペクトログラムなどを目で見て音質を評価してはいけない。しかしアーティファクトが確認されたとき、その原因を推測するためにそれらを観察することは非常に有用である。観察の経験を積めば音質が悪化している可能性が高い場合を判別するために音の波形やパワースペクトルやサウンドスペクトログラムなどが非常に役に立つこともわかるだろう。

オリジナルの音源

LAME 3.96.1 --preset cbr 128

LAME 3.96.1 --preset cbr 128 -q0

LAME 3.96.1 --preset cbr 128 -q1

LAME 3.96.1 --preset cbr 128 -q7

LAME 3.96.1 --preset 128

LAME 3.96.1 --preset 128 -q0

LAME 3.96.1 --preset cbr 160

LAME 3.96.1 --preset cbr 160 -q0

LAME 3.96.1 --preset cbr 192

LAME 3.96.1 --preset cbr 192 -q0

LAME 3.96.1 --preset cbr 128 -m s

以上のように -q0,1,7 や -m s を付けるとサウンドスペクトログラムがギザギザになる。おそらくそのギザギザがリンギングの原因になっている。

LAME 3.96.1 の --preset cbr 128 と --preset cbr 128 -m s で圧縮した結果の左チャンネルの最初の2秒間ほどの分の10kHz以上の成分の波形とサウンドスペクトログラムを見てみよう。

オリジナルの10kHz-16kHzの成分(上)と
LAME 3.96.1 --preset cbr で圧縮した結果の10kHz以上の成分(中)と
LAME 3.96.1 --preset cbr -m s で圧縮した結果の10kHz以上の成分(下)
の波形 (左チャンネルのみ)

このようにジョイントステレオを使って圧縮した結果(中)だけ、最初の「ジャーン」の部分で振幅が異常に大きくなっていることがわかる。その部分を実際に聴いてみると右側の「ジャーン」の音の高周波成分が左側に漏れているように感じられる。

オリジナルの10kHz-16kHzの成分(上)と
LAME 3.96.1 --preset cbr で圧縮した結果の10kHz以上の成分(中)と
LAME 3.96.1 --preset cbr -m s で圧縮した結果の10kHz以上の成分(下)
のサウンドスペクトログラム (左チャンネルのみ)

波形を見ても -m s オプションを付けて強制LRステレオを使用した場合の音質劣化の様子を確認できるが、上のサウンドスペクトログラムを見れば -m s で非常に悪いことが起こっていそうなことをさらに容易に確認することができる。