Pregunta

Actualmente estoy trabajando en un proyecto musical, que trata de archivos mp3 de usuario. El problema es que no puedo encontrar una biblioteca ID3 que funcione correctamente para todos los archivos. He tratado id3-ruby y Mp3Info libs pero ninguno de ellos me da siempre resultados correctos. Por ejemplo, los problemas más comunes:

  • parámetros de flujo equivocadas (tasa de bits y frecuencia de muestreo, a veces la duración)
  • no soporta etiquetas extendidos

He decidido añadir un formulario, donde los usuarios pueden suministrar información opcional como artista y título; que ayudó un poco, pero no resuelve completamente el problema.

¿Cuál es la biblioteca más fácil de usar y de gran alcance ID3 para el rubí?

¿Fue útil?

Solución

http://www.hakubi.us/ruby-taglib/

He utilizado este para un proyecto y funcionó bastante bien. Envoltura alrededor de taglib, que es muy portátil.

Otros consejos

He utilizado este:

http://ruby-mp3info.rubyforge.org/

o

gem install ruby-mp3info (añadir el sudo regulación para Mac o * nix)

Hay alguna documentación rdoc, lo cual es bueno. En el lado negativo, que no me gusta mucho el uso de nombres de campo en mayúsculas, que parece demasiado preocupado de preservar los nombres de la especificación. Tal vez debería cortar en algunos alias. De todos modos, este script de ejemplo explora la biblioteca de música y cuenta con palabras en los títulos:

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]}" }

http://id3lib-ruby.rubyforge.org/

Me gustó especialmente éste, también se puede escribir etiquetas al archivo.

id3tag es otra opción. Ejemplo:

require "id3tag"

mp3_file = File.open('/path/to/your/favorite_song.mp3', "rb")
tag = ID3Tag.read(mp3_file)
puts "#{tag.artist} - #{tag.title}"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top