元ぷろぐらまあの日々

foobar2000での再生履歴などのデータ管理

先日、foo_customdbコンポーネントを利用し、ネットで見つけたRubyスクリプトを使って、このコンポーネントが使うSQLite3のデータベースファイルをiTunesから作成して表示させた。使い始める前に最新にこのデータベースを作りなおせば万事OKだと思われた。

しかし、foo_customdbは開発終了になっているらしいのだ。開発者のブログでも確かにもうコンポーネント開発はしていないようだし、2ch(foobar2000の情報はググッても基本的に公式wiki、個人ブログと2ch程度しか日本語情報は存在しない)でも最近(去年、今年くらい)はそうなっていた。で、公式(本家といったほうがいいかもしれない)のfoo_playcountというのが最近のオススメらしいのだ。

が、これはSQLiteを使っているのではなく、専用バイナリを使ってデータを管理していて、XMLでのデータのインポート/エクスポートに対応している。しかし、iTunesからの正式なデータのインポート方法が確立されているわけではなく、諦めたという情報もあり、海外の掲示板でも過去のバージョンでは一部iTunesのXMLからデータを抜き出して、加工して、などという方法が書かれていたが、私の場合、iTunesには18000曲以上あるので、インポート用のXMLの作成に手作業はありえない。

で、わかったのは、次のことである。

なので、ハックするしかない。で、やってみた。一気にやると大変なので、一アイテム選んだ。一アイテム選んで、そのアイテムのPlayback Statisticsを右クリックメニューからXMLに書きだしてみた。それに書かれている「ID」は少なくともその選んだアイテムの「ID」なので、そのアイテムに対してインポートのテストができる。今日は、インポートしたいデータを「ID」がわかった時にどうつくるか?をテーマにした。全アイテムの「ID」を集める作業は別途考えることとした。仕事で言う「ペンディング」である。

私がインポートしたいのはiTunesからの、レート、再生回数、最後に再生した日時の3つである。これは、foo_playcountコンポーネントでは、Rating、Play Count、Last Playedに対応する。XMLインポートをメニューから選択した時にチェックする項目である。XMLファイルでのキーはそれぞれ、Rating、Count、LastPlayedになる。これはトライ&エラーで確認した。

でそれぞれ設定する値である。面倒なので簡単なものからいく。Countはずばり、iTunesから回数の数値を拾ってきてセットすればいいだけなので、何も考えなくていい。変換する必要はない。

Ratingは悩んだ。iTunesでは0~100の数値を内部で持っていて、星1つが20の重みを持っている。星3つつけた曲のRatingの数値は60の値として取得される。foo_customdbコンポーネントでは星の数がSQLiteデータベース内部での数値に対応していたので、0~5に変換すればよかった。iTunesでGUI設定している限りは端数は出ないので、20で割るだけだったので良かった。しかし、何を設定してXMLインポートしてもfoo_playcountコンポーネントでは反応しない。わからないときは逆をやればいい。レートなし(設定なし)から星1つ、2つ、3つ、4つ、5つのそれぞれの6つの状態を作って6回XMLエクスポートして数値を読んだ。すると驚くべき数値が出てきた。

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