地味にやって見ることにした

昨日のfoobar2000、foo_playcountハックの続き。

コマンドラインからfoobar2000を操作する方法があることがわかった。バッチファイル、vbsなどを使えばいろんなことができるだろう。ただし、それを使ったとして、「ID」の抽出を自動でやるためには、

  1. アーティスト、アルバム、曲名などをキーにしてトラックを指定する
  2. 指定したトラックのPlaycount Statistics Exportコマンドを実行する
  3. 出力したXMLファイルのファイル名称は最初にトラックを選択した時のキーから判別できるものにしなければならない

この3つを自動化しなければならない。まず、現時点では一点目がわからない。時間をかければ見つかるかもしれないが、とりあえず保留。2番目はコマンドラインから任意のメニューに存在するコマンドが実行可能とあったので出来るであろう。ただし、メニューを選択した時にダイアログボックスが開くもの(今回はそれに該当するし、ファイル名を入力しなければならない)に対しての処理方法はドキュメント(Wiki)にはなかったし、もしそれがあったとして、ファイル名を選択している対象のトラックのメタデータからTitleFormattingでも使って作れるのか?という問題が出てくる。

そこまでする価値はあるのか?という疑問が出てきた。それなら、地味に行こうではないか、という方向転換である。いくら自分のiTunesに18000以上のトラックが存在するからといって、一日で全部聞くわけではない。自宅サーバでの履歴統計をみれば、月当りにすれば最近は3500~4500トラック(重複があるから回の方が単位としては適切かもしれない)程度である。日に直せば100~150前後になるだろう。だったらそのペースで手作業で調べて移行していけばいいのだ。

ということで、スクリプトを作ることにした。

今日作ったのは、先日利用させてもらった、foo_customdb向けにSQLiteデータベースを作成するRubyスクリプトを改造した。Rubyなんて自分で使ったことはないので文法なんてさっぱりわからない。ただスクリプトなので書かれたものであればやっていることはわかる。複雑な処理は何もしていないし、iTunesにアクセスすればCOMを使うのだから取得できる情報やオブジェクト名称・階層などはどの言語で書いても同じものになる。

元のスクリプトが吐き出すSQLiteのテーブル形式はfoo_customdbに合わせた形式になっていたので今回は独自形式に変更した上で更に仕様変更を加えた。

  1. 1トラックをデータベースの1レコードに対応させる
  2. トラックの識別はオリジナルをベースに、曲名、アルバム名、アーティスト名、トラック番号、ディスク番号とした
  3. テーブル作成部分を別スクリプトに分離
  4. (まだうまくいくか現時点ではわからないが)トラック識別をキーにして検索、存在したものについてはレート、再生回数、最後に再生した日時を更新していく

この仕様であればiTunesのトラックオブジェクトから必要な情報がSQLiteデータベースにすべて入ることになる。また、上記リストに書かれていないカラムとして、foo_playcountの「ID」を格納するカラムを用意した。現時点では手段がないから手で更新していく。

次の段階は、「ID」が入力されたレコードを対象に、foo_playcountのインポートに使えるXMLファイルを出力するスクリプトを書くことである。対象はレート、再生回数、最後に再生した日時。値の変換仕様は昨夜書いたブログエントリにあるからコードにするのは簡単だろう。

ここまできたらどんだけ泥臭くてもやってやる。

コメント