【Java】楽曲ファイルからタグ情報を取得する


はじめに

楽曲ファイルのタグ情報(楽曲名、アルバム名、アーティスト名など)は各種メディアプレイヤーから簡単に編集が可能です。
特にiTunesでは Gracenote を使ってCDからのインポートと同時にタグ情報の自動取得まで行ってくれてとても便利です。
しかし、中には取得してきたタグ情報が 自分好みじゃない 場合もあるかと思います。
例をあげると

  • 楽曲名がCD表記と異なる
  • アーティスト名が表記揺れしている
  • ジャンルが異なる(ここは個人の主観もあると思いますが...)

などなど...
これらを1曲ずつポチポチ編集するのは面倒なので、システムからタグ情報を操作できればいいなーと常々思ってました。(そのためには上記の要件を満たすCDDBも必要になりますが...)
今回は システムからタグ情報を操作する のうち タグ情報を取得する 処理に関して、 Java言語SpringBoot の組み合わせで JAudioTagger というライブラリを検証した結果を備忘録として残します。

pom.xmlの編集

pom.xmldependencies に以下の依存関係を追加します

<dependency>
  <groupId>org</groupId>
  <artifactId>jaudiotagger</artifactId>
  <version>2.0.3</version>
</dependency>

タグ情報の読み込み

まずはiTunesにインポートされている適当な曲のタグ情報を確認します

それでは実際にJavaコードからタグ情報を読み込んでみます(コードは以下を参照)

AudioFile audioFile = AudioFileIO.read(楽曲ファイルを読み込んだファイルオブジェクト);
Tag tag = audioFile.getTag();

System.out.println(tag.getFirst(FieldKey.TITLE));
System.out.println(tag.getFirst(FieldKey.ARTIST));
System.out.println(tag.getFirst(FieldKey.ALBUM_ARTIST));
System.out.println(tag.getFirst(FieldKey.ALBUM));
System.out.println(tag.getFirst(FieldKey.YEAR));
System.out.println(tag.getFirst(FieldKey.COMPOSER));
System.out.println(tag.getFirst(FieldKey.GENRE));

出力結果は以下となりました。

誰がその鐘を鳴らすのか?
欅坂46
欅坂46
誰がその鐘を鳴らすのか?
2020
辻村有記
J-POP

ちなみに FieldKey は以下のようなものが取得できるようです

FieldKey 取得できるタグ情報
TITLE 楽曲名
TITLE_SORT 楽曲名(よみ)
ARTIST アーティスト名
ARTIST_SORT アーティスト名(よみ)
ALBUM_ARTIST アルバムアーティスト
ALBUM_ARTIST_SORT アルバムアーティスト(よみ)
ALBUM アルバム名
ALBUM_SORT アルバム名(よみ)
YEAR アルバム発売年
COMPOSER 作曲者
COMPOSER_SORT 作曲者(よみ)
GENRE ジャンル

この他にも色々なフィールドが取得できるようです(参考:マッピング表)

おわりに

今回は タグ情報の取得 を検証しましたが、次は タグ情報の書き込み も検証してみたいと思います。
また、Java 以外の言語でのタグ情報の操作も、時間がある際に検証してみたいと思います。
最後になりますが、サブスクが主流となりつつある昨今、ローカルの楽曲ファイルを操作すること自体がナンセンスかもしれません(笑)