ID3v2 ヘッダ

2011年3月14日 0

ID3v2 のヘッダはファイルの先頭に記録される 10 バイトのデータで、以下のような構造になっている。

バイト 0 1 2 3 4 5 6 7 8 9
内容 タグ ID バージョン フラグ サイズ
v2.2 “ID3” $02 00 %ab000000 $xx xx xx xx
v2.3 “ID3” $03 00 %abc00000 $xx xx xx xx
v2.4 “ID3” $04 00 %abc00000 $xx xx xx xx

まず、ファイル先頭から 3 バイト読み込み、それらを ASCII 文字列に直したとき “ID3” となっていれば、ID3v2 タグの始点となる。

次に 2 バイトのバージョン情報が続く。これは { バージョン、リビジョン番号 } の順に並んでいる。ID3v2 と表記されているので、ID3 のバージョン 2 と勘違いしそうになるが、これは ID3v2 という規格であり、バージョンが 3 なら ID3v2 の 3 で ID3v2.3 となる。

バージョンが未知のものならば、タグの読み書きをおこなうべきではない。ID3v2 の仕様は前方互換を保証していない。

サイズはタグ情報全体からヘッダ部分を差し引いた値となる。これは全体としては 4 バイト ( 32 ビット ) だが、有効範囲は 28 ビットなので注意する。例えばタグ情報のサイズが 257 バイトの場合は $00 00 02 01 と表現される。

フラグの内容は以下のようになる。1 バイトの値に複数のビットフラグが設定されているので、チェックする場合は、左から 0x80、0x40、0x20、…etc を AND 演算して 1 になっていることを確認する。

ビット 7 6 5 4 3 2 1 0
v2.2 非同期化 圧縮 0 0 0 0 0 0
v2.3 非同期化 拡張ヘッダ 実験中 0 0 0 0 0
v2.4 非同期化 拡張ヘッダ 実験中 0 0 0 0 0

非同期フラグが有効ならば、ヘッダ以降のデータを読み取る前にデータを復元する必要がある。

ID3v2 はファイルの先頭に書かれるが、古い MP3 プレーヤーの場合、ID3v2 を判別できないため、この部分をそのまま音声データとして再生する可能性がある。この誤認は同期信号と呼ばれる一定のパターンが登場することによって発生するので、そのようなデータを適切にエスケープすることで、タグ部分が音声として判定されることを防ぐ。

例えば、「%11111111 111xxxxx」というデータがあれば「%11111111 00000000 111xxxxx」のように変更する。この処理を非同期化と呼ぶ。

ID3v2.2 の場合、圧縮というフラグが用意されているが用途不明。ID3v2.3 以降はここに拡張ヘッダ所有フラグが設定される。これが有効な場合は、ヘッダの後に拡張ヘッダが続く。実験中フラグは、タグ情報が実験段階であることを示す。開発者向けに使用されるフラグと思われる。

ID3v2 拡張ヘッダ

拡張ヘッダは ID3v2.3 から追加されたデータで、付加情報を表す。

タグ解析に必須ではないため、省略してもよい。もし追加する場合は、ID3v2 ヘッダに拡張ヘッダの所有フラグを立てたうえで、ID3v2 ヘッダの直後に追加する。

データ構造としては以下のようになる。

バイト 0 1 2 3 4 5 6 7 8 9 10 11 12 13
v2.3 サイズ フラグ パディング領域サイズ CRC-32
v2.4 サイズ フラグ長 フラグ CRC-32 制限情報フラグ 未使用

フラグは ID3v2.3 が 2 バイト、v2.4 は 1 バイトとなる。フラグは以下のように構成される。

ビット 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
v2.3 CRC あり 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v2.4 フラグ長が入るので未使用 0 更新状態 CRC あり 制限情報あり 0 0 0 0

制限情報フラグは ID3v2.4 からの仕様で、拡張ヘッダのフラグに指定があるときに設定される。内容は以下のようになる。

ビット 7 6 5 4 3 2 1 0
v2.4 タグ サイズ 文字コード テキスト文字数 画像フォーマット 画像サイズ

それぞれのフラグには、以下の値が設定される。

制限フラグ 内容
タグサイズ 00 フレーム数 128、サイズ 1MB まで
01 フレーム数 64、サイズ 128KB まで
10 フレーム数 32、サイズ 40KB まで
11 フレーム数 32、サイズ 4KB まで
文字コード 0 制限なし
1 ISO-8859-1 または UTF-8 のみ
テキスト文字数 00 制限なし
01 1024 文字
10 128 文字
11 30 文字
画像フォーマット 0 制限なし
1 PNG または JPEG ( JFIF ) のみ
画像サイズ 00 制限なし
01 256 x 256 ピクセルまで
10 64 x 64 ピクセルまで
11 64 x 64 ピクセルのみ