20:10

foobar2000: 02. foo_custominfo ドライブを移動したとき

foobarと並行してWMPを使っていたのは,WMPのサムネイルの描画とレーティング情報を残せることが理由だった.音楽再生プレーヤーを foobar に移行するとして,サムネイルは無理としてどうしてもレーティングはしたかった.結果的にレーティングすることはできるし,WMPのようにあるレーティング(たとえば,星3以上のすべての曲.ほかには星4以上のジャンルAAAのすべての曲.などなど)で新しいプレイリストを自動作成することもできるようになった.


foobar のWikiをみてもわかるように,いくつかのバージョンアップにしたがって使用できるプラグインが変化している.レーティングとプレイリストの管理という2点において,有用なプラグインが foobar ver 0.9.5.3 から使用不可能となっている.
foobar ver 0.9.5.3 以降においてもこれらの機能は置き換えができるようだが,制約条件も多い(レーティング情報や再生回数といった情報を外部のデータベースに格納することができない.プレイスト作成機能が以前のバージョンのものよりも弱い.などなど)ので,foobar ver 0.9.5.2 を使う.

今回の主題
  • あるPCで設定したレーティングされた音楽ファイル情報を含むメディアライブラリを別のPCに移動した場合,データベースはどのようすれば新しい環境に移行できるのか?
次のような手順で作業をする.
なお,移行にともなって次のような条件を加える.

* ドライブレターは変わるが,それ以外のディレクトリ構造は変えない

ディレクトリ構造も変わる場合は,もともとのデータベースにある曲目とレーティング情報などを対応づけるマップをつくってから新しいディレクトリ構造を創り,各音楽ファイルを列挙して,以前の曲目との対応関係を処理してから,レーティング情報を割り当てる.その後,CSVなどの形式でデータベースに格納するデータを創ってから,SQLiteの形式にインポートする.
まぁとにかく面倒なわけで,一度レーティングを行った曲に関しては,ディレクトリ構造は変化しないようにする.でないとレーティング情報が消える.

foo_custominfo によって創られるデータベース custominfo_sqlite.db は,XPの場合は 「C:\Documents and Settings\user-name\Application Data\foobar2000」ディレクトリの中に格納されている.
このデータベースは,SQLite というSQLで書かれている.いくつものGUIで処理できるソフトがあり,ここではSQLite Database Browser ver1.3 というソフトを用いた.インストールが不要なうえ,SQLのクエリを発行して,先にあげた処理を行わせることができる.

このソフトで,custominfo_sqlite.db を読み込ませると次のような情報がみえる.


テーブル名:quiktag
フィールド名:url, subsong, fieldname value





ここで,ファイルの場所は,「絶対パス」で「url」フィールドに格納されている.
たとえば,「file://W:\MusicLibrary\music01.mp3」.
以前の環境で音楽データなどを外付けのドライブWに格納しているとしたら,urlにはいっている曲目はすべてfile://W:\ となっている.新しいPCにおいて MusicLibrary の場所が CやDになったとするならば,url フィールの値をすべて変更すればよいことになる.

いま,新しいドライブの場所が Cドライブだとするなばら,次のようなSQLを Excute SQL タブの SQL String に書いて,Excute query ボタンを押せばよい.

UPDATE quicktag SET url = 'file://C' || substr(url,9 ,1000)
WHERE url like 'file://W:%'

うちは全然SQLわかりませんwww/(・ω・)\知り合いの子にネットで聞きながら書いてもらったもの.なにやら正規表現が使えないくさくて面倒な書き方になったとのこと.
まぁどんなんでも自分にできないことを数分ですぱっとやれるってのはすげーことです(・ω・)

データベースを新しいPCのほうに移行して,foobar を立ち上げる.最初はエラーとなるが,foobar のメディアライブラリーのパスを書きかえればこれまでにつけたレーティングや再生回数といった custominfo によってつけられたタグを参照できるようになっているはず.

【その他 テストサンプル】

SELECT 'file://C' || substr(url, 9, 1000)
FROM quicktag1
WHERE url like 'file://W:%'

0 コメント:

コメントを投稿