2009-06-09 3 views
7

В настоящее время я работаю над музыкальным проектом, связанным с пользовательскими mp3-загрузками. Проблема в том, что я не могу найти библиотеку id3, которая будет корректно работать для всех файлов. Я пробовал id3-ruby и Mp3Info libs, но ни один из них не дает мне неизменно правильных результатов. Например, наиболее распространенные проблемы:Ruby mp3 Id3 синтаксический анализ

  • неправильные параметры потока (битрейт и частота дискретизации, иногда длительность)
  • не поддерживает расширенные теги

Я решил добавить форму, где пользователи может поставлять дополнительную информацию, такую ​​как Исполнитель и название; что помогло немного, но не полностью решило проблему.

Какая самая удобная и мощная библиотека ID3 для рубинов?

+0

Вы можете разместить список тегов, которые необходимо поддерживать? Благодарю. – Tilo

ответ

5

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

Я использовал это для проекта, и она работала очень хорошо. Оберните вокруг taglib, который очень портативен.

+0

спасибо, я попробую. есть ли у него какие-либо проблемы? –

+0

Я использовал его против всей моей библиотеки MP3 и не имел никаких проблем с ним. Я ничего не делал с битрейтом/частотой дискретизации, поэтому я не могу с этим поговорить. –

0

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

мне особенно понравился этот, вы также можете написать теги в файл.

+0

Да, но иногда этот lib не работает правильно, поэтому я решил переключиться на что-то лучшее –

+0

Похоже, что он не поддерживает utf-8. В противном случае это аккуратно. – rpattabi

+2

Он основан на том, что больше не поддерживается id3lib. Для современной библиотеки того же автора (меня) попробуйте [taglib-ruby] (https://github.com/robinst/taglib-ruby). – robinst

4

Я использовал это:

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

или

gem install ruby-mp3info (добавить регулирование sudo для Mac или * NIX)

Там какая-то документация RDoc, что приятно. С другой стороны, мне не очень нравится использование имен полей в верхнем регистре, которые, похоже, слишком обеспокоены сохранением имен из спецификации. Может быть, я должен взломать некоторые псевдонимы. Во всяком случае, этот образец скрипта сканирует мою музыкальную библиотеку и подсчитывает слова в заголовках:

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

Спасибо за предложение. Но интерфейс выглядит так сложно. Мне хотелось бы что-то вроде того, что дает id3lib-ruby. например tag = ID3Lib :: Tag.new ('test.mp3') tag.title #test_title tag.title = 'new_title' tag.udpate! # Название test.mp3 обновляется с помощью new_title – rpattabi