ruby-mp3info

Description

ruby-mp3info read low-level informations and manipulate tags on mp3 files.

Features/Problems

  • Written in pure ruby
  • Read low-level informations like bitrate, length, samplerate, etc...
  • Read, write, remove id3v1 and id3v2 tags
  • Correctly read VBR files (with or without Xing header)
  • Only 2.3 version is supported for writings id3v2 tags
  • id3v2 tags are always written in UTF-16 encoding

Synopsis

    require "mp3info"

    # Read and display infos & tags

    Mp3Info.open("myfile.mp3") do |mp3info|
      puts mp3info
    end

    # read/write tag1 and tag2 with Mp3Info#tag attribute
    # when reading tag2 have priority over tag1
    # when writing, each tag is written.

    Mp3Info.open("myfile.mp3") do |mp3|
      puts mp3.tag.title   
      puts mp3.tag.artist   
      puts mp3.tag.album
      puts mp3.tag.tracknum
      mp3.tag.title = "track title"
      mp3.tag.artist = "artist name"
    end

    # tags are written when calling Mp3Info#close or at the end of the #open block

    ### access id3v2 tags

    Mp3Info.open("myfile.mp3") do |mp3|
      # you can access four letter v2 tags like this
      puts mp3.tag2.TIT2
      mp3.tag2.TIT2 = "new TIT2"
      # or like that
      mp3.tag2["TIT2"]
      # at this time, only COMM tag is processed after reading and before writing
      # according to ID3v2#options hash
      mp3.tag2.options[:lang] = "FRE"
      mp3.tag2.COMM = "my comment in french, correctly handled when reading and writing"
    end

    ### image manipulation

    file = File.new('input_img','rb')
    Mp3Info.open '1.mp3' do |m|
       pictures = m.tag2.get_pictures # array of images :
       pictures.each do |description, data|
          File.open(description, "wb") { |f| f.write data }
      end
      m.tag2.remove_pictures # remove all images
      m.tag2.add_picture(file.read) # optionally, you may include options for the header:
      # options = { mime: 'gif', description: "description",
      #             pic_type: 0 }
    end

Requirements

  • iconv when using ruby 1.8

Install

gem install ruby-mp3info

Developers

After checking out the source, run:

$ rake newb

This task will install any missing dependencies, run the tests/specs, and generate the RDoc.

License

ruby

TODO:

  • encoder detection
  • support for more tags in id3v2
  • generalize id3v2 with other audio formats (APE, MPC, OGG, etc...)