foobar2000への移行に時間がかかった幾つかの私的理由

およそ2ヶ月かかっただろうか?いろいろ試して、昨日、foobar2000を使い始めたが、ここまで来るのにいろいろなこと(もの)を試し、失敗し、作ってきた。

まず、foobar2000には、標準ではiTunesと違い、再生回数やレート、再生日時を管理する機能はない。これを何らかの方法で実現する必要があった。

まず、今一番メジャーなコンポーネントはfoo_playcountだろう。独自データベースを使い、XML形式でインポートもできる。使用も考え、インポート用XMLファイルの形式も解析し、Rubyでツールまで作った。約18500トラック(当時)のうち、約14000トラック強のデータは作ったのだ。

しかし、「最後に再生した日時」の記録タイミングが気に入らなかったので使うには至らなかった。このコンポーネントは再生開始から1分経過したタイミング(1分に満たない曲の場合は30%だったかな?)を再生完了日時として記録する。これは、foobar2000SDKのplayback_statisticsインタフェースの仕様なのだが、この仕様はiTunesとは違うので気に入らない。独自形式として受け入れるとしてもiPodで再生したものは、「再生完了時刻」を記録するはずなので一貫性がなくなってしまうのでよろしくない。

そのためこのコンポーネントは使うのを諦めた。スマートプレイリスト機能は欲しかったが使えなくなってしまった。

国産コンポーネントで、SQLiteデータベースに記録を残すfoo_customdbというコンポーネントもあり、現状、1.1系列でも動作するようである。これを利用するのがよさそうであったが、ソース非公開のまま更新が止まってしまっている。作者もその気はないようである。オープンソースならメンテするのだが。将来のSDK更新で動かなくなった時に使えなくなるのは痛い。

ということで、レートと再生履歴を保存するところから作らなければならなくなってしまった(勝手な願望)。しかも、foo_playcountの仕様が気に入らないのだから、playback_statisticsという「そのための」プログラミングインタフェースが使えない。そして、連続再生(プレイリスト再生)しているときに、トラック開始のイベントは発生するが、トラック再生終了のイベントが発生しない。途中で再生を止めて、別なトラックを再生開始する操作があるので、新規トラック再生開始=前のトラック再生終了ではないので、監視しなければいけなくなった。トラック再生終了でイベントを発生させることはできたが、その次の曲へ再生を続行することができなく、ポーリング方式で諦めた。

ということで、WindowsのしかもC, C++では使ったことのないSQLiteのプログラミングが入った上に、色々なコードを書かなくてはならなく、iPodとのインタフェース、C++でのHTTP通信(結果的にはfoobar2000のSDKにクラスがあった)など、必要以上にやらなければいけないことがあった。

と同時に、個人的に見た目(UI)をiTunesに近く、少しは遊び心を加えた見た目をとカスタマイズを調べたりしていて2ヶ月かかった。

mixiミュージック終了に合わせて、iTunes用のApple ScriptアプリとPHPサーバスクリプトの最低レベルのものをほぼ同期間で用意したのと思い出すと時間をかけすぎたとも言える。

細かい機能追加をしてできる限り使えるものにはしようと思う。まぁ、とりあえず履歴がSQLiteに残って、自宅サーバに送れてはいるようなので問題なさそうだが。レートが変更できないのは面倒だけど。

コメント