◆PROCESSING 逆引きリファレンス
カテゴリー:音楽・演奏
音楽ファイルのメタ情報を取得する(minim編)
【解説】
minimは、PROCESSINGで手軽に音楽を演奏できるライブラリです。
minimについて、より詳しく知りたい方は下記公式サイト 様を参照して下さい。
音楽プレーヤーでは音を鳴らすだけではなくて、演奏している音楽ファイルのアルバム名や歌手名などを表示してくれるものがあります。
アルバム名や歌手名など、演奏する音楽ファイルに付属している「音以外の情報」の事をメタ情報と呼びます。
一部の情報を除き、メタ情報の多くは音楽ファイルの先頭や最後尾にある「タグ情報」とよばれる部分に格納されています。
タグ情報は、音楽ファイルごとに様々な種類があります。
代表的なものは
- mp3タグ:mp3形式やaac形式の音楽ファイルで利用
- APEタグ:Monkey’s Audio形式やmp3形式の音楽ファイルで利用
- VorbisCommentタグ:ogg形式やflac形式の音楽ファイルで利用
- RIFFタグ:wav形式の音楽ファイルで利用
です。(参考URL:wa2c’s Weblog 様)
例えばmp3形式の音楽ファイルは、以下のような構造になっています。
(画像URL:illust-AC 様:任々堂工房 さん)
mp3形式の音楽ファイル構造について詳しく知りたい方は
などのページが参考となります。
minimには、数あるタグ情報の中でmp3形式の音楽ファイルに付けられる「mp3タグ」を取り出すのに便利な getMetaData() 命令があります。
getMetaData() 命令で取得できるタグ情報は以下の通りです。
- ファイル名:fileName
- 曲の長さ(ミリセカンド):length
- 曲名:title
- アーティスト名:author
- アルバム名:album
- 年:date
- コメント:comment
- 歌詞:lyrics
- トラック番号:track
- ジャンル:genre
- 著作者:copyright
- ディスク番号:disc
- 作曲者:composer
- アルバムアーティスト:orchestra
- 発行元:publisher
- エンコード情報:encoded
各タグ情報は、それぞれを取得するメソッドに対応しています。
【構文】
●メタデータ全体を取得する
AudioMetaData metaInfo = player. getMetaData( ) ;
●メタデータから個々のタグ情報を取得する
String fileName = metaInfo. fileName( ) ;
int mills = metaInfo. length( ) ;
String title = metaInfo. title( ) ;
String author = metaInfo. author( );
String album = metaInfo. album( ) ;
String date = metaInfo. date( ) ;
String comment = metaInfo. comment( ) ;
String lyrics = metaInfo. lyrics( ) ;
String track = metaInfo. track( ) ;
String genre = metaInfo. genre( ) ;
String copyright = metaInfo. copyright( ) ;
String disc = metaInfo. disc( ) ;
String composer = metaInfo. composer( ) ;
String orchestra = metaInfo. orchestra( ) ;
String publisher = metaInfo. publisher( ) ;
String encoded = metaInfo. encoded( ) ;
player は AudioPlayer クラスのインスタンス変数です。
metaInfo は AudioMetaData クラスのインスタンス変数です。
【パラメータ】
なし
【注意】
まず始めに、getMetaData() 命令で取り出すことが可能なのは mp3タグ(ID3v1、ID3v2)のみです。他の形式のタグは扱うことができません。
getMetaData() を実行すると、mp3タグを格納した AudioMetaData クラスのインスタンス変数が戻されます。
戻されたインスタンス変数を利用して、取得したいタグ情報に対応したメソッドを発行すれば、情報を取り出すことが可能です。
mp3タグに格納されている情報には、日本語(漢字や平仮名)もあり得ます。歌手名などを日本語で書き込んでおくわけですね。その場合、該当文字コードはID3v2フレームの文字コードで規定されます。
公式には以下の文字コードがサポートされています。
- ISO-8859-1
- UTF-16 / BOMあり
- (ID3v2.4タグの場合のみ) UTF-16BE / BOMなし
- (ID3v2.4タグの場合のみ) UTF-8
(情報元:Y-Lab. Electronics 様)
この情報と実際に格納されている文字コードが一致していない場合、タグが取得できなかったり取得した文字列が化けていることがあります。(特にWindowsで動作する一部のタグエディタでは、文字コードをシフトJISで書き込むものがあるので注意です)
また IDv1形式のタグしか持たない mp3ファイルから、日本語を含む情報を取得した場合も同様です。
つまり上記のような規約違反の音楽ファイルからは、期待通りメタ情報が取得できない事がありますので注意して下さい。
当然ですがmp3形式ではない音楽ファイルや、mp3形式でも目的のタグが存在しない場合は、情報を得ることができません。その場合、タグ情報を取り出す各メソッドは 空文字 を戻します。
ただしファイル名と曲の長さについては、主要なタグ(IDv1、IDv2、APE)を削除した状態でも取得可能です。
話がややこしいのは mp3形式の音楽ファイルでは、ID3v1、ID3v2、APEの各タグは、すべて存在(混在)していてもOKな所です。この場合どのタグを優先するかについては、各音楽再生ソフトや機器によって異なるようです。
(参考URL:SUNFLOWER SOCIETY 様: 2019/04 リンク不在)
minimでは ID3v2 タグを優先的に取得します。ID3v2 タグが存在しない場合は、 ID3v1タグから情報を取得します。
ただし 年:date については(何故か)ID3v1タグの内容が優先されるようです(他はID3v2タグを優先します・・・これはminimの不具合かな・・・?)。
mp3形式の音楽ファイルであっても、APEタグについては minimでは扱うことができません。
【関連記事】
- 音楽の再生準備を行う(minim編)
- サポート機能を判定する(minim編)
- BGMのボリュームを制御する(minim編)
- BGMの再生・停止を行う(minim編)
- BGMの再生位置を制御する(minim編)
- BGMの消音を制御する(minim編)
- BGMのバランスを制御する(minim編)
- BGMの周波数を分析する(minim編)
サンプルプログラム
メタ情報を取得する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import ddf.minim.*; //宣言 Minim mini; //Minimオブジェクト変数 AudioPlayer player; //音楽制御用インスタンス AudioMetaData meta; //メタデータ取得インスタンス PFont font; //文字データ int fontSize; //文字サイズ //------------------------ // 初期処理関数 //------------------------ void setup(){ size(340,340); //Minimインスタンスを作成する mini = new Minim( this ); //音楽ファイルを読み込む player = mini.loadFile("bgm.mp3"); //表示用文字データを読み込む font = loadFont( "IPAGothic-48.vlw" ); fontSize = 16; textFont( font, fontSize ); textAlign( LEFT, TOP ); //メタデータを取得する meta = player.getMetaData(); } void draw(){ background(0); //先頭から各メタ情報を表示する int y = 0; text("File Name: " + meta.fileName(), 5, y); text("Length (in milliseconds): " + meta.length(), 5, y+=fontSize); text("Title: " + meta.title(), 5, y+=fontSize); text("Author:" + meta.author(), 5, y+=fontSize); text("Album:" + meta.album(), 5, y+=fontSize); text("Date: " + meta.date(), 5, y+=fontSize); text("Comment: " + meta.comment(), 5, y+=fontSize); text("Lyrics: " + meta.lyrics(), 5, y+=fontSize ); text("Track: " + meta.track(), 5, y+=fontSize); text("Genre: " + meta.genre(), 5, y+=fontSize); text("Copyright: " + meta.copyright(), 5, y+=fontSize); text("Disc: " + meta.disc(), 5, y+=fontSize); text("Composer: " + meta.composer(), 5, y+=fontSize); text("Orchestra: " + meta.orchestra(), 5, y+=fontSize); text("Publisher: " + meta.publisher(), 5, y+=fontSize); text("Encoded: " + meta.encoded(), 5, y+=fontSize); } |
dataフォルダ配下にある bgm.mp3 よりメタ情報を取得して表示します。
表示されているメタ情報は、魔王魂 様のサイトよりダウンロードした mp3形式の音楽ファイルに私がタグエディタで勝手に付加したものです。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。