FLACという名の可逆「圧縮」音源

「FLAC形式の音声ファイルは元のWAVE形式にデコードできるから、音はWAVEファイルと同じはず」と思っている方。それは本当でしょうか?

FLAC.exeをダウンロードしてコマンドラインからヘルプ(FLAC.exe –explain)を表示させた経験のある人であれば、このようなメッセージを見たことがあるかと思います。

-0, –compression-level-0, –fast Synonymous with -l 0 -b 1152 -r 3
-1, –compression-level-1 Synonymous with -l 0 -b 1152 -M -r 3
-2, –compression-level-2 Synonymous with -l 0 -b 1152 -m -r 3
-3, –compression-level-3 Synonymous with -l 6 -b 4096 -r 4
-4, –compression-level-4 Synonymous with -l 8 -b 4096 -M -r 4
-5, –compression-level-5 Synonymous with -l 8 -b 4096 -m -r 5
-5 is the default setting
-6, –compression-level-6 Synonymous with -l 8 -b 4096 -m -r 6
-A tukey(0.5) -A partial_tukey(2)
-7, –compression-level-7 Synonymous with -l 12 -b 4096 -m -r 6
-A tukey(0.5) -A partial_tukey(2)
-8, –compression-level-8, –best Synonymous with -l 12 -b 4096 -m -r 6
-A tukey(0.5) -A partial_tukey(2) -A punchout_tukey(3)

一番左にある”-0″などの数字が、FLACエンコードする際に使用するFLACのレベルになります。そうして、その後ろに続くのがレベルオプションの詳細。たとえば、デフォルトとされているレベル5の場合、

-l 8 -b 4096 -m -r 5

という詳細を指定したのと同じ意味合いになります。

そこで、詳細の内容をもう少し見ていくと、

-l, –max-lpc-order=#
-b, –blocksize=#
-r, –rice-partition-order=[#,]#

のほか、”-m”や”-M”といった部分も出てきます。
それは、

-m, –mid-side
-M, –adaptive-mid-side

ということで、他の(不可逆)圧縮音源フォーマットでも見かける「ミッドサイドステレオ方式」のエンコードを選択できることがわかります。逆に言うと、レベル5を選択した場合は自動的に「ミッドサイドステレオ方式」でエンコードされていることになります。
参考までにFLACのドキュメントを読むと、「ミッドサイドステレオ方式」に変換したほうが圧縮率を高く取れ、また「ジョイントステレオ方式」とは違い可逆変換可能という記述が見られます。

ここで疑問に思うのが、「ミッドサイドステレオ方式」にしたものとそうでないものとで音の感覚に差が出るかという点。コマンドラインで1つずつエンコードし分けてもいいのですが非効率なので、GUIをつくってテストしました。

このアプリケーションでAdvanced Optionを有効にすると、レベル指定したときのオプション詳細を個別に変更してエンコードさせることができるようにしています。これで”–mid-side”を有効にしたものと無効にしたものを2本つくって、Windows Media Player(Xiph.Org Open Codecsを併用)で比較試聴。

結果、MP3形式で「ミッドサイドステレオ」を有効にしたときとそうでないときの違いに似たものを感じました。有効時はセンターに定位する音にステレオイメージが付属したような感じであり、無効時は強いステレオイメージに。
念のため、foobar2000でも同じファイルを比較再生してみると両者の差はほとんどなくなりましたが、「ミッドサイドステレオ」を有効にしたほうはわずかにセンター寄りの音が多く聞こえたような気がしました。

このように、再生機器による程度の差はあるのかもしれませんが、”-m”オプションの有無が再生音に影響を及ぼしている可能性を捨てきれないというのが、当方の考えです。しかし、「そんなはずはない」という方も多くいらっしゃると思いますので、追試をしたい方のために、カレントディレクトリが「FLAC.exeのあるパス」の場合のサンプルコマンド文字列を下に記します。

(レベル5ベースでミッドサイドステレオ有効の場合)

FLAC.exe -o “(変換後のFLACファイル名)” -l 8 -b 4096 -r 5 -m “(変換元のWAVEファイル名)”

(レベル5ベースでミッドサイドステレオ無効の場合)

FLAC.exe -o “(変換後のFLACファイル名)” -l 8 -b 4096 -r 5 “(変換元のWAVEファイル名)”