2009-06-09 3 views
7

Attualmente sto lavorando a un progetto musicale, occupandomi di upload di mp3 dell'utente. Il problema è che non riesco a trovare una libreria id3 che funzioni correttamente per tutti i file. Ho provato le librerie id3-ruby e Mp3Info ma nessuna di queste mi dà risultati coerentemente corretti. Ad esempio, i problemi più comuni:Ruby mp3 Id3 parsing

  • parametri flusso sbagliate (bitrate e frequenza di campionamento, a volte la durata)
  • non supporta i tag estesi

ho deciso di aggiungere un modulo, dove gli utenti può fornire informazioni opzionali come artista e titolo; questo ha aiutato un po ', ma non ha risolto completamente il problema.

Qual è la libreria ID3 più utile e potente per rubino?

+0

Puoi pubblicare un elenco di tag di cui avete bisogno di essere sostenuto? Grazie. – Tilo

risposta

5

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

Ho usato questo per un progetto e ha funzionato abbastanza bene. Wrapper around taglib, che è molto portabile.

+0

grazie, lo proverò. ha qualche problema? –

+0

L'ho usato contro la mia intera libreria MP3 e non ho avuto problemi con esso. Non ho fatto nulla con il bitrate/frequenza di campionamento, quindi non posso parlarne. –

0

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

Ho particolarmente apprezzato questo uno, è possibile anche scrivere tag al file.

+0

sì, ma a volte questa lib non funziona correttamente, quindi ho deciso di passare a qualcosa di meglio –

+0

Sembra che non supporti utf-8. Altrimenti è pulito. – rpattabi

+2

Si basa sull'id3lib non più gestito. Per una biblioteca aggiornata dello stesso autore (io), prova [taglib-ruby] (https://github.com/robinst/taglib-ruby). – robinst

4

Ho usato questo:

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

o

gem install ruby-mp3info (aggiungere il regolamento sudo per Mac o * nix)

C'è un po 'di documentazione rdoc, che è bello. Al rovescio della medaglia, non mi piace molto l'uso di nomi di campi maiuscoli, il che sembra troppo preoccupato per preservare i nomi dalle specifiche. Forse dovrei incidere qualche alias. In ogni caso, questo script di esempio analizza la mia libreria musicale e conta le parole nei titoli:

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

Grazie per il suggerimento. Ma l'interfaccia sembra così difficile. Vorrei qualcosa di simile a ciò che dà id3lib-ruby. per esempio. tag = id3lib :: Tag.new ('test.mp3') tag.title #test_title tag.title = 'NEW_TITLE' tag.udpate! Il titolo di # test.mp3 viene aggiornato con new_title – rpattabi