アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

ID3v2 フレーム詳細

March 13, 2011MP3

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

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

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

Byte 内容
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 だろうか。

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

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

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

Byte 内容
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 のフレームを個別に持つことができる。

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

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

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

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

URL {#id3tagid3v2framedetailurl}

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

Byte 内容
* テキスト

画像 {#id3tagid3v2framedetailpicture}

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

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

Byte 内容
1 文字コード。0 = ISO-8859-1、1 = UTF-16 (BOM つき)。
3 画像フォーマット。ASCII で JPG または PNG
1 画像種別。別表を参照のこと。
* 説明文。前述の文字コードで記述され、最大 64 文字、NULL 終端となる
* 画像データ。JPEG (JFIF) や PNG の内容がそのまま格納される

画像の種別表。

内容
$00 その他。
$01 32x32 ピクセルのファイル アイコン (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 レーベルやスタジオのロゴ。

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

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