kscdでもタイトルが表示されるCDもいくつかあります。
こうなると悪い癖で、当初の「音楽CDを作業用のBGMにする」という目的から脱線して、音楽CDの処理回りをあれこれ調べ始めることになりました(苦笑)。
さまざまなCDDB
kscdを手動で起動してみると、「タイトル不明」となるCDでは、ターミナルにこのようなメッセージが出力されていました。
一方、タイトルが表示されるCDでは、こういう形で大量のデータが送られてきます。
この結果を見ると、kscdで表示されるタイトルはMusicBrainzから入手しているようです。そこで、musicbrainzをキーワードに調べてみると、CDDBと呼ばれるサービスにもいくつかの種類があることがわかりました。
最近のPC環境では、音楽CDを入れるとそのタイトルやアーティスト名、各トラック名などが表示されるのを当然のように感じてしまいますが、本来、音楽CDには、それ以前に普及していたLPレコードなどと同様、音の情報(をPCM形式でディジタル化したデータ)しか入っておらず、アルバムやアーティストの名前などの情報は含まれていません。
そのため、アルバム名やアーティスト、トラック名などのタイトル情報は、音楽CDとは別に管理する必要があります。そのために用意されているのが、CDDB(Compact Disc DataBase)と呼ばれるインターネット上のサービスです。
CDDBには、それぞれの音楽CDごとにアルバム名やアーティスト名、アルバムに含まれる各トラックのタイトルや演奏時間などの情報が登録されており、音楽CDの特徴を元に計算されるdisc-idをキーとして、それらのタイトル情報を検索することができるようになっています。
このCDDBサービスには大きく分けて商用のサービスとフリーのサービスがあり、商用サービスでは、米国ソニーの子会社となっているGracenote社が最大手で、iTunesやSonicStageといった商用ソフトウェアは、ほとんどGracenote社のサービスを利用しているようです。
もともと、このCDDBサービスは、フリーなソフトウェアCDプレイヤー、xmcdの機能として開発され、当初はフリーなサービスとして利用できました。その後、開発者たちがCDDBサービスを企業化し、Gracenote社に売却、後にGracenote社はデータベースの仕様を変更して、ライセンスを得たアプリケーションからしか利用できなくしたそうです。
一方、当初はGPLに基づいて公開されていたCDDBデータベースを引き継いで、従来通りの仕様でフリーなサービスを提供し続けているfreeDBというCDDBサービスがあります。また、今回参照しているMusicBrainzというサービスは、フリーでサービスを提供しつつ、freeDBよりも高品質な情報の提供を目指したサービスだそうです。
そう言えば、KDE-4.7.1をビルドする際にlibmusicbrainzというライブラリを要求されたな、と思い出して、手元のソースコードを調べてみると、freedbにアクセスするためのlibcddbと、musicbrainzにアクセスするためのlibmusicbrainzの2種のライブラリがありました。
freeDBとMusicBrainz
freeDBとMusicBrainzは、共に音楽CDのタイトル情報を提供するデータベースサービスですが、freeDBがオリジナルのCDDBサービスを引き継いで生まれ、従来のデータとの互換性を重視したサービスなのに対し、MusicBrainzは後発で始まったサービスなこともあって、データの互換性よりもオリジナルのCDDBサービスの欠点を改良することを重視しています。
両者の最大の違いはタイトル情報にアクセスするためのdisc-idに現われています。disc-id とは、世界中に何百万種類と存在する音楽CDを識別するための情報です。
異なるCDには異なるdisc-idを振る必要があるし、同じCDでは再版等でプレスが多少異なっても同じdisc-idを振る必要があります。また、CDDBサービスが生まれたのは1990年代の前半で、当時のPCの能力ではCDに記録されている膨大な量のデータを迅速に処理することは不可能でした。そのため、CDDBサービスでは、音楽CD上に記録されているそれぞれのトラックの位置の情報を元にdisc-idを生成することにしています。
オリジナルのCDDBサービスでは、音楽CDの全体の長さと各トラックが始まる位置の情報を元に独自のハッシュ関数を使って"000a9f10"といった8桁のdisc-idを生成し、そのdisc-idをタイトル情報の検索に使っています。残念ながらこの8桁のdisc-idでは世界中に何百万種類と存在する音楽CDに対して十分な識別力がなく、同じdisc-idを持つ音楽CDが複数存在しています。そのため、この方式のdisc-idを使い続けているfreeDBサービスでは、disc-idに加えて音楽の「ジャンル」という概念を導入し、両者を合わせてそれぞれの音楽CDを識別するようにしています。
一方、後発のMusicBrainzでは、元にするデータこそオリジナルのCDDBサービス同様に音楽CDの全体の長さや各トラックの位置情報なものの、より識別力を高めるためにそれぞれのデータをSHA-1ハッシュ関数を通した上でbase64エンコードした、"OMNbP0JKd_ublN4gER5KDPkxIx4-" といった28桁のdisc-idを用いています。この28桁のdisc-idならば世界中に存在している音楽CDを一意に区別できそうですが、後発な分、MusicBrainzに登録されている音楽CDの情報は、元々のCDDBサービスを引き継いだfreeDBに比べるとかなり少ないようです。
このような特徴を考慮してか、KDE-4.7系では「システム設定」の「ハードウェア」のうち、「マルチメディア」の設定部分で、MusicBrainzとfreeDB、それぞれを使うかどうかの設定ができるようになっていました。
この設定に従って、KDEの標準ファイルブラウザであるdolphinは、音楽CDを開くとfreeDBにもアクセスしてタイトル情報を得ているようです。
それなら、なぜ同じKDEに含まれているkscdが、dolphinでは表示できる音楽CDのタイトルを表示できないのでしょう? このあたりになるとドキュメント等よりもソースコードを見た方がよさそうです。
kscdはkdemultimediaパッケージに含まれているので、kdemultimedia-4.7.1/kscd/ 以下にあるソースコードを調べてみると、何のことはない、kscdはKDEのシステム設定とは無関係に、直接MusicBrainzを参照するようなコードになっていました。
ありゃりゃ……、と思って、もう少し調べてみると、kscdのREADMEファイルには、kscdはKDE-1.0のころに開発されたソフトウェアで、その後、長く放置されたままだったのを、最低限の修正のみで現在のバージョンにしている、といった記述がありました。
どうやら、KDEは4.7系になってシステムレベルでCDDBサービスに対応するようになったものの、kscdはその機能に対応しておらず、自前でMusicBrainzのみを参照するままになっているため、freeDBも参照するdolphinの表示と齟齬をきたす結果になっていたようです。
まぁ、CDプレイヤーにとってアルバム名や楽曲のタイトルを表示する機能は「あれば便利」なレベルで、一昔前のハードウェアCDプレイヤーだと再生時に表示されるのはトラック番号と経過時間だけだったし、元々BGM用途だったので「タイトル不明」が問題になるわけではありません。しかし、本来使えるべき情報がきちんと扱えないのは少々気に障るところです。そこで何かいい方法がないかとあれこれ調べてみることにしました。