ID3v2の仕様は、ころころ変わるので、バージョンによる処理分けが本当に大変です。プログラマに優しくありません。
v2.4.0はおそらく早いうちに次バージョンに取って代わられるのではないか、そう思わずにいられません。そうあって欲しいです。 とはいえ、泣き言ばかり言っててもしょうがないので、とりあえずまとめてみました。ころころ具合を堪能してください。 なお、作っているうちにかなり疲れてきた部分もあるので……
|
タグヘッダ |
◆タグヘッダ
バイト | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
内容 | タグID | バージョン | フラグ | サイズ | ||||||
v2.2.0 | "ID3" | $02 00 | %xx000000 | $xx xx xx xx | ||||||
v2.3.0 | "ID3" | $03 00 | %xxx00000 | $xx xx xx xx | ||||||
v2.4.0 | "ID3" | $03 01
$04 00 |
%xxxx0000 | $xx xx xx xx |
◆タグフッタ
バイト | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
内容 | タグID | バージョン | フラグ | サイズ | ||||||
v2.4.0 | "3DI" | $03 01
$04 00 |
%xxxx0000 | $xx xx xx xx |
◆ヘッダフラグ
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
v2.2.0 | 非同期化 | 圧縮 | 0 | 0 | 0 | 0 | 0 | 0 |
v2.3.0 | 非同期化 | 拡張ヘッダ | 試験中 | 0 | 0 | 0 | 0 | 0 |
v2.4.0 | 非同期化 | 拡張ヘッダ | 試験中 | フッタ | 0 | 0 | 0 | 0 |
拡張ヘッダ |
◆拡張ヘッダ
バイト | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | - | - | - | - |
v2.3.0 | サイズ
$xx xx xx xx |
拡張フラグ
%x0000000 00000000 |
パディングサイズ(*1)
$xx xx xx xx |
CRCデータ(*2)
$xx xx xx xx |
||||||||||
v2.4.0 | サイズ
$xx xx xx xx |
フラグ長
$01 |
拡張フラグ
%0xxx0000 |
CRCデータ(*2)
$xx xx xx xx xx |
制限情報フラグ(*3)
%xxxxxxxx |
*1 | v2.3.0は必須。v2.4.0には存在しない。 |
*2 | CRCのフラグが立っている場合のみ追加される。
v2.3.0は4バイト、v2.4.0は5バイト。 |
*3 | 制限情報のフラグが立っている場合のみ追加される。 |
◆拡張ヘッダフラグ
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
v2.3.0 | CRCデータ有 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
v2.4.0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 更新状態 | CRCデータ有 | 制限情報有 | 0 | 0 | 0 | 0 |
◆拡張ヘッダ・制限情報フラグ
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
v2.4.0 | タグサイズ制限 | 文字コード制限 | テキスト文字数制限 | 画像フォーマット制限 | 画像サイズ制限 |
フレームヘッダ |
◆フレームヘッダ
バイト | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | - | - | - | - | - |
内容 | フレームID | サイズ | ステータスフラグ | フォーマットフラグ | 本来のサイズ(*4) | 暗号方式(*5) | |||||||||
v2.2.0 | "XXX" | $xx xx xx | |||||||||||||
v2.3.0 | "XXXX" | $xx xx xx xx | %xxx00000 | %xxx00000 | $xx xx xx xx | $xx | |||||||||
v2.4.0 | "XXXX" | $xx xx xx xx | %0xxx0000 | %0x00xxxx | $xx xx xx xx | $xx |
*4 | 圧縮される前のサイズ。圧縮されている場合のみ追加される。
圧縮がされず暗号化のみされている場合、その暗号方式によってこの値が追加されるか否かが決まる。 双方の処理が行われる場合は、圧縮前の元サイズを入れる。(暗号化は圧縮後に行われる。) |
*5 | 暗号化されている場合のみ追加される。 |
◆ステータスフラグ
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
v2.3.0 | タグ更新時に破棄 | ファイル更新時に破棄 | 読込専用 | 0 | 0 | 0 | 0 | 0 |
v2.4.0 | 0 | タグ更新時に破棄 | ファイル更新時に破棄 | 読込専用 | 0 | 0 | 0 | 0 |
◆フォーマットフラグ
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
v2.3.0 | 圧縮 | 暗号化 | グループ化 | 0 | 0 | 0 | 0 | 0 |
v2.4.0 | 0 | グループ化 | 0 | 0 | 圧縮 | 暗号化 | 非同期化 | 本来のサイズ追加(*6) |
*6 | 圧縮されている場合は必ず立つ。
暗号化の場合はその暗号方式の結果に従う。 通常は、圧縮・暗号化によりサイズの増減がある場合に加えるとよいだろう。 |
フレーム |
内容 | v2.2.0 | v2.3.0 | v2.4.0 | データ形式 |
オーディオの暗号化 | CRA | AENC | AENC | バイナリ(説明付) |
付属する画像 | PIC | APIC | APIC | 独自形式バイナリ |
オーディオシーケンスポイントインデックス | ASPI | 独自形式バイナリ | ||
コメント | COM | COMM | COMM | テキスト(言語指定説明付) |
コマーシャルフレーム | COMR | COMR | 独自複合形式 | |
暗号化の手法の登録 | ENCR | ENCR | バイナリ(説明付) | |
均一化 | EQU | EQUA | (EQU2) | 独自形式バイナリ |
均一化(2) | EQU2 | 独自形式バイナリ | ||
イベントタイムコード | ETC | ETCO | ETCO | 独自形式バイナリ |
パッケージ化された一般的なオブジェクト | GEO | GEOB | GEOB | 独自複合形式 |
グループ識別子の登録 | GRID | GRID | バイナリ(説明付) | |
協力者 | IPL | IPLS | (TMCL, TIPL) | テキスト(通常) |
リンク情報 | LINK | LINK | LINK | LINK形式テキスト(説明付) |
音楽CD識別子 | MCI | MCDI | MCDI | 純バイナリ |
MPEGロケーションルックアップテーブル | MLL | MLLT | MLLT | 独自形式バイナリ |
所有権フレーム | OWNE | OWNE | テキスト(説明付) | |
プライベートフレーム | PRIV | PRIV | バイナリ(説明付) | |
演奏回数 | CNT | PCNT | PCNT | 純バイナリ |
人気メーター | POP | POPM | POPM | バイナリ(説明付) |
同期位置フレーム | POSS | POSS | 独自形式バイナリ | |
おすすめバッファサイズ | BUF | RBUF | RBUF | 独自形式バイナリ |
相対ボリューム調整 | RVA | RVAD | (RVA2) | 独自形式バイナリ |
相対ボリューム調整(2) | RVA2 | 独自形式バイナリ | ||
リバーブ | REV | RVRB | RVRB | 独自形式バイナリ |
シークフレーム | SEEK | サイズ指定バイナリ | ||
署名フレーム | SIGN | 独自形式バイナリ | ||
同期歌詞/文書 | SLT | SYLT | SYLT | 独自複合形式 |
同期テンポコード | STC | SYTC | SYTC | 独自形式バイナリ |
アルバム/映画/ショーのタイトル | TAL | TALB | TALB | テキスト(通常) |
BPM(一分間の拍数) | TBP | TBPM | TBPM | テキスト(通常) |
作曲者 | TCM | TCOM | TCOM | テキスト(通常) |
内容のタイプ | TCO | TCON | TCON | テキスト(通常) |
著作権情報 | TCR | TCOP | TCOP | テキスト(通常) |
日付 | TDA | TDAT | (TDRC) | テキスト(通常) |
エンコード日時 | TDEN | テキスト(通常) | ||
プレイリスト遅延時間 | TDY | TDLY | TDLY | テキスト(通常) |
オリジナルのリリース日時 | TDOR | テキスト(通常) | ||
録音日時 | TDRC | テキスト(通常) | ||
リリース日時 | TDRL | テキスト(通常) | ||
タグ付け日時 | TDTG | テキスト(通常) | ||
エンコードした人 | TEN | TENC | TENC | テキスト(通常) |
作詞家/文書作成者 | TEXT | TEXT | TEXT | テキスト(通常) |
ファイルタイプ | TFT | TFLT | TFLT | テキスト(通常) |
関わった人々の一覧 | TIPL | テキスト(通常) | ||
時間 | TIM | TIME | (TDRC) | テキスト(通常) |
内容の属するグループの説明 | TT1 | TIT1 | TIT1 | テキスト(通常) |
タイトル/曲名/内容の説明 | TT2 | TIT2 | TIT2 | テキスト(通常) |
サブタイトル/説明の追加情報 | TT3 | TIT3 | TIT3 | テキスト(通常) |
始めの調 | TKE | TKEY | TKEY | テキスト(通常) |
言語 | TLA | TLAN | TLAN | テキスト(通常) |
長さ | TLE | TLEN | TLEN | テキスト(通常) |
ミュージシャンクレジットリスト | TMCL | テキスト(通常) | ||
メディアタイプ | TMT | TMED | TMED | テキスト(通常) |
ムード | TMOO | テキスト(通常) | ||
オリジナルのアルバム/映画/ショーのタイトル | TOT | TOAL | TOAL | テキスト(通常) |
オリジナルファイル名 | TOF | TOFN | TOFN | テキスト(通常) |
オリジナルの作詞家/文書作成者 | TOL | TOLY | TOLY | テキスト(通常) |
オリジナルアーティスト/演奏者 | TOA | TOPE | TOPE | テキスト(通常) |
オリジナルのリリース年 | TOR | TORY | (TDOR) | テキスト(通常) |
ファイルの所有者/ライセンシー | TOWN | TOWN | テキスト(通常) | |
主な演奏者/ソリスト | TP1 | TPE1 | TPE1 | テキスト(通常) |
バンド/オーケストラ/伴奏 | TP2 | TPE2 | TPE2 | テキスト(通常) |
指揮者/演奏者詳細情報 | TP3 | TPE3 | TPE3 | テキスト(通常) |
翻訳者/リミックス/その他の修正 | TP4 | TPE4 | TPE4 | テキスト(通常) |
セット中の位置 | TPA | TPOS | TPOS | テキスト(通常) |
Produced notice | TPRO | テキスト(通常) | ||
出版者 | TPB | TPUB | TPUB | テキスト(通常) |
トラックの番号/セット中の位置 | TRK | TRCK | TRCK | テキスト(通常) |
録音日付 | TRD | TRDA | (TDRC) | テキスト(通常) |
インターネットラジオ局の名前 | TRSN | TRSN | テキスト(通常) | |
インターネットラジオ局の所有者 | TRSO | TRSO | テキスト(通常) | |
アルバムのソートオーダー | TSOA | テキスト(通常) | ||
演奏者のソートオーダー | TSOP | テキスト(通常) | ||
タイトルのソートオーダー | TSOT | テキスト(通常) | ||
サイズ | TSI | TSIZ | テキスト(通常) | |
ISRC | TRC | TSRC | TSRC | テキスト(通常) |
エンコードに使用したソフトウェア/
ハードウェアとセッティング |
TSS | TSSE | TSSE | テキスト(通常) |
セットのサブタイトル | TSST | テキスト(通常) | ||
年 | TYE | TYER | (TDRC) | テキスト(通常) |
ユーザー定義文字情報フレーム | TXX | TXXX | TXXX | テキスト(説明付) |
一意的なファイル識別子 | UFI | UFID | UFID | バイナリ(説明付) |
使用条件 | USER | USER | テキスト(言語指定) | |
非同期歌詞/文書のコピー | ULT | USLT | USLT | テキスト(言語指定説明付) |
商業上の情報 | WCM | WCOM | WCOM | 純テキスト |
著作権/法的情報 | WCP | WCOP | WCOP | 純テキスト |
オーディオファイルの公式Webページ | WAF | WOAF | WOAF | 純テキスト |
アーティスト/演奏者の公式Webページ | WAR | WOAR | WOAR | 純テキスト |
音源の公式Webページ | WAS | WOAS | WAOS | 純テキスト |
インターネットラジオ局の公式Webページ | WORS | WORS | 純テキスト | |
支払い | WPAY | WPAY | 純テキスト | |
出版者の公式Webページ | WPB | WPUB | WPUB | 純テキスト |
ユーザー定義URLリンクフレーム | WXX | WXXX | WXXX | テキスト(説明付) |
暗号化メタフレーム | CRM | 独自複合形式 |
フレームのデータ形式 |
フレームヘッダに続くデータの並びの形式を、おおまかに分類した。
ただし面倒なものも多いので、それについては仕様を参照することをお願いしたい。 いずれまとめるつもりではあるが…… |
◆純テキスト
バイト数 | 任意 |
全バージョン | 文字列 |
◆テキスト(通常)
バイト数 | 1 | 任意 |
全バージョン | 文字コード
$xx |
エンコード指定文字列 |
◆テキスト(説明付)
バイト数 | 1 | 任意 | 1or2 | 任意 |
全バージョン | 文字コード
$xx |
説明文
エンコード指定文字列 |
$00 (00) | エンコード指定文字列 |
◆LINK形式テキスト(説明付)
バイト数 | 3 | 任意 | 1or2 | 任意 |
全バージョン | フレームID
$xx xx xx |
説明文
エンコード指定文字列 |
$00 (00) | エンコード指定文字列 |
◆テキスト(言語指定)
バイト数 | 1 | 3 | 任意 |
全バージョン | 文字コード
$xx |
言語コード
$xx xx xx |
エンコード指定文字列 |
◆テキスト(言語指定説明付)
バイト数 | 1 | 3 | 任意 | 1or2 | 任意 |
全バージョン | 文字コード
$xx |
言語コード
$xx xx xx |
説明文
エンコード指定文字列 |
$00 (00) | エンコード指定文字列 |
◆サイズ指定バイナリ
バイト数 | 4 |
全バージョン | $xx xx xx xx |
◆純バイナリ
バイト数 | 任意 |
全バージョン | バイナリデータ |
◆バイナリ(説明付)
バイト数 | 任意 | 1 | 任意 |
全バージョン | 文字列 | $00 | バイナリデータ |
◆独自バイナリ形式
※すべて仕様を参照のこと。
◆独自複合形式
※すべて仕様を参照のこと。