ID3v1

2011年3月14日 0

ID3v1 は MP3 のタグ情報として最も古いバージョンである。ファイルの末尾 128 バイトに記録される。文字コードの指定もなくサイズも定長であるため、メタデータとしては扱いにくい。

しかし、ファイル末尾に書かれるという特性により書き換えがファイルの部分更新で済むことや、古い MP3 オーディオ機器でも対応されている可能性が高いことから、現在でも利用されることがある。また、ID3v2 と共存可能なので、そちらをメインにしつつ、ID3v1 を補助的に記録するという管理も可能である。

データ構造は以下のようになる。

サイズ 内容
3 ID3v1 の識別子。3 バイトの ASCII 文字列で “TAG” となる
30 曲名
30 アーティスト
30 アルバム
4
28 コメント
2 トラック番号
1 ジャンル番号

取得する場合は、ファイル末尾から -128 バイト目にファイルポインタを移動させ、そこから 3 バイト読み取り、識別子があれば各データを固定長で読み込んでゆく。文字コードは ANSI と考える。また、余白はゼロで埋められるので、文字列化する場合はそれらをトリミングしなければならない。

ID3v1 には ID3v1 と ID3v1.1 という規格がある。ID3v1 ならコメントが 30 バイトとなり、トラック番号を格納しない。現在の主流は ID3v1.1 だと思われるが、規格の違いを明示するデータはないので、トラック番号を取得する場合は独自処理が必要となる。

トラック番号を読む場合、はじめにコメント部分とあわせた 30 バイトを読み取り、28 バイト目が 0 ならば後続の 29 バイト目をトラック番号と見なす方法が一般的かと思われる。

余白は 0 で埋められるので、トラック番号の指定があるなら取得、なければ 0 になる。通常、トラック番号は 1 から開始されるので、0 ならば無効値としてもよいだろう。

いくつかのオープンソースな ID3v1 対応ライブラリの実装でも、このような処理がおこなわれていることを確認できた。