/ 最近 .rdf 追記 編集 設定 本棚

脳log[20090614] ruby-mp3info (version 0.6.13, 2009-05-26) を使ってみて。



2009年06月14日 (日)

最終更新: 2009-09-06T20:33+0900

[Ruby] ruby-mp3info (version 0.6.13, 2009-05-26) を使ってみて。

 入手先とドキュメント

チキンなので日記に書きますよ。

 Mp3Info#renameがまるで使えない。

mp3info.rbの中でこのように File.writable? でチェックしているから、renameで @filenameを書きかえていてファイルが存在しないとエラーになる。

      raise(Mp3InfoError, "file is not writable") unless File.writable?(@filename)

ここを乗り越えても

          file.seek(-TAG1_SIZE, File::SEEK_END)

ファイル末尾から TAG1_SIZEバイト戻ることができなくてエラー。だってそれは新しく作ったサイズ 0 のファイルだから。

 yearと tracknumを 0 にされる。

I氏のつぼでタグを書き込んでいると、この二つのタグも他と同じく BOM付き UTF-16LE文字列になっているので、mp3info.rbのこの部分で BOMを数字にしようとして 0 になる。

            if %w{year tracknum}.include?(key)
              @tag[key] = tag_value.to_i
            end

 タイトルなど文字列の最後の一文字が消える。

おそらく mp3info/id3v2.rbのこの部分

        # remove padding zeros for textual tags
        out.sub!(/\0*$/, '')

この処理で outのサイズが奇数バイトになることがあって、さらに NKFが末尾の半端な 1バイトを無視するからではないかと。

あと、/\0*$/ というパターンは /\0+$/ でいいんじゃないかな(空文字列を空文字列に置換することもないし)。あとあと、$ でなく \z を使うとか。


(途中なので)メッセージだけ表示してタグの書き込みはしないでおこうと思っていたら、unless と書くべきところが if になっていて広範囲に mp3ファイルを書きかえてしまった。そしたらエクスプローラでジャンルやアルバム、アーティストなどの読み込みと書き込みができなくなってしまった。むむう。