ID3v2 ヘッダー
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 フラグが設定されているので、チェックする場合は、左から 0x80
、0x40
、0x20
、...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 ピクセルのみ。 |