网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > linux > Linux编程 > Perl编程 > 利用Perl读写MP3标记管理音乐文件  

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

2007-05-27  作者:bitsCN整理  来源:Linux时代  点评 投稿 收藏

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

  好的,利用Perl的帮助,就可以从你的列表中最终除去那些条目。CPAN为我们提供了MP3::Tag模块,该模块提供了现成的工具用来阅读和从MP3 文件中提取元数据,这使得识别某个MP3 磁盘文件的名称,艺术家,类别变成一件很简单的事情。而且,你还可以将它与Perl的文件函数相结合来为你所有的MP3内容高效地(自动地)建立一个索引。如果你喜欢,你甚至还可以利用内嵌的模块函数来编辑文件元数据。

网管论坛bbs_bitsCN_com

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

  读MP3标记

网管联盟bitsCN@com

  让我从基础开始:读嵌入在MP3文件中的ID3标记。列表A是一个简单的例子,该例演示了利用MP3::Tag如何去做。 网管u家u.bitsCN.com

  列表A 网管下载dl.bitscn.com

  #!/usr/bin/perl 中国网管联盟bitsCN.com

  use MP3::Tag;

网管论坛bbs_bitsCN_com

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

中国网管论坛bbs.bitsCN.com

  $mp3->get_tags(); # read tags 网管联盟bitsCN_com

  if (exists $mp3->) { # print track information 网管下载dl.bitscn.com

  print "Filename: $filenamen"; 网管网www.bitscn.com

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

网管u家u.bitsCN.com

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

网管网www.bitscn.com

  print "Album: " . $mp3->->album . "n"; 网管网www.bitscn.com

  print "Year: " . $mp3->->year . "n"; 网管联盟bitsCN@com

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

网管下载dl.bitscn.com

  } 中国网管联盟bitsCN.com

  $mp3->close(); # destroy object

网管联盟bitsCN@com

这里面没有复杂的地方。首先,是创建一个新的MP3::Tag 对象,并将MP3文件的文件名和位置作为参数传递给对象的构造函数。然后,使用对象的get_tags()方法来读取嵌入在文件头部的元数据,作为对象的属性提供给大家。接着就可以以普通的方式访问和打印这些属性。下面是一个输出样本: 网管bitscn_com

  文件名:track1.mp3

网管下载dl.bitscn.com

  艺术家:The Bungers

网管论坛bbs_bitsCN_com

  题目:Techno #1 网管网www_bitscn_com

  签名册:Bungabom 网管联盟bitsCN_com

  年份:2005

中国网管论坛bbs.bitsCN.com

  类别:Rancid Trance

网管下载dl.bitscn.com

  它所具备的这个功能使得完成在本文开始时我想大家承诺的事情十分简单——为你的所有音乐文件创建一个可打印的目录。你需要做的就是将上面的代码放在一个循环中,对你每个*.mp3文件运行它,并将输出格式化为简单易读的形式。列表B展示了如何去做。

网管论坛bbs_bitsCN_com

  列表B 网管u家u.bitsCN.com

  #!/usr/bin/perl 网管论坛bbs_bitsCN_com

  use MP3::Tag; # import module 中国网管论坛bbs.bitsCN.com

  @files = <*.mp3>; # find MP3 files in current directory

中国网管论坛bbs.bitsCN.com

  # loop over file list 网管u家u.bitsCN.com

  # print tag information 网管网www_bitscn_com

  foreach (@files) {

网管网www_bitscn_com

  $mp3 = MP3::Tag->new($_); 中国网管联盟bitsCN.com

  $mp3->get_tags();

中国网管论坛bbs.bitsCN.com

  if (exists $mp3->) {

网管联盟bitsCN@com

  print $_, "t", $mp3->->artist, "t", $mp3->->title, "n"; 网管u家u.bitscn@com

  }

中国网管联盟bitsCN.com

  $mp3->close(); 中国网管联盟bitsCN.com

  }

网管联盟bitsCN_com

  在这个例子中,当前目录中的MP3文件列表被保存在数组@files中,然后利用foreach循环迭代数组中的每一个,使用get_tags()方法获取和打印每个文件的详细元数据。 网管网www_bitscn_com

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

网管联盟bitsCN@com


TAGs管理   音乐   文件   标记   利用   MP3   print   一个   MP3::Tag   模块    
 上一篇:Linux系统环境下的Socket编程详细解析   下一篇:使用Perl常规表达式进行匹配
利用Perl读写MP3标记管理音乐文件 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: