HDD に音楽 CD を突っ込んで PC をジュークボックスに仕立てる

ようやく最近になって CPU パワーや HDD 空き容量あたりの環境が整ってきたので、手持ち CD のリッピング作業に勤しんでいる。ソフトウェアは CDDB アクセスからリッピング+エンコードまでボタン一つでお手軽な Grip を利用することにした。

Grip の設定

そのままでは Grip が作るファイル名が utf8 で化けるので README.Debian にあるように .zshenv あたりで以下の環境変数をセットしておく。

G_FILENAME_ENCODING=@locale
export G_FILENAME_ENCODING

「設定」→「エンコーダ」→「エンコーダ」→「ファイルの書式」は http://on-o.com/page/diary/20051003.html#p01 の設定を拝借して

~/music/%A/%d/%t - %A - %n.%x

に変更。空白が入ってるのがちょっと気持ち悪いけど、どうせ日本語も混じるんだし、まいいか、と。ならば毒喰わば皿までってことで「設定」→「その他」の

  • 「ファイル名の半角英字を小文字にしない」
  • 「ファイル名に日本語(EUC-JP)を使用する」
  • 「空白をアンダースコア(_)に変換しない」

に全てチェックを入れ、「ファイル名として許可する半角記号」を

!"#$%&'()*+,-.:;<=>?@[\]^_`{|}~

と、/ 以外のすべての記号を許可してやる。

[追記:2006-01-12] DigitalDJ を利用する場合は " も含めちゃマズいことが判明

楽曲情報の管理

これまで CD データの検索は CDDB からもってきたファイルを HTML に変換し、それを namazu にかけるといったことをしていた。なんか今更それもアレなので、これを機に MySQL に楽曲情報をぶち込んでくれる Nostatic Software Dev Blog なるものを導入してみる。

MySQL の設定

MySQL サーバが必要になるのでインストールの後、まずは MySQL の root ユーザのパスワードを設定する。

shell> mysql -u root
mysql> SET PASSWORD FOR root=PASSWORD('hogehoge');

家の構成では SQL サーバと DigitalDJ を別ホストで動かすことにするので MySQL へのリモートアクセスを許可する。同一ホストで動かす場合は以下の手順は不要なはず。/etc/mysql/my.cnf を以下のように編集してリスタート。

bind-address            = 127.0.0.1 # ← ここを eth0 あたりのアドレスに書換える

更に DigitalDJ からの DB の初期化のため、MySQL への root でのリモートアクセスも許可してやる。

mysql> GRANT ALL ON *.* TO 'root'@'hostname' IDENTIFIED BY 'hogehoge';

DigitalDJ の設定

で、いざ DigitalDJ を入れてみたのだが、こいつがどうにも動かずにすぐセグる。MySQL に root でログインできないので DB の初期化ができないのだ。どうにもならないので Debian の bugreport を見にいくとどうやら既知の問題らしい。(http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=258263)

そこにもあるとおり、メンテナさんが http://www.famdijkstra.org/~tdykstra/debian/digitaldj/digitaldj_0.7.5-1_i386.deb を作ってくれているので入れてみたところこちらは問題なく動く。手順としては、

  1. [Config]->[Client] で SQL host, database, username, password を設定する
  2. [Config]->[Server] で MySQL の root パスワードを入力し、[Log in]ボタンを押す
  3. [Initialize SQL database]ボタンで DB を初期化する
  4. 先程設定した username と password、及び host(SQL サーバではなく、クライアント側のホスト名)を入力し [Add user account] をプッシュ

これでようやく DB の初期化とユーザの追加ができた。いったん初期化してしまえば MySQL への root でのリモートアクセスは不要なので切っておく。

mysql> DELETE FROM mysql.user where user='root' and host='hostname';
mysql> FLUSH PRIVILEGES;

また、Grip でエンコードした時に自動的に登録してくれるように「設定」→「エンコーダ」→「オプション」で「SQLデータベースに追加する」にチェックを入れておく。

日本語があああああ

これで一応準備完了である。あとはひたすら CD をトレーに突っ込みリッピング…と思っていたら、どうやら DigitalDJ では日本語が化けるようだ。それだけならまだしも日本語を含んだ曲をクリックすると

ddj: ../iconv/loop.c:425: from_euc_jp_single: Assertion `inptr - bytebuf > (state->__count & 7)' が失敗しました.

と曰い abort する orz

DB の中を覗いてみると filename が euc-jp で、title は utf-8 といった困った状態。SQL を叩いて title を euc-jp にしてやったところ Playlist 上での文字化けは直ったが、タイトルがスクロールする欄は依然文字化けするし、ほっとくとやっぱり落ちる。むむぅ…。

しかたがないので当面は洋盤のみを登録していくことでお茶を濁す。う〜むヨワすぎ。どうにか設定とかで逃げられればいいんだけど DigitalDJ を弄るしかないのかなあ。でも DB 登録文字コードの問題もあるし…。情報求ム。