週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

私の持っているmp3は、曲名をSuperTagEditor改造版でいれていました。このmp3をmacに移植すると、文字が完全に化けます。アルバム名が読めないとitunesでNHK英会話を正しく選ぶことすらできなくて非常に困ります。

文字コードの問題と予想しつつ直しかたを検索検索。以下の記事を参照して、pythonのeyeD3 moduleを導入しました。

以下作業記録が続きます。

  1. eyeD3 本家からeyeD3-0.6.15.tar.gzをDL.
    • macportsからeyeD3を探したものの、本家よりすこしバージョンが古かったので使いませんでした。ちなみにこちらはpy-eyed3 0.6.14
  2. configure, make, make install
  3. 上記のスクリプトを改造して、今のタグの状況を確認。
    • eyeD3モジュールをどう呼べばよいかわからなかったので上の文献が大活躍。
    • eyeD3はタグの文字列を勝手にunicodeと仮定するので要注意。[chr(ord(x)) for x in buf]なんて知りませんでした。
    • frameもわからなかったので上記のように出力して理解。あとソースを読んで理解。

以下のスクリプトを作ってmp3ファイルにかけて、入っているタグの仕様を理解しました。id3tagはver 2.3とver 2.2のものが混じっていて、日本語文字は全てsjisでした。次回はこれを実際にitunesに読める形式に直します。

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

import eyeD3
import string, sys

def fix2Raw(buf):
    return ''.join([chr(ord(x)) for x in buf])


def printFourAttribute(prefix, tag):
    """ print artist,  album, title for the tag
    """
    s = '\t'.join(prefix + [
            fix2Raw(tag.getArtist()),
            fix2Raw(tag.getAlbum()),
            fix2Raw(tag.getTitle()),
            str(tag.getTrackNum()),
            ]) + '\n'
    sys.stdout.write(s)


def printAllFrame(tag):
    """ Print all the frame in a tag.
    BTW, what is a frame?"""
    for frame in tag.frames:
        print frame, fix2Raw(getattr(frame,'text', ''))


def main():
    for mem in sys.argv[1:]:
        tag = eyeD3.Tag()
        if tag.link(mem) == 0:
            sys.stderr.write("WARN: %s doesn't include ID3 tag.\n" % mem)
            continue
        pretag = [mem, tag.getVersionStr()]
        printFourAttribute(pretag, tag)
        printAllFrame(tag)


if __name__ == '__main__':
    main()
スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://gusmachine.blog49.fc2.com/tb.php/309-f5df2330
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。