3

mp3 ファイルを自分の音楽フォルダーに format で移動する Perl スクリプトを作成していますartist/album/mp3file。現在、私の mp3 ファイルの一部に が含まれていない可能性があるため、 MusicBrainzデータベースにクエリを実行して、指定されたアルバム メタデータを取得するalbum tagことを考えました。track title & artist

このタスクにはWebService::MusicBrainz Perl モジュールを使用していますが、アルバムのメタデータ情報を提供するメソッドが見つかりません。私の現在のコードは次のとおりです。

use WebService::MusicBrainz::Track;

my $ws = WebService::MusicBrainz::Track->new();
my $response = $ws->search({ ARTIST => 'Ryan Adams', TITLE => 'when the stars go blue'  }); 

my $track = $response->track();
print $track->title(), " - ", $track->artist()->name(), "\n";

say $track->id();

では、MusicBrainz を使用して特定のトラックのアルバム情報を取得するにはどうすればよいでしょうか。

4

2 に答える 2

5

まず第一に、最も一般的な使用シナリオである mp3 にメタデータを追加する必要があります。「通常の」方法は、Musicbrainz Tagger を使用し、そこでこれらのファイルを開き、インターフェイスを操作して正しいメタデータを添付することです。推奨される (GUI) ツールはMusicbrain Picardです。

また、Perl モジュールは現在非推奨となっているMusicBrainz のWeb サービス バージョン 1を使用していることも述べたいと思います。この Web サービスは、現在 MusicBrainz で使用されているものとは別のデータベース スキーム用に作成されたため、いくつかの問題があります。

ただし、現在のWeb サービス バージョン 2で利用できるのは python ライブラリのみです: python-musicbrainzngs

Perl モジュールを引き続き使用できますが、「奇妙な」問題が発生した場合は、これが原因である可能性があります。


これは、Web サービスが一般的にどのように機能するか (および、この Web サービスのラッパーとして Perl モジュールに直接適用する方法) です。検索すると、次のようになります。

http://musicbrainz.org/ws/1/track/?artist=%22Ryan%20Adams%22&title=%22when%20the%20stars%20go%20blue%22

そこに、このトラックの録音のリストが表示されます。これらの再コーディングは、複数のリリース (ReleaseList) で行われます。これらの多くは「コンパイル」タイプであるため、無視できます。おそらく「アルバム」リリースが必要です。

おそらく、リストに同じ名前のアルバム リリースが複数ある理由を自問することでしょう。これは、MusicBrainz での「リリース」が、リリース イベントといくつかのメディアの組み合わせであるためです。米国版とドイツ語版のデラックス エディションなどがあるかもしれません。これらのリリースはすべて、1 つの「リリース グループ」に含まれています。

おそらく、この「リリース グループ」の名前が必要になるでしょう。これは、ほとんどの場合、このグループ内のすべてのリリースの名前でもあります。

MusicBrainz データベースがどのように構成されているかについて少しお読みください。


もちろん、これは基本的な使用例にすぎません。アーティスト/タイトルのスペルミス、複数または欠落しているアルバム リリース グループなどに遭遇する可能性があります。ただし、全体として機能するはずであり、「問題」のケースを特別なディレクトリにドロップして、Picard で処理することができます。Picard には、「音楽分析」 (PUID、Acoustid) ごとにファイルを識別する他の手段もあります。


編集:

my @tracklist = $response->track_list();
foreach my $track ( @tracklist ) {
  print $track->title(), " - ", $track->artist()->name(), "\n";
  my @releaselist = $track->release_list();
  foreach my $release ( @releaselist ) {
    print "  ", $release->title(), " - ", $release->type();
  }
}

一般的には機能するはずですが、機能しません。応答のすべてのトラックを提供しますが、どういうわけか release_list() からリリースを抽出できません。スキーマが変更されたか、perl モジュールが壊れている可能性があります。

于 2012-12-16T00:42:11.597 に答える
1

カバー アート アーカイブにアクセスするための perl モジュールを確認してください。

http://metacpan.org/pod/Net::CoverArtArchive

仕様を含むアーカイブの詳細については、こちらをご覧ください。

http://coverartarchive.org/

幸運を!

于 2012-10-21T19:18:02.313 に答える