سؤال
حاليا أنا أعمل على مشروع موسيقى، التعامل مع تحميلات مستخدم MP3. المشكلة هي أنه لا يمكنني العثور على مكتبة ID3 التي ستعمل بشكل صحيح لجميع الملفات. لقد حاولت id3-ruby
و Mp3Info
Libs ولكن لا أحد منهم يعطيني النتائج الصحيحة باستمرار. على سبيل المثال، المشاكل الأكثر شيوعا:
- معلمات دفق خاطئة (معدل معدل البت والعينة، في بعض الأحيان مدة)
- لا يدعم العلامات الموسعة
قررت إضافة نموذج، حيث يمكن للمستخدمين تزويد المعلومات الاختيارية مثل الفنان والعنوان؛ وقد ساعد ذلك قليلا، لكنه لم يحل المشكلة تماما.
ما هي مكتبة ID3 الأكثر قابلية للاستخدام وقوي ل Ruby؟
المحلول
http://www.hakubi.us/ruby-taglib/
لقد استخدمت هذا للمشروع وعمل جيدا. المجمع حول taglib، وهو محمول جدا.
نصائح أخرى
لقد استخدمت هذا:
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]}" }
http://id3lib-ruby.rubyforge.org/
أعجبني بشكل خاص هذا واحد، يمكنك أيضا كتابة علامات على الملف.
id3tag
هو خيار آخر. مثال:
require "id3tag"
mp3_file = File.open('/path/to/your/favorite_song.mp3', "rb")
tag = ID3Tag.read(mp3_file)
puts "#{tag.artist} - #{tag.title}"