Nanashi-softプログラマ専用BD-J


◇BD-J-BDMVサウンド再生方法-

BD-Jには、標準で BDMV形式サウンド再生があります
普通に WAVか AIFFにすれば良いものを特殊な形式が使われている為に変換する必要があります

HD Cookbookにて作成されたツールが利用可能なのですが、バグっていて動作しません(2008/8/27現在)
そこで、ツールソースの書き換えから必要になってきます

○BDJSoundGeneratorを書き換える

HD Cookbookサイトの以下の場所にあります(2008/8/27現在)
https://hdcookbook.dev.java.net/

Browse Sourceの、
/tags/hdcookbook-66/tools/soundgen/src/net/java/bd/tools/BDJSoundGenerator.java
リビジョン 322をベースに
mainメソッドの
> AudioFormat bdjFormat = new AudioFormat(
> BD_J_SAMPLING_FREQUENCY ,
> BD_J_SAMPLE_SIZE,
> /* mono or stereo */ AudioSystem.NOT_SPECIFIED,
> /* signed */ true,
> /* big-endian */ true);

> AudioFormat bdjFormat = new AudioFormat(
> BD_J_SAMPLING_FREQUENCY ,
> BD_J_SAMPLE_SIZE,
> /* mono or stereo */ 2,
> /* signed */ true,
> /* big-endian */ true);
に書き換えてコンパイルし直す

それを、soundgen.jar内の、BDJSoundGenerator.classと差し替える

○48kHzの WAVを作る

BDJSoundGeneratorで読み込める形式は決まっている
wav 48kHz,16bit,ステレオで、4MB以下

4MBと言うのは、BDMVの仕様で決められているらしいので、それ以上が再生できたとしてもその機器の機種依存と言う事になる

WAV状態で既に特殊なフォーマットなので、こういうのはコマンドラインツールでしか作れないだろう
・sox
http://sourceforge.net/projects/sox/

変換可能な wavを生成するオプション例
sox 元ファイル -r 48000 -c 2 -2 -s -L 出力ファイル.wav

例)
sox songA-piano.ogg -r 48000 -c 2 -2 -s -L songA-piano.wav


ファイルサイズに制限があるのは本当らしい
PS3 BD-Jにて、15MBが再生できない事を確認済みです

○BDMV形式に変換

こんな感じで、特にオプションも無く、ただ通すだけで BDMVファイルが出来ます
java -cp soundgen.jar:tools.jar -jar soundgen.jar 元ファイル.wav 出力ファイル.bdmv

○プログラム

再生は、JMFを使っておこないます

try{
  MediaLocator locator= new MediaLocator(this.getClass().getResource("sound.bdmv"));
  DataSource playingDataSource= Manager.createDataSource(locator);
  Player player= Manager.createPlayer(playingDataSource);
  player.start();
}catch(Exception e){}


あまり良くわからずにリソースに置いて再生可能な事が判明しましたが、仕様通りであれば AUXDATAフォルダの中に sound.bdmvと言うファイル名で置くのが正しいようです
機器によってはそうしなければ再生できないかも知れないので、覚えておくと良いでしょう


TOPプログラマ専用BD-J

メイナの実験場~小生意気な感じにしてみました~