AudioPlayerWithMetadata

http://code.google.com/p/gstreamer-java/wiki/AudioPlayerWithMetadata

 AudioPlayerWithMetadata  

メタデータの読み込み (メディアタグ).

導入

音楽/映像ファイルは通常アーティスト、アルバム、ファイルを構築する為に使用されたエンコーダなどのようなメタデータを含みます。

詳細

メタデータ情報はタグイベントを監視するためにパイプラインにリスナを追加することによって、パイプラインから抽出することが出来ます。

public class AudioPlayerMetadata {
   
public static void main(String[] args) {
        args
= Gst.init("AudioPlayerMetadata", args);
       
PlayBin playbin = new PlayBin("AudioPlayer");
        playbin
.setVideoSink(ElementFactory.make("fakesink", "videosink"));
        playbin
.setInputFile(new File(args[0]));

        playbin
.getBus().connect(new Bus.TAG() {

           
public void tagsFound(GstObject source, TagList tagList) {
               
for (String tagName : tagList.getTagNames()) {
                   
for (Object tagData : tagList.getValues(tagName)) {
                       
System.out.printf("[%s]=%sn", tagName, tagData);
                   
}
               
}
           
}
       
});
       
        playbin
.setState(State.PLAYING);
       
Gst.main();
        playbin
.setState(State.NULL);
   
}
}
上記のプログラムの最初の部分はAudioPlayerTutorialと同じでファイルを再生するパイプラインをセットアップしています。
ここからがタグメッセージを監視する面白い部分です。
すべてのパイプラインは、新しいメタデータが検出された-といったようなパイプラインがアプリケーションに何かが起きたことを報せたい時にパイプラインが使用する要素である’Bus’を持ちます。
だから、これらのメッセージを監視する為にリスナをバスに接続します-このケースでは’tag’メッセージを監視したいので:

        playbin.getBus().connect(new Bus.TAG() {
           
public void tagsFound(GstObject source, TagList tagList) {
               
// Add code here to print out the tags
           
}
       
});
各タグは複数の値(例えば複数のアーティスト)を持つことが出来るので、特定のタグの全ての値を検索して、それらを処理/出力することが必要です。
上記の’tagsFound’メソッドに次のコードを追加します:

                for (Object tagData : tagList.getValues(tagName)) {
                   
System.out.printf("[%s]=%sn", tagName, tagData);
               
}
あなたはこのリスナの中で、後の為にタグを格納する、GUIでそれらを表示する等々、何でも望むことが出来ます。