ID3v1
ID3v1 は MP3 のタグ情報として最も古いバージョンである。ファイルの末尾 128 バイトに記録される。文字コードの指定もなくサイズも定長であるため、メタデータとしては扱いにくい。
しかしファイル末尾に書かれるという特性により書き換えがファイルの部分更新で済むことや、古い MP3 オーディオ機器でも対応されている可能性が高いことから現在でも利用されることがある。また ID3v2 と共存可能なので、そちらをメインにしつつ ID3v1 を補助的に記録するという管理も可能である。
データ構造は以下。
Size | 内容 |
---|---|
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 対応ライブラリの実装でもこのような処理がおこなわれていることを確認できた。