首先,您想要的是将元数据添加到 mp3 中,这是人们最常见的使用场景。“正常”的方式是使用 Musicbrainz 标记器,在那里打开这些文件并使用界面附加正确的元数据。建议的(gui)工具是Musicbrain Picard
我还想声明 Perl 模块正在使用现已弃用的 MusicBrainz Web 服务版本 1。该 Web 服务有几个问题,因为它是为另一种数据库方案而不是 MusicBrainz 现在使用的数据库方案而设计的。
但是,当前的Web 服务版本 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 数据库的结构。
当然,这只是基本用例。您可能会遇到艺术家/标题拼写错误、多个或缺少专辑发行组和其他问题。但是,总的来说它应该可以工作,您可以将“问题”案例放在一个特殊的目录中,然后在 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 模块已损坏。