快捷搜索:

利用Perl读写MP3标记管理音乐文件

假如你和大年夜多半人一样,那么你可能会有大年夜量的MP3文件分散于你的硬盘上。假如你和大年夜多半人一样,你还可能有一个计划听的歌名列表,并将它们分门别类以便你能准确地知道你在听些什么。然则这还不敷,你还没有将此扩展开来。

好的,使用Perl的赞助,就可以从你的列表中终极撤除那些条款。CPAN为我们供给了MP3::Tag模块,该模块供给了现成的对象用来涉猎和从MP3 文件中提取元数据,这使得识别某个MP3 磁盘文件的名称,艺术家,种别变成一件很简单的工作。而且,你还可以将它与Perl的文件函数相结合来为你所有的MP3内容高效地(自动地)建立一个索引。假如你爱好,你以致还可以使用内嵌的模块函数来编辑文件元数据。

本文将会评论争论这两种函数,向你展示若何应用MP3::Tag模块来读和写MP3文件元数据。这里我们假设你已安装了Perl和MP3::Tag模块;假如你没有这个模块,可以从CPAN下载。

读MP3标记

让我从根基开始:读嵌入在MP3文件中的ID3标记。列表A是一个简单的例子,该例演示了使用MP3::Tag若何去做。

列表A

#!/usr/bin/perl

use MP3::Tag;

$mp3 = MP3::Tag->new('track1.mp3'); # create object

$mp3->get_tags(); # read tags

if (exists $mp3->) { # print track information

print "Filename: $filenamen";

print "Artist: " . $mp3->->artist . "n";

print "Title: " . $mp3->->title . "n";

print "Album: " . $mp3->->album . "n";

print "Year: " . $mp3->->year . "n";

print "Genre: " . $mp3->->genre . "n";

}

$mp3->close(); # destroy object

这里面没有繁杂的地方。首先,是创建一个新的MP3::Tag 工具,并将MP3文件的文件名和位置作为参数通报给工具的构造函数。然后,应用工具的get_tags()措施来读取嵌入在文件头部的元数据,作为工具的属性供给给大年夜家。接着就可以以通俗的要领造访和打印这些属性。下面是一个输出样本:

文件名:track1.mp3

艺术家:The Bungers

题目:Techno #1

署名册:Bungabom

年份:2005

种别:Rancid Trance

它所具备的这个功能使得完成在本文开始时我想大年夜家允诺的工作十分简单——为你的所有音乐文件创建一个可打印的目录。你必要做的便是将上面的代码放在一个轮回中,对你每个*.mp3文件运行它,并将输出款式化为简单易读的形式。列表B展示了若何去做。

列表B

#!/usr/bin/perl

use MP3::Tag; # import module

@files = ; # find MP3 files in current directory

# loop over file list

# print tag information

foreach (@files) {

$mp3 = MP3::Tag->new($_);

$mp3->get_tags();

if (exists $mp3->) {

print $_, "t", $mp3->->artist, "t", $mp3->->title, "n";

}

$mp3->close();

}

在这个例子中,当前目录中的MP3文件列表被保存在数组@files中,然后使用foreach轮回迭代数组中的每一个,应用get_tags()措施获取和打印每个文件的具体元数据。

这样你就会拥有了一个自动天生的MP3目录!当你向你的收藏中添加新的音乐文件时,只要简单的运行一遍上面的脚本,它们就会自动地显示在目录列表中。这不是很整齐吗?

您可能还会对下面的文章感兴趣: