foobar2000の自作コンポーネントのiPod連携がうまく動作しない。
といっても、データの取得とローカルデータベース(表示用)の更新、自宅サーバへのデータ送信までは動作している。
その後に画面のリフレッシュができないのだ。
foobar2000のトラックに関連するデータ(Title Formatting)をプログラムで変更した場合、強制的にリフレッシュをかけることはできる。実際に、直接foobar2000で再生しているときにはそれを行なっている。
が、そのためには、SDKが使う、メディアハンドルというものが必要だ。再生時にはそのハンドルが渡ってきているので、そこからメタデータ(タグ情報やメディアファイルのパスなど)を取得して使うことができる。
しかし、iPod用のコンポーネント、foo_dopのSDKではインタフェース上はこのメディアハンドルがiPod上のファイルへのものと、ローカル(PCのHDDの意味)ファイルのものと2つ用意されているが、有効なのはiPodのファイルのものだけなのだ。最初に作ってデバッグ時に確認したが、ローカルファイルのものはNULL(無効)だったし、ソースにもinvalidと書かれている。
それなら、とfoobar2000のSDKのソースを眺めていたら、ファイルパスからメディアハンドルが取得できることがわかった。幸いにして普段使っていないのだが、SQLiteデータベースにファイルパスをiTunesから取得して格納しているので、更新したレコードに対応するファイルパスをデータベースから取得できる。
そこからメディアハンドルを取得して画面をリフレッシュすればいいだろう、と考えた。回り道だけれど、ドキュメントも何も無いし、他に方法が思いつかない。パフォーマンス的にもそれほど悪くはない。
で、作ってみたが、iPodを使う関係上いきなり本番での動作確認になった。が、動かない。固まったり、落ちたり、データベースが更新出来なかったりはなかったが、画面はリフレッシュされなかった。
最近、復活させた3G iPodの時計が電源を入れるたびにリセットされる現象の確認とあわせて、開発機+3G iPodでテストをするしかなさそうだ。
トライ&エラー。小さいところでなく、新機能を追加したいのだけれどなぁ。
コメント