昨日はjaadのシフト演算についてうんちくをたれて、バグではないかなどと偉そうなことを書いた。
まぁ、それはそれで消さないでおいておく。
で、ライブラリが使えないのは問題だし、修正するにしても方向性が必要。本当に使えないのか?についても検証が必要。
ということでまずはネット検索から始めた。最初はJavaではない一般的なOpen Source AACデコーダであるFAAD2をダウンロードした。Cで書かれている。ソースを流して見た。しかし、すぐに理解できるものではないし、jaadと近いものであることがわかったくらいだ。ビルドされたものはライブラリしか見つからなかったので、テスト用の再生アプリは自分でビルドしないとテストも出来ないので保留した。
検索を継続すると、JavaTunesというアプリを見つけた。Javaで作られたいろいろな音楽ファイルを再生できるアプリらしい。Windows向けにはexeファイル(実行形式ファイル)も配布されていた。これのAACデコーダにjaadが採用されていた!!!ということで検証用にダウンロードしてみた。結果、iTunesでデコードしたファイルがこれで再生できた。jaadが決してバグってはいないことは検証できたことになる。ということは使い方の問題、ということに最低限の切り分けができた。
しかし、この、JavaTunes、ソースが配布されていないので使うことはできても、ライブラリの使い方の参考にはならない。ので、ここから先の参考には全くならない。使っているライブラリは、自分が今後使おうとしていた他のデコーダなどが列挙されていたから、選択に問題はなさそうだという程度にとどまった。
ということで、自分で疑っていろいろいじってしまったjaadのソース(Android用にコンパイルを通すために修正したものではなく、Windowsでのテスト用ツリー)を一旦削除して、昨夜ダウンロードした最新ソースをeclipseにインポートする。そして、再生を試みる。
jaadにはいろいろなテストツールというか参考用のコマンドライン実行アプリ(エントリポイント)がついてくるが、そのなかのPlay.javaを選択、それにiTunesで作ったAACファイルを渡す。しかし、昨日までと同じエラーになる。しかし、コマンドラインオプション、-m4pを追加すると音が鳴った。これが肝だったようだ。このオプションで、Play.javaの中で、decodeM4P()か、decodeAAC()かに別れてデコードが実行される。昨日まではAACファイルだからとdecodeAAC()ばかりを追っていた。しかし、docodeM4P()が正解だったようだ。
ここからの流れを追いかけて、この流れの中で呼ばれるメソッド群をAndroidでコンパイルできるようにして、、PCMのバイト列が得られればAudioTrackクラスを使って音を鳴らすことが出来るはずである。
まだ、入り口しかわかってないので、これからソースを追いかける。
コメント