Perl:如何从MusicBrainz中检索相册元数据?

时间:2012-10-21 16:28:46

标签: perl musicbrainz

我正在创建一个Perl脚本,它会将mp3文件移动到我的音乐文件夹中,格式为artist/album/mp3file。现在我的一些mp3文件可能没有album tag,所以我想查询MusicBrainz数据库以检索给定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获取给定曲目的专辑信息?如果不可能,我还有哪些替代选项?

2 个答案:

答案 0 :(得分:4)

首先,你想要的是向mp3添加元数据,这是人们最常用的场景。 “正常”方式是使用Musicbrainz Tagger,在那里打开这些文件并使用界面来附加正确的元数据。 建议的(gui)工具是Musicbrain Picard

我还想声明Perl模块正在使用现已弃用的Web Service Version 1 MusicBrainz。 该Web服务存在一些问题,因为它是针对另一种数据库方案而不是现在用于MusicBrainz的方案。

但是,当前Web Service Version 2只有一个可用的python库:python-musicbrainzngs

您仍然可以使用Perl模块,但如果您遇到“奇怪”问题,这可能就是原因。


这是Web服务的一般工作方式(以及它应如何直接应用于Perl模块作为此Web服务的包装器): 您的搜索给出了:

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

您可以获得此曲目的录音列表。这些记录发生在多个版本(ReleaseList)上。 您可以忽略其中的许多内容,因为它们属于“编译”类型。你可能想要“专辑”版本。

您可能会问自己,为什么列表中有多个具有相同名称的相册。 这是因为MusicBrainz上的“发布”是发布事件和几种媒介的组合。 您可能有美国版本和德国豪华版本等。 所有这些版本都在一个“发布组”中。

您可能需要此“发布组”的名称,该名称大部分也是该组中每个发行版的名称。

您可能想了解MusicBrainz Database的结构。


这只是当然的基本用例。 您可能会遇到艺术家/标题,多个或缺少相册发布组和其他内容的拼写错误。 但是,它应该可以工作,您可以将“问题”案例放在特殊目录中,并在Picard中使用它们。 Picard还有其他方法来识别每个“音乐分析”(PUID,Acoustids)的文件


编辑:

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模块已损坏。

答案 1 :(得分:1)

查看我们的perl模块以访问封面艺术档案:

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

我们的存档更多信息在这里,包括规格:

http://coverartarchive.org/

祝你好运!