ID3v2 フレーム詳細

2011年3月13日 0

ID3v2 で定義される各種フレームのデータ構造をまとめる。

テキスト ( 文字コード指定 )

文字コード指定つきのテキスト情報。テキスト部分は文字コードが UTF-16 なら $00 00、それ以外は $00 が終端となる。フレームヘッダに示されたサイズより小さくても、終端を検出した時点で残りは切り捨てる。

バイト 内容
1 文字コード 0 ISO-8859-1
1 UTF-16 ( BOM つき )
2 UTF-16 ビッグ エンディアン
3 UTF-8
* テキスト

文字コード指定が 0 の場合、仕様では ISO-8859-1 として解釈することになっているが、ソフトウェアによってはシステム標準のエンコードで書き込むこともあるので注意する。実際、手持ちの MP3 の大半が、文字コード指定 0 で Shift-JIS になっていた。

このようなケースで厳密に ISO-8859-1 とすると文字化けが発生する。対応策としては以下が考えられる。

  1. テキストを解析して文字コードを自動判別する
  2. 常にシステム標準エンコードとして扱う
  3. GUI を提供してユーザーに文字化けしない文字コードを選ばせる

最も望ましいのは 1 だが、タグ情報として記録される程度の長さでは正しく判定できない可能性がある。2 は仕様への準拠を捨てることになる。3 はライブラリの範疇で解決することをあきらめたうえ、エンドユーザーに選択を強いる点がイマイチ。現実的なのは 2 だろうか。

書き込みに関しては、この問題を避ける意味で、文字コードを明確にしたほうがよいだろう。

テキスト ( 文字コード、説明付き )

TXXX と WXXX が使用するフレーム。内容の説明文を持たせることができる。これらの区切りは $00 ( 00 ) である ( 文字コードが UTF-16 なら 2 バイト )。

バイト 内容
1 文字コード 0 ISO-8859-1
1 UTF-16 ( BOM つき )
2 UTF-16 ビッグ エンディアン
3 UTF-8
* 説明テキスト
1 ~ 2 $00 ( 00 )
* 内容テキスト ( WXXX の場合は常に ISO-8859-1 )

テキスト ( 文字コード、言語指定 )

使用条件 ( USER ) で使用される、言語指定付きのテキスト情報フレーム。言語は ISO 639 に準拠した 3 文字の名前が入る。このフレームは言語ごとに定義可能。例えば 日本語 ( jpn ) と英語 ( eng ) のフレームを個別に持つことができる。

バイト 内容
1 文字コード 0 ISO-8859-1
1 UTF-16 ( BOM つき )
2 UTF-16 ビッグ エンディアン
3 UTF-8
3 言語
* 内容テキスト

テキスト ( 文字コード、言語、説明付き )

コメント ( COMM ) や歌詞 ( USLT ) で使用される、言語と説明付きのテキスト情報フレーム。言語は ISO 639 に準拠した 3 文字の名前が入る。このフレームは言語ごとに定義可能。例えば 日本語 ( jpn ) と英語 ( eng ) のフレームを個別に持つことができる。

バイト 内容
1 文字コード 0 ISO-8859-1
1 UTF-16 ( BOM つき )
2 UTF-16 ビッグ エンディアン
3 UTF-8
3 言語
* 説明テキスト
1 ~ 2 $00 ( 00 )
* 内容テキスト

URL

URL は文字コードが ISO-8859-1、$00 終端テキストである。$00 を検出した場合は、フレームヘッダの指定サイズに満たなくても、以降を切り捨てる。使用可能な文字については、URL の仕様を定めた RFC-2396 を参照のこと。

バイト 内容
* テキスト

画像

曲をあらわす画像。フォーマットは ID3v2.3 以前は JPEG か PNG、以降ならば拡張ヘッダのフラグに従う。

ID3v2.2 の PIC は以下のようになる。

バイト 内容
1 文字コード 0 ISO-8859-1
1 UTF-16 ( BOM つき )
3 フォーマット $xx xx xx “JPG”
“PNG”
1 種別 $00 その他
$01 32×32 ピクセルのファイル アイコン ( PNG のみ )
$02 その他のファイルアイコン
$03 ジャケットの表紙 ( 表 )
$04 ジャケットの表紙 ( 裏 )
$05 リーフレット中の曲のページ
$06 盤面のラベル
$07 メインの演奏者やソリストなど
$08 アーティスト
$09 指揮者
$0A バンドやオーケストラ
$0B 作曲家
$0C 作詞家
$0D レコーディングをおこなった場所
$0E 録音風景
$0F 演奏風景
$10 劇中で曲の使用された場面
$11 ID3.org の解説には A bright coloured fish とあるが、謎
$12 イラスト
$13 バンドやアーティストのロゴ
$14 レーベルやスタジオのロゴ
* 説明文。前述の文字コードで記述され、最大 64 文字、NULL 終端となる
* 画像データ。JPEG ( JFIF ) や PNG の内容がそのまま格納される

ID3v2.3 以降の APIC は以下のようになる。

バイト 内容
1 文字コード 0 ISO-8859-1
1 UTF-16 ( BOM つき )
2 UTF-16 ビッグ エンディアン
3 UTF-8
* “image/png” や “image/jpeg” といった MIME フォーマット文字列 ( NULL 終端 )。
ID3.org の解説では終端が単一の $00 となっているので ASCII になる。
1 種別 ( 内容は PIC と同様 )
* 説明文。前述の文字コードで記述され、最大 64 文字、NULL 終端となる
* 画像データ。JPEG ( JFIF ) や PNG の内容がそのまま格納される