mp3のタグ操作ライブラリの比較

mp3のタグ(id3って言うんですね)を操作するためのライブラリを少し弄って、二つのライブラリの比較をしてみた。その二つのライブラリとは。。。

それぞれの長所短所を挙げ、改良の余地について触れようと思う。

ただし、今回タグの値の抽出だけに焦点を絞っていることに注意して欲しいです。

そもそもの背景

手元のmp3ファイルをしまっているディレクトリの構成が混沌としてきているため。
手元のCDから落としたmp3ファイルは、きちんと「~/mp3/(アーティスト名)/(アルバム名)/(トラック番号)-(曲名).mp3」となっている。
しかし、別の方法で手に入れたmp3ファイルはそうはいかない。いわゆるネットレーベルと呼ばれるものに属しているアーティスト*1の楽曲は、うれしいことに無料でmp3ファイルがダウンロードできるケースが多い。しかし、mp3ファイルそのものをダウンロードするため手動で上記のファイル構成にしなければならない。これが面倒で、wgetをつかってmp3ファイルをダウンロードして、そのまま使っていた。

このままでは気持ちが悪いので、id3を見て上記のファイル構成を自動で行ってくれるスクリプトを作ろうと決心。言語は最近良く使っているRubyを使おう。次にid3を操作するためのライブラリだけど。。。。RAAやrubyforgeを見たら。。。。

多いよ!!
僕の環境はdebianなので、aptitudeで探してみたら

# aptitude search id3 | grep ruby
(何にもない)
# aptitude search mp3 | grep ruby
p   libmp3info-ruby1.8              - a pure ruby library for access to mp3 file
p   libmp3tag-ruby1.8               - Reading and writing ID3V1.1 tags in MP3 fo

libmp3tag-ruby1.8はv1.1だけみたいなので、上のlibmp3info-rubyをインストールしてみました。
しかし、後述となりますがlibmp3info-rubyには問題がありまして。。。結局Rubyforgeにあった、id3lib-rubyをgemでインストールすることに。

インストール方法の比較

二つのライブラリのインストール方法の比較をします。その前に僕の環境を示しておきます。

自分の環境
# uname -snr
Linux debian 2.6.18-5-686

# ruby -v
ruby 1.8.5 (2006-08-25) [i486-linux]
#
libmp3info-rubyのインストール

aptitudeで一発。

# aptitude install libmp3info-ruby1.8
・・・・・(いろいろ表示される)・・・・・
# 
id3lib-rubyのインストール

C++のライブラリlibid3を使うので一発とは行かない。

# aptitude install libid3-dev
・・・・・(いろいろ表示される)・・・・・
# gem install id3lib-ruby
・・・・・(やっぱりいろいろ表示される)・・・・・

となります。id3libはgem、libid3が必要である一方、libmp3infoは必要なものはせいぜいruby環境とaptitude
libmp3infoの方が楽ですね。

APIの評価

各ドキュメントを以下に示しておきます。

僕は初めにlibmp3infoを使ってみたのですが。。。使い勝手に不満を覚えました。たしかに、v1とv2の両方の情報をハッシュとして取得ができるのですが、アーティスト名を示すキー値が、v1とv2で違っているためv1とv2が混在する環境では使いにくい。
一方id3libは、使う側がv1v2の違いを意識しなくても「インスタンス.artist」でアーティスト名が取得できる。

結論

  • libmp3info-ruby
    • インストール簡単(debianならば)
    • API面倒
  • id3lib-ruby
    • インストールが比較的面倒
    • APIがいい感じ

ということで、僕はid3lib-rubyを推したいと思います。
暇があったならば、このライブラリのラッパーとして、いずれのバージョンのid3タグも取得できなかった時は、musicbrainzmusicDNSに音響指紋を送って楽曲情報を取得するライブラリでも作ってみてもいいかも。
余談だけどlast.fmも音響指紋を使って類似サービスを展開しようとしてますねぇ。。。これは楽しみ。(参考リンク1参考リンク2)

*1:例えばLast.fmのタグで8bitってタグが付いてるアーティストなんかがそれ。