先日のエントリで仕様をざっくりと書いたコンポーネントが完成した。開発環境ではiPodで再生したトラックが一部処理されないという現象が出て再現性がなく困っていたのだけれども本番環境では現象が出ない。自分で使うには致命傷にならないので再現するのを待ってみる。
iPod連携で、ローカルトラックへのポインタの取得であるが、実装することができた。速度的にもメディアライブラリ全体で23,000~24,000トラックある状態で特に問題にならない速度が出ている。
実装は、
- メディアライブラリの全トラックのリストを取得
- ソートする(テンプレートを使ってタグを使った比較をしている)
- bserch(バイナリサーチ、二分検索か?)を呼び出す
という形で実装できた。サーチの時の比較もタグを使って一致・不一致の判定をしている。
二分探索を使うので次善のソートが必須になる。
これができるなら第一作の実装も見直せるかもしれない。
とこのコンポーネントの使用目的は、「古い再生順にソートされたプレイリストを作っておくこと」にある。最近聞いていないアルバムを再生したいのであるが、再生した日時を自作コンポーネントでSQLiteのデータベースを使って管理しているのだけれども、Library→Searchでは処理が終わらない。オートプレイリストを自分で実装するのも将来的には考えていたのだけれども、実装方法がわかっていないし作るのに時間がかかりそうだった。
そこで、再生したトラックを特定のプレイリストに追加していき、追加する前にプレイリストから追加対象のトラックを削除しておけば、積み重ねていくと古い再生順に先頭から使えるのではないか?という仕様検討をしたのである。
COLUMN UIを使っているので、メディアライブラリの全トラックを表示した状態で、自作コンポーネントで管理し表示している最後に再生した日時でソートした結果をプレイリストに保存して、先頭の余分なトラックを削除した上でこのコンポーネントを使い始めれば個人的目的は果たせていそうである。
シングルCDのインストなどもう二度と聞かないようなトラックは保存先のプレイリストから削除して、一度も再生しなければプレイリストに現れることもないので、iTunesのスマートプレイリストのようなものを実装したとして条件を細かく設定するよりはこちらの方が便利かもしれない、とも思っている。あくまで個人のピンポイントの用途であるけれども。
が、ピンポイントの要求を自作して拡張する、これがfoobar2000を使っている意味であり、プログラミングができる楽しさであろう、とつくづく思う。もう少し使ってバグが出なくて、気が向いたら公開しよう。
コメント