ID3TAGについて調べてみる (1)
たまには技術的な話題を書いておかないと…と思っていたので、初めて書いてみます。
以前わんくま勉強会でもTARファイルとZIPファイルのフォーマットについてセッションを持ったことがありますが、その手のファイルフォーマットで何か面白いものはないか…と思っていたところ、前から興味があったmp3ファイルのID3タグについてちょっと調べてみました。
ID3v1タグはmp3ファイルの終端128バイトを使って格納されていて、サイズも固定なので処理しやすい…のだけど、なにせ曲名やアーティスト名を格納する場所が30バイトしかないので、現在ではほとんど利用されていません。僕の手持ちのファイルも「せっかくだから設定している」程度です。
まずはWikipediaからパクったID3v1.1形式の構造がこちら。
開始位置 | 長さ | 説明 |
---|---|---|
0 | 3 | “TAG” の識別子3文字 |
3 | 30 | 曲名文字列。 |
33 | 30 | アーティスト文字列。 |
63 | 30 | アルバム文字列。 |
93 | 4 | 日付文字列。 |
97 | 28 または 30 | コメント文字列。 |
125 | 1 | コメント文字列が 28 バイト以内の場合に 0 が格納される。 |
126 | 1 | トラック番号。 |
127 | 1 | ジャンル番号。 |
v1とv1.1の違いは125バイト目が0x00の場合に126バイト目にトラック番号が入ります。ただし、126バイト目が0x00の場合はトラック番号として認識されません。
それを踏まえて、とあるmp3ファイルの最後尾128バイトのダンプを見てみます。
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 005C8A10: 54 41 47 83 82 83 65 82 BD 82 AD 82 C4 81 63 00 005C8A20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 005C8A30: 00 83 4D 81 45 82 A8 82 C8 82 E7 82 B7 82 A2 82 005C8A40: B1 82 DD 91 E0 00 00 00 00 00 00 00 00 00 00 44 005C8A50: 52 49 4C 4C 20 4B 49 4E 47 20 41 4E 54 48 4F 4C 005C8A60: 4F 47 59 00 00 00 00 00 00 00 00 00 00 31 39 39 005C8A70: 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 005C8A80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 12
これをID3v1フォーマットに合わせて出力をしてみると、こんな感じになります。
ID3ヘッダ : "TAG" 曲名 : "モテたくて…" アーティスト名 : "ギ・おならすいこみ隊" アルバム名 : "DRILL KING ANTHOLOGY" 日付 : "1994" コメント : "" トラック番号 : 7 ジャンル : Techno (0x12)
ということで、ギ・おならすいこみ隊のモテたくて…でした。でしたってなんだその曲。選曲の時点でどうなんだそれっていう。
mp3ファイルを指定すると上記の形式で出力してくれるコンソールプログラムを作ったので、公開してみます。簡単なプログラムだけど、なんか楽しいです。
今回はここまで。次回はID3v2タグについて研究します。
[…] 昨日のエントリは、書いてるうちにメンドくさくなって(違)適当にパパッとまとめてしまったので、ちょっとあんまりかなあと思ったので、改めて解説したいと思います。 […]