| 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 | バイナリデータ |
◆独自バイナリ形式
※すべて仕様を参照のこと。
◆独自複合形式
※すべて仕様を参照のこと。