Разбор mp3 Ruby Id3 - PullRequest
       17

Разбор mp3 Ruby Id3

8 голосов
/ 10 июня 2009

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

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

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

Какая библиотека ID3 является самой полезной и мощной для ruby?

Ответы [ 4 ]

6 голосов
/ 10 июня 2009

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

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

4 голосов
/ 10 июня 2009

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

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 голосов
/ 07 июля 2018

id3tag - еще один вариант. Пример:

require "id3tag"

mp3_file = File.open('/path/to/your/favorite_song.mp3', "rb")
tag = ID3Tag.read(mp3_file)
puts "#{tag.artist} - #{tag.title}"
0 голосов
/ 10 июня 2009

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

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

...