元ぷろぐらまあの日々

android.media.AudioTrackクラス

色々と調べていてこんな便利なクラスがあることを知った。

APIレベル3から存在していたようだからかなり初期からサポートされていたようだ。

低レベルオーディオサポートAPIクラスであり、バイト列を直接書きこんでハードウェアを叩くイメージで使うらしい。

Androidの開発本はそれなりに出版されているが、マルチメディア関連といえばMediaPlayerクラスしか書かれていないものばかりで(買ったもの、立ち読みしたもので、このクラスに触れているのもは日本語書籍で見たことなかった)がっかりしていた。

MediaPlayerクラスはファイルやURLを指定して、Play()とすれば再生できるし、細かいことも考えることは必要ない。OSのバージョンによってサポートされるファイル(エンコーダ)が決まるなどなど便利といえば便利なのだが、イコライザ、ビジュアライザが実装されたとはいえ、それはOS2.3からのこと、それ以前のバージョンで実装するにはMediaPlayerを使ったら無理、ということで他の方法を探していたのだ。

AudioTrackクラスにはバイト列を流せばいいのだから、Windows APIで大昔(MP3が世の中に出てきた頃だから12年以上は昔)に書いたプログラミングの方法が役に立つと思う。

エンコーダを用意すればOSバージョンによらずサポートファイルを用意できることになる。

バイト列(Waveファイルストリーム)の状態でイコライザの操作を挟むことができるのなら実装できるだろう。

あとはUIに対してどこまで反応させられるか、という課題だけだろう。

多分、ギャップレスもこのクラスを使えば実現可能だ。ファイルの切れ目を意識せずに、再生バッファが空になる前に次のファイルのデータを流しこんでしまえばいいと思われるからだ。ユーザが操作したときのことはまた別途考える。

まだ、テストコードも書いていないので、全く未知数だが、実験する価値はあるだろう。というか作りたいアプリケーションにはこれしかないと思われる。納期はないからゆっくりやる。

モバイルバージョンを終了