2012-09-09

調べたい事

Android端末での再生(つーかHDP-R10やDX100)を又聞きから考える。

手元のNW-Z1000で、PowerPlayerをつかってALACやFLACを再生していると、1時間に1回は音が一瞬途切れる(もしくはもにょる)。おそらく、ストリーム再生してると、だんだんゴミがたまって行って、目いっぱいたまったあたりで、ガベージコレクションが走り、それが一定時間スレッドを止めるので、音が途切れる、と考えている。

結局の処、AndroidはJavaVM上で動いてるよーなもんであり、ガベージコレクションからは逃げられず…となると、CPUパワーを非常に高くして(コア数増してもダメぽ…NW-Z1000はデュアルコア機だが、音切れは発生する)単位処理時間内にガベージコレクションが終わるようにする必要がありそう…もしくは実装メモリを小さくして、ガベージコレクション自体の時間を短くする(代わりに回数が増えるが)なんかの対策が有効そうだなぁ…と。

んで、HDP-R10とかどーしてんだろ?って持ってる人に聞いたら…
・デバッガでみたら、Linux core 配下のプロセスと、Android 配下のプロセスが再生中は稼働してるらしい。

って話を聞く。ガベージコレクションの呪いから逃れるには、Android上では何も動かさずに、Linux core 上のアプリのみでファイルを読んで再生、できれば大丈夫そうなんだが…

ただ、いろいろ疑問が
・他のプレイヤー(Power Playerとか)から再生できるってことは、Android の API 経由での再生はできるっぽい。
・FLACなんかが再生できたり192/24が再生できるって事から、Android の Audio 関連 API 周りは拡張されている、もしくは、別の API が用意されている。
・サンプルレート変換もできるみたいで…これもどこでやってんだろ?

Linux core 配下のは DAC へのドライバで受け取ったデータをバッファリングして転送してるんだと思うが、ここが直接ファイルシステムのデータファイルを読んでいれば、Android のガベージコレクションの影響を受けずに再生できそう。ただし、そうなるとドライバでFLACなんかの展開や、サンプルレート変換処理を走らせる必要がある。あと、ストリーミングなんかのネット経由のデータを再生するのにも困りそう…

Android側のアプリで、ファイルシステムからのデータ吸い上げをやって、APIに投げているんだとすると、ガベージコレクションの影響は避けられず。

んー、どっちでなにしてるんだろ?

Linux core 上で動いてる奴は、ライブラリリンクとかしてるんならGPLでソース公開を依頼できる、のかなぁ?Android上のはapache2.0ライセンスなので、非公開にできるとは思うが…

0 件のコメント: