2009-06-09 6 views
7

Derzeit arbeite ich an einem Musikprojekt, das sich mit User mp3 uploads beschäftigt. Das Problem ist, dass ich keine ID3-Bibliothek finden kann, die für alle Dateien korrekt funktioniert. Ich habe versucht id3-ruby und Mp3Info libs, aber keiner von ihnen gibt mir konsequent korrekte Ergebnisse. Zum Beispiel am häufigsten auftretenden Probleme:Ruby mp3 Id3 Parsing

  • falsche Stream-Parameter (Bitrate und Abtastrate, manchmal Dauer)
  • unterstützt keine erweiterten Tags

entschied ich mich, eine Form hinzuzufügen, wo die Nutzer Kann optionale Informationen wie Künstler und Titel liefern; das hat zwar etwas geholfen, aber das Problem nicht vollständig gelöst.

Was ist die am meisten verwendbare und leistungsfähige ID3-Bibliothek für Ruby?

+0

können Sie eine Liste der Tags veröffentlichen, die Sie unterstützt werden müssen? Vielen Dank. – Tilo

Antwort

5

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

habe ich dies für ein Projekt und es funktionierte ganz gut. Wrapper um Taglib, die sehr portabel ist.

+0

danke, ich werde es versuchen. Hat es irgendwelche Probleme? –

+0

Ich benutzte es gegen meine gesamte MP3-Bibliothek und hatte keine Probleme damit. Ich habe jedoch nichts mit der Bitrate/Abtastrate gemacht, daher kann ich nicht damit sprechen. –

0

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

Ich mochte besonders diese, auch Tags in die Datei schreiben können.

+0

ja, aber manchmal funktioniert diese lib nicht korrekt, also habe ich mich entschieden, zu etwas besserem zu wechseln –

+0

Sieht so aus, als ob es utf-8 nicht unterstützt. Ansonsten ist es ordentlich. – rpattabi

+2

Es basiert auf der nicht mehr gepflegten id3lib. Versuchen Sie für eine aktuelle Bibliothek desselben Autors (mir) [taglib-ruby] (https://github.com/robinst/taglib-ruby). – robinst

4

ich diese benutzt habe:

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

oder

gem install ruby-mp3info

Es gibt einige rdoc Dokumentation (die Regelung sudo für Mac oder * nichts hinzufügen), das ist schön. Auf der anderen Seite mag ich nicht die Verwendung von Großbuchstaben, die zu besorgt erscheinen, um die Namen aus der Spezifikation zu erhalten. Vielleicht sollte ich ein paar Aliase hacken. Wie auch immer, dieses Beispielskript durchsucht meine Musikbibliothek und zählt Wörter in Titeln:

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

Danke für den Vorschlag. Aber die Schnittstelle sieht so schwierig aus. Ich möchte etwas wie was id3lib-ruby gibt. z.B. tag = ID3Lib :: Tag.neu ('test.mp3') tag.title #test_title tag.title = 'neuer_titel' tag.udpate! Der Titel von # test.mp3 wird mit new_title aktualisiert – rpattabi