ID3TAGについて調べてみる (1)

2015年4月19日 / C#, プログラミング

たまには技術的な話題を書いておかないと…と思っていたので、初めて書いてみます。

以前わんくま勉強会でも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ファイルを指定すると上記の形式で出力してくれるコンソールプログラムを作ったので、公開してみます。簡単なプログラムだけど、なんか楽しいです。

ID3TAG.zip (5kb)

今回はここまで。次回はID3v2タグについて研究します。

“ID3TAGについて調べてみる (1)” への1件のコメント

  1. […] 昨日のエントリは、書いてるうちにメンドくさくなって(違)適当にパパッとまとめてしまったので、ちょっとあんまりかなあと思ったので、改めて解説したいと思います。 […]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

TOPへ戻る