javaでID3タグを扱う

jid3libというものがあるらしい。jarだったりソースだったりがダウンロードできる。解説も。クイックスタートを流し読みするとなんとなくわかるような感じ。MP3FileオブジェクトにhasID3v1Tag()などがあるので、タグの判別もできそう。

ただなあ。
今やりたいことは、音楽プレイヤーに歌詞を表示する機能の実装。
ID3v2_2オブジェクトにgetSongLyric()があるので、これを使えば良さそうなのだけど…問題が一つ。
USLTのフレームって仕様書によると複数回定義することが可能となっている。たとえば英語の歌詞と、日本語訳詞で2個USLTを持つことができる(実際WMPのプロパティでは、歌詞入力画面に言語設定がついている)。

getSongLyric()はどれか一種類しかとれなさそうだよなあ。使ってみないと分からないけど。
使えそうなのが、getFrameCount(String)と、Iteratorを返り値にしているgetFrameOfType()。Iterator返してくるから複数回出てくるタグに使えるんだろう、たぶん*1
あとFrameBodyUSLTというオブジェクトもあるので使えるのかもしれない。

ちなみに、WMPは、むかし言語設定を日本語(jpn)にしとかないと歌詞が表示できないバグがあったので、「jpn」で入力されている可能性がある。itunesは言語設定がなくて、日本語歌詞でも「eng」の言語設定で入っている(UTFだからいいのか?)。WMPで入れた歌詞がiTuneで見れないことがあったけどどうもそのせいのようだった(「jpn」言語設定で入ってる歌詞がiTunesで読めない)。

*1:Iteratorになってないから型が良くわからない。getFrame()がAbstractID3v2Frameを返すのでコレ?