2002年12月03日(火) [過去の今日]
#1 xmms
いつからか知らないが、素のままでUTF-8のID3v2を表示できるようになってた。ということでjpパッチいらねーな。UTF-8のID3v2に書き換えるスクリプトを書こう。
(@722)
@ こんなネタで徹夜してしまう俺も俺だが:
どうやら幻だった模様。jpパッチを当てたxmmsでutf8で埋め込んだid3v2タグをv2禁止で読み込み、さらにShift_JIS to EUC-JP変換をかますとアーティスト名とアルバム名がくっついてしまうが、読み込める。アーティスト名はUnknownになり、本来のアーティスト名はアルバム名の頭に入る。アルバム名は文字数制限があるらしく、途中で切れる。
WindowsユーザやMacユーザに見てもらったときも、まったく同じ位置でアルバム名が切れていたことから、id3v1として読み込まれたのであろう。ということは、俺の埋め込んだid3v2タグ自体にも問題がありそうだ。しかしライブラリ任せなのでようわからん罠。
(@921)
@ ふと気付くと:
今までShift_JISで突っ込んでたID3も、 Windows Madia Player 7.1 ではまともに表示されない。やっぱUnicodeへの移行は必要なんかなー。
(@389)
#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)