前回の投稿で、外部ストレージのMusicフォルダ以下のm3u8プレイリスト一覧の取得に成功し、そして、それらをUAMPのメディアソースに追加することには成功していた。
しかし、再生してみると、アルバム単位で止まってしまう現象が起きたので、その解消と今後の課題について書いておく。
buildPlaylistファンクション
commonの下の、UampPlaybackPrepare.ktにbuildPlaylistというファンクションがある。ここがキモになる。
private fun buildPlaylist(item: MediaMetadataCompat?): List<MediaMetadataCompat> {
if (true) {
return musicSource.filter { it.displayDescription == item!!.displayDescription }
} else {
return musicSource.filter { it.album == item!!.album }.sortedBy { it.trackNumber }
}
}
if文で囲ってあるが、元の状態は、else以下のモノである。albumが等しいものをフィルタリングして、トラックナンバーでソートしている。そのせいで、プレイリストで再生してもアルバム単位で止まっていた。
これを、if以下のモノ(有効な方)に切り替えると、displayDescriptionにプレイリストを入れているので、ここではプレイリストが等しいものというフィルタリングだけと読み替えて欲しい。すると、プレイリスト単位の再生ができた。
その代わりに、UAMPの最上位からアルバムを選んでいっても、アルバム単位で再生が止まらないようになってしまった。UAMPのメディアソースの作りではこの辺りが限界のようである。
メディアライブラリの実装
これ以上は、メディアライブラリを独自に実装しなければならなそうである。PowerampやGonemadがスキャンして内部で利用しているキモになっている部分である。その実装は一朝一夕ではできなそうである。構造を考え、再生モードによる止まる条件の設定(今回の問題)、速度の問題やメモリなどの消費量にも気を使わなければならない。なんとかしてみようとは思う。
まとめ
UAMPは通知の利用方法の点でまだまだ調査するところがあるので、調査は続行する。さらに、スキップや戻しなどの実装も行いたい(通知にはボタンがあるが)。それらをくりあしてから独自メディアライブラリの実装に入ろうと思う。
コメント