MIDPなOggプレーヤーは作れるか?
まともでSymbian SignedなOggプレーヤーがない*1んで、702NK時代に作ったOggライブラリが705NKでは再生できない。
で、Ogg VorbisデコーダからすべてMIDPで作れないかって話。
結論から言えば、現状では残念ながら無理なようだ。
いろいろ調べてみると、Tor-Einar JarnbjoさんがJ2SE向けに公開しているJ-OggをJ2ME用に移植したというのを某所で発見。そこで、ご本人にメールしたところ*2開発中のJ2ME用Oggデコーダ(通称MEOgg)をいただけたので、試してみた。
現状、大きく見て問題点は2点。
デコード速度が遅い。
具体的には、OggファイルをWAVEにリアルタイムでデコードしつつ、それをJ2ME上のPlayerで再生することになる。
CD音源のWAVEファイルは16bit、44100Hz、2chだから、転送速度は16*2*44100=1411.2Kbps=176.4KB/s。
デコードはこれより速くないといけないんだが、現状いただいたMEOggをそのまま実行すると70KB/s程度。おかげで音が伸びる(笑)自前でリングバッファを実装すると120KB/s程度までは高速化できたけど、今度は音が途切れる。
ちなみにこれはPC*3上のエミュレータでの話。それでこの程度なんだから、ARM220MHzしかない705NKでは到底実用にならないだろう。
J2MEのPlayerがCD音源のWAVEを再生できない。
エミュレータではなく、実機705NKでの話。
MIDPのPlayerインスタンスはパス指定、InpueStream、DataSource*4から作れる。が、テストアプリ*5で実験してみると、パス指定以外でWAVEファイルを利用するとPlayerがPREFETCHEDにならず、そのうち例外を吐く。MEOggで試してみると『処理できない例外が発生しました。アプリケーションを終了しますか?』となる。つまるところ、デコード速度が上がったところで、この仕様が改善されないと再生は無理だということだ。
というわけで、結構がんばったつもり*6だけど、かなり時間の無駄だったっぽい。
まあ、キューやリングバッファ、ストリームのバッファリングのアルゴリズムが勉強できたことなど、個人的に収穫はあったから、良しとしよう。
誰かまともでSymbian SignedなOggプレーヤー作ってくれー(他力本願)
【追記】と思ったらSymbianがコーデック作ってた。
が、Symbian OS v9.4以上じゃないといけないから、v9.1である705NKには入れられない(´・ω・`)