2009-06-09 9 views
7

Actualmente estoy trabajando en un proyecto de música, que trata con cargas de mp3 de usuario. El problema es que no puedo encontrar una biblioteca id3 que funcione correctamente para todos los archivos. He intentado id3-ruby y Mp3Info libs, pero ninguno de ellos me da resultados consistentemente correctos. Por ejemplo, los problemas más comunes:Ruby mp3 Id3 parsing

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

he decidido añadir un formulario, donde los usuarios puede suministrar información opcional como Artista y título; eso ayudó un poco, pero no resolvió completamente el problema.

¿Cuál es la biblioteca ID3 más útil y poderosa para ruby?

+0

¿Puedes publicar una lista de las etiquetas que necesitas para ser compatible? Gracias. – Tilo

Respuesta

5

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.

+0

gracias, lo intentaré. ¿Tiene algún problema? –

+0

Lo usé contra toda mi biblioteca de MP3 y no tuve ningún problema con él. Sin embargo, no hice nada con tasa de bits/frecuencia de muestreo, así que no puedo hablar de eso. –

0

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

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

+0

sí, pero a veces este lib no funciona correctamente, así que decidí cambiar a algo mejor –

+0

Parece que no es compatible con utf-8. De lo contrario, es limpio. – rpattabi

+2

Se basa en el id3lib que ya no se mantiene. Para obtener una biblioteca actualizada del mismo autor (yo), pruebe [taglib-ruby] (https://github.com/robinst/taglib-ruby). – robinst

4

He utilizado este:

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

o

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

Hay alguna documentación rdoc, lo cual es bueno. En el lado negativo, no me gusta mucho el uso de nombres de campo en mayúsculas, que parece demasiado preocupado para preservar los nombres de la especificación. Tal vez debería hackear algunos alias. De todos modos, este script de muestra escanea mi biblioteca de música y cuenta 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]}" } 
+0

Gracias por la sugerencia. Pero la interfaz parece tan difícil. Me gustaría algo como lo que da Id3lib-ruby. p.ej. tag = ID3Lib :: Tag.new ('test.mp3') tag.title #test_title tag.title = 'new_title' tag.udpate! El título de # test.mp3 se actualiza con new_title – rpattabi