2009-06-09 15 views
7

Obecnie pracuję nad projektem muzycznym, zajmującym się przesyłaniem plików MP3 użytkownika. Problem polega na tym, że nie mogę znaleźć biblioteki id3, która będzie działać poprawnie dla wszystkich plików. Próbowałem już bibliotek id3-ruby i Mp3Info, ale żadna z nich nie zapewnia mi konsekwentnie poprawnych wyników. Na przykład, najczęstsze problemy:Ruby MP3 Id3 parsowanie

  • niewłaściwych parametrów strumienia (bitrate i częstotliwość próbkowania, czasem trwania)
  • nie obsługuje rozszerzonych tagów

postanowiłem dodać formularza, gdzie użytkownicy może dostarczyć opcjonalne informacje, takie jak wykonawca i tytuł; to trochę pomogło, ale nie rozwiązało całkowicie problemu.

Jaka jest najbardziej użyteczna i potężna biblioteka ID3 dla ruby?

+0

Czy możesz opublikować listę tagów, które musisz obsłużyć? dzięki. – Tilo

Odpowiedz

5

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

użyłem tego dla projektu i to działało całkiem dobrze. Otaczaj taglib, który jest bardzo przenośny.

+0

dzięki, spróbuję. czy ma jakieś problemy? –

+0

Użyłem go przeciwko całej mojej bibliotece MP3 i nie miałem z tym żadnych problemów. Nie zrobiłem nic z bitrate/sample rate, więc nie mogę z tym porozmawiać. –

0

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

Szczególnie podobał mi się ten jeden, można również napisać znaczniki do pliku.

+0

tak, ale czasami ta lib nie działa poprawnie, więc postanowiłem przełączyć się na coś lepszego –

+0

Wygląda na to, że nie obsługuje utf-8. W przeciwnym razie jest schludny. – rpattabi

+2

Jest oparty na nieobsługiwanym id3lib. Aby uzyskać aktualną bibliotekę tego samego autora (mnie), spróbuj [taglib-ruby] (https://github.com/robinst/taglib-ruby). – robinst

4

Użyłem tego:

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

lub

gem install ruby-mp3info (dodaj regulację sudo dla Mac lub * nix)

Jest jakaś dokumentacja rdoc, co jest miłe. Z drugiej strony nie bardzo podoba mi się użycie nazw pól pisanych dużymi literami, które wydają się zbyt zaniepokojone, aby zachować nazwy z specyfikacji. Może powinienem włamać się w jakieś aliasy. W każdym razie, ten przykładowy skrypt skanuje moją bibliotekę muzyczną i zlicza słowa w tytułach:

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

Dzięki za sugestię. Ale interfejs wygląda tak trudno. Chciałbym coś takiego, co daje id3lib-ruby. na przykład tag = ID3Lib :: Tag.new ("test.mp3") tag.title #test_title tag.title = 'new_title' tag.udpate! Tytuł # test.mp3 jest aktualizowany o new_title – rpattabi