ID3v2 バージョン差異
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 バイナリデータ

 

◆独自バイナリ形式

※すべて仕様を参照のこと。

◆独自複合形式

※すべて仕様を参照のこと。
 


トップページへ戻る