2002年12月03日(火) [過去の今日]
#2 xmmsとID3v2
一日の経験を元に、問題点をまとめてみた。
まず、ID3v2のUnicode文字は、単純にUnicode(UTF-16, UTF-16BE, UTF-8)でエンコードした文字列をいれればいいというわけではない。それぞれのコードに対応した文字コード指定子が必要だ。なのでxmms側できちんとUnicodeのID3v2に対応しないと読み込めるはずが無い。
現状のxmmsのjpパッチは、単純に一つ一つのタグの文字コードを変換するだけで、それ以上のことはしてくれない。
ついでに、ID3v2は2.2, 2.3, 2.4とそれぞれバラバラの規格であり、どれがデファクトスタンダードと言えるのか不明である。
ということで、ID3v2を使うならlatin-1でエンコードしなくてはならん。つまり基本的なASCII文字しか使えない。これは困る。非常に困る。どーすんべ。
@ 現状での対応:
一応、Windowsの世界ではShift_JISなID3v2が出回ってるらしいし、ツールもShift_JISで書き込んでるようだ。そしてMacユーザの友人に確認してもらったところ、一応iTunesでもShift_JISのID3v2を読み込めたという。
ということで現状ではShift_JISのID3v2がもっともポータビリティの高いやり方ということになるので、そういう方向で行こうかと思ってたのだが、今まで俺が突っ込んできたShift_JISのID3v2は、他の環境でまともに読めなかった。しばらく悩んでたのだが、「理由も分からず」うまく行ったので、まあそれはそれでよしとする。
sub tag { $mp3file = MP3::Tag->new($file); $id3v2 = $mp3file->newTag("ID3v2"); # $id3v2->add_frame("TIT2", jcode($tag{title})->sjis); # $id3v2->add_frame("TPE1", jcode($tag{artist})->sjis); # $id3v2->add_frame("TALB", jcode($tag{album})->sjis); $id3v2_title = jcode($tag{title})->sjis; $id3v2_artist = jcode($tag{artist})->sjis; $id3v2_album = jcode($tag{album})->sjis; chomp $id3v2_title; chomp $id3v2_artist; chomp $id3v2_album; $id3v2->add_frame("TIT2", "$id3v2_title"); $id3v2->add_frame("TPE1", "$id3v2_artist"); $id3v2->add_frame("TALB", "$id3v2_album"); $id3v2->add_frame("TRCK", $tag{track}); $id3v2->write_tag(); }
上記は俺の使ってるID3を突っ込むスクリプトの一部だが、コメントされてる部分が以前のやり方だった。このように修正してからは、なぜかうまく他の環境でも読み込めるのだ。理由がさっぱりわからんが……。
(@729)
@ 訂正:
上記の修正コードは意味無いようだ。これでも読めたり読めなかったりする。もうわけわからん……。
(@859)