白旗製作所

Flacファイルのメタデータ(タグ)構造

オーディオプレイヤーのプログラムを作成していた時に、
Flacのタグ情報を読み込もうとしていたのですが、
少し引っかかった箇所がいくつか合ったのでメモしておきます。

Flacの正式な仕様は以下のHPにあります。
http://xiph.org/flac/index.html
このHPのdocumentation→Flac Format Specificationにタグ仕様の記述があります。

今回はこの内アーティスト情報等のタグデータ、アルバムアートを取得する事を考えます。


Flacのファイル構造は以下のようになっています。
1. FLACのデータ構造
最初にファイルの種類を示す文字列"fLaC"があり、その後メタデータブロックが続き、最後にオーディオフレームが来ます。

メタデータブロックの構造は下のようになっています。
2. メタデータブロックの構造
最初の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のメタデータの構造は以下のようになっています。
3. 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のメタデータ構造は以下のようになっています。
4. PICTUREの構造

最初に画像タイプ、MIMEタイプ等の情報の後、画像の幅・高さ等に関する情報があり、
最後に画像データが来ます。
この画像データを読み込み、jpg等に保存するなどすればアルバムアートが取得できます。





スポンサーサイト
  1. 2014/09/20(土) 13:04:00|
  2. PC
  3. | トラックバック:0
  4. | コメント:0
<<Win7のIISでFTP over SSLサーバを立ち上げた時のメモ | ホーム | MATLABからjavaクラス、jarファイルを扱う>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dededemio.blog.fc2.com/tb.php/15-17cc0b86
この記事にトラックバックする(FC2ブログユーザー)