Ну, это решение работает для id3v2 (текущий стандарт).ID3V1 не имеет метаданных в начале файла, поэтому он не будет работать в этих случаях.
Это читает первые 4096 байтов файла, что является произвольным.Насколько я могу судить из ID3 документации , размер не ограничен, но 4 КБ было, когда я перестал получать ошибки синтаксического анализа в моей библиотеке.
Я смог построитьпростой аудиоплеер Dropbox, который можно увидеть здесь: soundstash.heroku.com
и код с открытым исходным кодом здесь: github.com / miketucker / Dropbox-Audio-Player
require 'open-uri'
require 'stringio'
require 'net/http'
require 'uri'
require 'mp3info'
url = URI.parse('http://example.com/filename.mp3') # turn the string into a URI
http = Net::HTTP.new(url.host, url.port)
req = Net::HTTP::Get.new(url.path) # init a request with the url
req.range = (0..4096) # limit the load to only 4096 bytes
res = http.request(req) # load the mp3 file
child = {} # prepare an empty array to store the metadata we grab
Mp3Info.open( StringIO.open(res.body) ) do |m| #do the parsing
child['title'] = m.tag.title
child['album'] = m.tag.album
child['artist'] = m.tag.artist
child['length'] = m.length
end