SSブログ

5.1ch WAVEのチャンネル順 [ソフトウェア/PC関係]

何となく,5.1chのWAVEファイルって,何か特殊な形式のものかと思い込んでいたのだが,何のことはない,ただの6chのWAVEファイルだった。ステレオのWAVEファイルは2chなので,1サンプルあたりのデータが3倍になっただけのこと。そうと分かれば扱いは至極簡単である。

ところが厄介な問題がひとつ。6つのチャンネルがどういう順で並べられているかということ。WAVEファイル・フォーマットでは,チャンネル順まで厳密に定義されているわけではないらしい。なので,ツールによってまちまちだったりする場合があるのだとか。一応Microsoftでは推奨されるチャンネル順として,次のようなものを提示している。

1Front Left
2Front Right
3Front Center
4Low Frequency (LFE)
5Back Left
6Back Right

では今回使うツールはどうなっているのか。まず,5.1chのAACをデコードするのに使用するFAADの場合。5.1chのAACでは,内部で

1Front Center
2Front Left
3Front Right
4Back Left
5Back Right
6Low Frequency (LFE)

の順に並んでいて,FAADが使っているライブラリ(libFAAD)でもその順でデータを返してくるようになっている。但し,FAADの内部(ソース・コードでいうと,audio.cのwrite_audio_16bit関数)でMS推奨の順に並び替えているため,違いを気にする必要はない。FAADに付属するGUIのインターフェースである,aacDECdropも同じである。

次に,5.1ch WAVEをチャンネル毎に分割するための,BeSweet/BeLightの場合。コマンドプロンプトから次のように入力すると,分割された6つのWAVEファイルが生成される。

BeSweet -core( -input "sample51.wav" -output "sample.wav" -6ch )
生成されたファイル名には,自動的に,C,FL,FR,LFE,SL,SRという文字列が付加されるのだが,「C=(Front) Center」,「FL=Front Left」,...なのかというと,どうもそれが怪しいという噂。ただ,Web上の情報だけだとどうもはっきりしない。そんな明確なバグなら,とっくに直っていてもよさそうだ。もしかしたら情報が古いだけかもしれない。というわけで,自分で実験してみることにした。自前ででたらめな6chのWAVEファイルを用意し,それがどういう風に分割されるのか見てみようというのである。

用意したのは次のようなデータ

2519349
赤枠で囲んだ部分が16ビットのPCMデータで,ch1から順に"01 01","02 02",となるように並べてある。6つに分割されたWAVEファイルにどのデータが含まれているかを見れば,対応が分かるという寸法だ。果たして,BeSweetで分割した結果は

ファイル名データ値チャンネル名
FL.wav01Front Left
FR.wav02Front Right
C.wav03Front Center
LFE.wav04Low Frequency (LFE)
SL.wav05Back Left
SR.wav06Back Right

となった。おやおや? 合ってるじゃん。Web上にある,チャンネル順が間違っているという情報は,FAADやaacDECdropが,チャンネル入れ替えをしていない前提のもののようだ。あるいは,古いバージョンではそうだったのかも知れない。少なくとも,今回使ったFAAD 2.6やaacDECdrop1.22なら大丈夫みたい。やっぱり情報というものは,自分できちんと確認しないといけませんな。

因みに,BeSweet v1.5b31では,FAADが出力するWAVE_FORMAT_EXTENSIBLEフォーマットのWAVEファイルを認識できないようなので要注意。まぁ,fmtチャンクがちょこっと大きいだけなのだけど。このくらい対応しといて欲しかった。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。