【问题标题】:Perl: How to retrieve album metadata from MusicBrainz?Perl:如何从 MusicBrainz 中检索专辑元数据?
【发布时间】:2012-10-21 16:28:46
【问题描述】:

我正在创建一个 Perl 脚本,它将以 artist/album/mp3file 格式将一个 mp3 文件移动到我的音乐文件夹中。现在可能我的一些 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 获取给定曲目的专辑信息,如果不可能,我有哪些替代选择?

【问题讨论】:

    标签: perl musicbrainz


    【解决方案1】:

    首先,您需要将元数据添加到 mp3 中,这是人们最常见的使用场景。 “正常”的方式是使用 Musicbrainz 标记器,在那里打开这些文件并使用界面附加正确的元数据。 建议的(gui)工具是Musicbrain Picard

    我还想声明 Perl 模块正在使用 MusicBrainz 现已弃用的 Web Service Version 1。 该 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 模块损坏。

    【讨论】:

    • 您应该可以在此处将链接作为 cmets 发布。否则,请将它们写为hXXp://...,并且有更多代表的人可以为您修复它们。
    • 收到我的第一票给了我足够的声誉 -> 添加了链接
    • $response->track_list() 将为您提供一组曲目。然而 $track->release_list() 并没有给你任何有用的东西。我猜在这种情况下 perl 模块只是被破坏了。你最好使用 python 模块。
    【解决方案2】:

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

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

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

    http://coverartarchive.org/

    祝你好运!

    【讨论】:

    • 但目前对获取 mp3 的封面不感兴趣。
    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多