日曜日, 1月 14, 2007

 

Perl MP3::Info + iTunes compilation

mp3にはタグの規格があって、その中にトラック情報が入っている。

例えば曲名だとか”アーティスト”だとかアルバム情報だとかだ。

この規格はid3といってタグのことをid3tagという。
http://www.id3.org/

perlでid3tag情報を読むにはcpanのMP3::Infoが便利だ。
m4aのタグ情報を読むMP4::Infoとの表記の互換性もある。

だけど、実はiTunesで編集したタグに付く、コンピレーションフレームについてはid3の規格から外れている。(m4aについてはコンピレーションフレームについて規格がある。と、考えれば確かに有用なフレームだと思うのだが。)

だからだと思うのだが、MP3::Infoではcompilationフレームを読む方法がないように思われる。

でも読みたいときはどうするか?

コンピレーションフレームのキーは次のふたつ
TCMP
TCP

使う関数はこれ
MP3::Info::get_mp3tag (FILE [, VERSION, RAW_V2, APE2])

VERSIONはID3v1とID3v2のどちらを読むかを指定する。
指定をしなければ、まずID3v1を読み、(もしあれば)ID3v2の情報を次に読み、最初に読んだ情報を上書きする。

RAW_V2は
1:生データを取り出す。
2:データを取り出した上で加工する。
のいずれかを選択する。

例えば下の例のようにタグを読めば

my $tag = get_mp3tag('mysong.mp3', 2, 1);
for (keys %$tag) {
printf "%s => %s\n", {$_}, $tag->{$_};
}

タグの生のデータが取り出され、
キー => 値 のフォーマットで出力される。
(値には画像など文字列以外が格納されている場合もあるので注意)

キーがTCMPかTCPであればcompilation frameがついているということ。
if (defined $tag->{"TCMP"}){
printf "TCMP => %s\n", $tag->{"TCMP"};
}

参考:
http://search.cpan.org/~daniel/MP3-Info-1.21/Info.pm
http://backpan.cpan.org/authors/Chris_Nandor/MP3-Info-0.90.readme

Comments: コメントを投稿



<< Home

This page is powered by Blogger. Isn't yours?