Question

Je travaille actuellement sur un projet de musique, traitant des téléchargements mp3 de l'utilisateur. Le problème est que je ne peux pas trouver une bibliothèque id3 qui fonctionne correctement pour tous les fichiers. J'ai essayé libs id3-ruby et Mp3Info, mais aucun d'eux ne me donne toujours des résultats corrects. Par exemple, les problèmes les plus courants:

  • mauvais paramètres de flux (débit binaire et la fréquence d'échantillonnage, parfois durée)
  • ne supporte pas les balises étendues

J'ai décidé d'ajouter un formulaire, où les utilisateurs peuvent fournir des informations facultatives comme artiste et le titre; qui a aidé un peu, mais ne résout pas complètement le problème.

Quelle est la bibliothèque ID3 plus utile et puissant pour le rubis?

Était-ce utile?

La solution

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

J'ai utilisé cela pour un projet et cela a fonctionné très bien. Wrapper autour taglib, ce qui est très portable.

Autres conseils

Je l'ai utilisé ceci:

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

ou

gem install ruby-mp3info (ajouter le règlement sudo pour Mac ou * nix)

Il y a une documentation rdoc, ce qui est agréable. En revanche, je ne aime pas beaucoup l'utilisation des noms de champs en majuscules, qui semble trop préoccupé de préserver les noms de la spécification. Peut-être que je devrais pirater dans certains alias. Quoi qu'il en soit, cet exemple de script scanne ma bibliothèque musicale et compte les mots dans les titres:

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/

J'ai particulièrement aimé celui-ci, vous pouvez également écrire des balises dans le fichier.

id3tag est une autre option. Exemple:

require "id3tag"

mp3_file = File.open('/path/to/your/favorite_song.mp3', "rb")
tag = ID3Tag.read(mp3_file)
puts "#{tag.artist} - #{tag.title}"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top