アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

ID3v2 ヘッダー

March 14, 2011MP3

ID3v2 ヘッダーはファイルの先頭に記録される 10 Byte のデータ。

ヘッダー構造

ヘッダー構造について。

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

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

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

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

Byte 内容
0 "I" タグ ID
1 "D" *
2 "3" *
3 $02$03$04 バージョン
4 $00 *
5 %ab000000 フラグ
6 $xx サイズ
7 $xx *
8 $xx *
9 $xx *

フラグ

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

bit 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 ヘッダーの直後に追加する。

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

v2.3

Byte 内容
0 サイズ
1 *
2 *
3 *
4 フラグ
5 *
6 パディング領域サイズ
7 *
8 *
9 *
10 CRC-32
11 *
12 *
13 *

v2.4

Byte 内容
0 サイズ
1 *
2 *
3 *
4 フラグ長
5 フラグ
6 CRC-32
7 *
8 *
9 *
10 *
11 制限情報フラグ
12 未使用
13 *

フラグ

フラグは ID3v2.3 が 2 Byte (16 bit)、v2.4 は 1 Byte (8 bit) となる。フラグの bit 構成は以下。

v2.3

bit 内容
7 CRC あり
6 0
5 0
4 0
3 0
2 0
1 0
0 0

|v2.4|フラグ長が入るので未使用|0|更新状態|CRC あり|制限情報あり|0|0|0|0|

v2.4

bit 内容
7 フラグ長が入るので未使用
6 *
5 *
4 *
3 *
2 *
1 *
0 *
7 0
6 更新状態
5 CRC あり
4 制限情報あり
3 0
2 0
1 0
0 0

制限情報フラグ

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

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

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

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