オーディオプレイヤーのプログラムを作成していた時に、
Flacのタグ情報を読み込もうとしていたのですが、
少し引っかかった箇所がいくつか合ったのでメモしておきます。
Flacの正式な仕様は以下のHPにあります。
http://xiph.org/flac/index.html
このHPのdocumentation→Flac Format Specificationにタグ仕様の記述があります。
今回はこの内アーティスト情報等のタグデータ、アルバムアートを取得する事を考えます。
Flacのファイル構造は以下のようになっています。
最初にファイルの種類を示す文字列"fLaC"があり、その後メタデータブロックが続き、最後にオーディオフレームが来ます。
メタデータブロックの構造は下のようになっています。
最初の1byteでメタデータブロックの種類を示します。
メタデータブロックの種類は以下の7種類です。
0 : STREAMINFO
1 : PADDING
2 : APPLICATION
3 : SEEKTABLE
4 : VORBIS_COMMENT
5 : CUESHEET
6 : PICTURE
このうち4:VORBIS_COMMENTがアーティスト名等が記録されるメタデータで、
6:PICTUREがアルバムアートが記録されるメタデータです。
これら以外のメタデータは今回読み飛ばします。
なお、最初の1bitのフラグが立っていた場合、このメタデータブロックは最後で、
このブロックの後にオーディオフレームが続くことを意味します。
4:VORBIS_COMMENTのメタデータの構造は以下のようになっています。
このメタデータの仕様はOgg Vorbis I format specificationと同じとされています。が、
以下の2点に注意しなければなりません。
・Oggフォーマットでは一番最後にFlaming_bitという1bitのフラグがありますが、Flacにはこのフラグは存在しません。
・このメタデータでは、バイト数Nやコメント長Lはリトルエンディアンで格納されています。
Flacのその他の箇所はバイト数等はビッグエンディアンで格納されています。
コメントLの中に、たとえば"Artist=hogehoge"といった文字列がUTF-8で保存されているので、
それを読みだしてやればタグ情報が持ってこれます。よく使うのはAlbum, Artist, Title, Genreとかでしょうか。
この文字列は、タグを書き込むソフトによって"ARTIST""Artist""artist"などと大文字小文字関係なく保存されているため、読み込み時はこの辺を気にしなければなりません。
6 : PICTUREのメタデータ構造は以下のようになっています。
最初に画像タイプ、MIMEタイプ等の情報の後、画像の幅・高さ等に関する情報があり、
最後に画像データが来ます。
この画像データを読み込み、jpg等に保存するなどすればアルバムアートが取得できます。