我正在创建一个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获取给定曲目的专辑信息?如果不可能,我还有什么替代方案?
发布于 2012-12-16 08:42:12
首先,您想要的是向mp3s添加元数据,这是人们最常见的使用场景。“正常”的方法是使用Musicbrainz标记器,在那里打开这些文件,并使用界面附加正确的元数据。建议的(gui)工具是Musicbrain Picard。
我还想说明的是,Perl模块使用的是现已弃用的MusicBrainz Web Service Version 1。该Web Service有几个问题,因为它是为另一个数据库方案创建的,而不是现在MusicBrainz使用的数据库方案。
然而,当前的Web Service Version 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上的“发布”是一个发布事件和一些媒体的组合。你可能有一个美国版本和一个德国豪华版,等等。所有这些版本都在一个“发布组”中。
您可能想要这个“版本组”的名称,它通常也是这个组中每个版本的名称。
您可能想要阅读一些关于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模块损坏了。
发布于 2012-10-22 03:18:02
查看我们用于访问封面艺术档案的perl模块:
http://metacpan.org/pod/Net::CoverArtArchive
更多关于我们档案的信息在这里,包括规格:
http://coverartarchive.org/
祝好运!
https://stackoverflow.com/questions/12999750
复制相似问题