Perl:如何从Musicbrainz检索专辑Metadata



我正在创建一个Perl脚本,该脚本将以格式artist/album/mp3file将MP3文件移至我的音乐文件夹。现在,我的某些MP3文件可能没有album tag,所以我想询问Musicbrainz数据库以检索Ctrack 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获得给定曲目的专辑信息,如果不可能,我的替代选择是什么?

首先,您想要的是向MP3添加元数据,这是人们最常见的用法场景。"正常"的方法是使用Musicbrainz标记器,在此处打开这些文件,然后与接口一起使用正确的元数据。建议的(GUI)工具是Musicbrain Picard

我还想指出,Perl模块正在使用Musicbrainz的现在倒霉的Web服务版本。该Web服务有几个问题,因为它是针对Musicbrainz现在使用的一个数据库方案制造的。

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

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


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

http://musicbrainz.org/ws/ws/1/track/?artist="22Ryan Adams"&Title="WHEN THE STARS GO GO GO Blue"222222

在那里您会得到此曲目的录音列表。这些重新编码发生在多个版本(发行主义者)上。您可以忽略其中的许多,因为它们是"汇编"类型。您可能想要"专辑"发行。

您可能会问自己,为什么列表中有多个专辑发行。这是因为Musicbrainz上的"发行"是释放事件和几种媒介的组合。您可能有美国发行版和德国豪华版等。所有这些版本都在一个"发行组"中。

您可能想要此"发行组"的名称,这主要也是此组中每个版本的名称。

您可能想阅读有关Musicbrainz数据库结构的方式。


当然,这只是基本用例。您可能会遇到艺术家/标题,多个或失踪专辑发行组和其他内容的拼写错误。但是,它应该起作用,您可以将"问题"案例放在一个特殊的目录中,然后在Picard中与它们合作。皮卡德(Picard)还具有其他"音乐分析"(PUID,ACOSTIDS)识别文件的方法


编辑:

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模块被打破。

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

http://metacpan.org/pod/net:: coverartarchive

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

http://coverartarchive.org/

祝你好运!

相关内容

  • 没有找到相关文章

最新更新