我目前正在进行一个音乐项目,涉及用户上传的mp3文件。问题是我找不到一个能正确处理所有文件的id3库。
我已经尝试了id3-ruby
和Mp3Info
库,但它们都不能给我一致正确的结果。
例如,最常见的问题:
- 流参数错误(比特率和采样率,有时候还有时长)
- 不支持扩展标签
我决定添加一个表单,让用户提供可选信息,如艺术家和标题;这有所帮助,但并没有完全解决问题。
哪个是Ruby中最实用和强大的ID3库?
http://www.hakubi.us/ruby-taglib/
我曾经在一个项目中使用过这个工具,效果不错。它是基于taglib的封装,非常易于移植。
gem install ruby-mp3info
,如果你是 Mac 或 *nix 用户,需要加上 sudo
权限。这个库附带了一些 rdoc 文档,很不错。但缺点是字段名称都是大写,看起来有些别扭,可能需要自己添加别名。下面这个示例脚本可以扫描我的音乐库并统计歌曲标题中的单词数:require 'mp3info'
count = 0
words = Hash.new { |h, k| h[k] = 0 }
Dir.glob("E:/MUSIC/**/*.mp3") do |f|
count += 1
Mp3Info.open(f) do |mp3info|
title = mp3info.tag2.TIT2
next unless title
title.split(/\s/).each { |w| words[w.downcase] += 1 }
end
end
puts "Examined #{count} files"
words.to_a.sort{ |a, b| b[1] <=> a[1] }[0,100].each { |w| puts "#{w[0]}: #{w[1]}" }
所有其他库都已经很久没有维护了。
id3tag
是另一个选项。例如:
require "id3tag"
mp3_file = File.open('/path/to/your/favorite_song.mp3', "rb")
tag = ID3Tag.read(mp3_file)
puts "#{tag.artist} - #{tag.title}"
http://id3lib-ruby.rubyforge.org/
我特别喜欢这个,你也可以将标签写入文件。