#!/usr/bin/env ruby $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')) require 'mp3file' ARGV.each do |file| begin mp3 = Mp3file::MP3File.new(file) puts("File: #{mp3.file.path}") puts(" Size: #{mp3.file_size} bytes Audio_size: #{mp3.audio_size} bytes") puts(" #{mp3.mpeg_version} #{mp3.layer}") puts(" Bitrate: #{mp3.bitrate} kbps Samplerate: #{mp3.samplerate} Hz Mode: #{mp3.mode}") puts(" Duration: #{mp3.length} s") puts(" Frames: #{mp3.num_frames} Samples: #{mp3.total_samples}") header = mp3.first_header puts(" First MPEG frame at #{mp3.first_header_offset} bytes:") puts(" #{header.version} #{header.layer}") puts(" Bitrate: #{header.bitrate} bps Samplerate: #{header.samplerate} Hz") puts(" Mode: #{header.mode} Mode Extension: #{header.mode_extension} Emphasis: #{header.emphasis}") puts(" CRC: #{header.has_crc} Padding: #{header.has_padding}") puts(" Copyright: #{header.copyright} Original: #{header.original}") puts(" Samples: #{header.samples} Frame size: #{header.frame_size} Side bytes: #{header.side_bytes}") if mp3.xing_header xing = mp3.xing_header puts(" Xing header:") puts(" Frames: #{xing.frames} Bytes: #{xing.bytes} Quality: #{xing.quality} TOC: #{xing.toc ? 'present' : 'not present'}") end if mp3.vbri_header puts(" VBRI header!") end if mp3.id3v1tag? tag = mp3.id3v1_tag puts(" ID3v1 tag:") puts(" Title: #{tag.title.inspect}") puts(" Artist: #{tag.artist.inspect}") puts(" Album: #{tag.album.inspect}") puts(" Year: #{tag.year.inspect}") puts(" Comment: #{tag.comment.inspect}") puts(" Genre: #{tag.genre.inspect} (#{tag.genre_id.inspect})") end if mp3.id3v2tag? tag = mp3.id3v2_tag puts(" ID3v2 tag:") puts(" Size: #{tag.size} bytes") puts(" Version: #{tag.version.inspect}") puts(" Unused byes: #{tag.unused_bytes.inspect}") if !tag.frames.empty? puts(" Frames:") tag.frames.each do |frame| puts(" ID: #{frame.frame_id.inspect} size: #{frame.frame_size}") end end end mp3.extra_id3v2_tags.each do |offset, tag2| puts(" Extra ID3v2 tag:") puts(" Offset: #{offset} bytes") puts(" Size: #{tag2.size} bytes") puts(" Version: #{tag2.version.inspect}") puts(" Unused byes: #{tag2.unused_bytes.inspect}") if !tag2.frames.empty? puts(" Frames:") tag2.frames.each do |frame| puts(" ID: #{frame.frame_id.inspect} size: #{frame.frame_size}") end end end # frames = 0 # mp3.each_header do |offset, header2| # frames += 1 # puts(" MPEG frame at #{offset} bytes:") # puts(" #{header2.version} #{header2.layer}") # puts(" Bitrate: #{header2.bitrate} bps Samplerate: #{header2.samplerate} Hz") # puts(" Mode: #{header2.mode} Mode Extension: #{header2.mode_extension} Emphasis: #{header2.emphasis}") # puts(" CRC: #{header2.has_crc} Padding: #{header2.has_padding}") # puts(" Copyright: #{header2.copyright} Original: #{header2.original}") # puts(" Samples: #{header2.samples} Frame size: #{header2.frame_size} Side bytes: #{header2.side_bytes}") # end # puts " Total Frames: #{frames}" puts rescue $stderr.puts("Exception reading MP3 file %s: %s (%p)\n\t%s" % [ file, $!.message, $!.class, $!.backtrace.join("\n\t") ]) end end