Ruby mp3 Id3 parsing

后端 未结 5 539
你的背包
你的背包 2021-02-02 02:43

Currently I\'m working on a music project, dealing with user mp3 uploads. The problem is that I can\'t find an id3 library that will work correctly for all files. I have tried

相关标签:
5条回答
  • 2021-02-02 02:47

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

    I particularly liked this one, you can also write tags to the file.

    0 讨论(0)
  • 2021-02-02 02:55

    id3tag is another option. Example:

    require "id3tag"
    
    mp3_file = File.open('/path/to/your/favorite_song.mp3', "rb")
    tag = ID3Tag.read(mp3_file)
    puts "#{tag.artist} - #{tag.title}"
    
    0 讨论(0)
  • 2021-02-02 02:59

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

    I used this for a project and it worked quite well. Wrapper around taglib, which is very portable.

    0 讨论(0)
  • 2021-02-02 03:10

    As of 2019, the best answers are:

    • Krists Ozols' ID3Tag
    • Moumar's ruby-mp3info
    • taglib-ruby

    All other libraries are long-since unmaintained.

    Krists Ozols' ID3Tag distinguishing characteristics

    • read only
    • Can read v1.x, v2.2.x, v2.3.x, v2.4.x tags
    • Supports UTF-8, UTF-16, UTF-16BE and ISO8859-1 encoding
    • last updated July 2018
    • Pure Ruby

    Moumar's ruby-mp3info distinguishing characteristics

    • read and write
    • Only 2.3 version is supported for writings id3v2 tags
    • id3v2 tags are always written in UTF-16 encoding
    • last updated April 2017
    • Pure Ruby

    taglib-ruby distinguishing characteristics

    • read and write
    • Many formats, not just Mp3
    • Reading/writing ID3v1 and ID3v2 including ID3v2.4 and Unicode
    • last updated May 2018
    • Binding of a well-maintained C++ library
    0 讨论(0)
  • 2021-02-02 03:11

    I've used this:

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

    or

    gem install ruby-mp3info (add the regulation sudo for Mac or *nix)

    There's some rdoc documentation, which is nice. On the downside, I don't much like the use of upper-case field names, which seems too concerned to preserve the names from the spec. Maybe I should hack in some aliases. Anyway, this sample script scans my music library and counts words in titles:

    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 讨论(0)
提交回复
热议问题