From: come Date: 2007-08-27T01:55:04+09:00 Subject: Re: ID3 Tags (#136) Hi, Here is my solution : require "delegate" class ID3Tags < DelegateClass(Struct) MP3_TYPE=%w(Blues Classic Rock Country Dance Disco Funk Grunge Hip- Hop Jazz Metal New Age Oldies Other Pop R&B Rap Reggae Rock Techno Industrial Alternative Ska Death Metal Pranks Soundtrack Euro-Techno Ambient Trip-Hop Vocal Jazz+Funk Fusion Trance Classical Instrumental Acid House Game Sound Clip Gospel Noise AlternRock Bass Soul Punk Space Meditative Instrumental Pop Instrumental Rock Ethnic Gothic Darkwave Techno-Industrial Electronic Pop-Folk Eurodance Dream Southern Rock Comedy Cult Gangsta Top 40 Christian Rap Pop/Funk Jungle Native American Cabaret New Wave Psychadelic Rave Showtunes Trailer Lo- Fi Tribal Acid Punk Acid Jazz Polka Retro Musical Rock & Roll Hard Rock Folk Folk-Rock National Folk Swing Fast Fusion Bebob Latin Revival Celtic Bluegrass Avantgarde Gothic Rock Progressive Rock Psychedelic Rock Symphonic Rock Slow Rock Big Band Chorus Easy Listening Acoustic Humour Speech Chanson Opera Chamber Music Sonata Symphony Booty Bass Primus Porn Groove Satire Slow Jam Club Tango Samba Folklore Ballad Power Ballad Rhythmic Soul Freestyle Duet Punk Rock Drum Solo A capella Euro-House Dance Hall) Tag=Struct.new(:song,:album,:artist,:year,:comment,:track,:genre) def initialize(file) raise "No ID3 Tag detected" unless File.size(file) > 128 File.open(file,"r") do |f| f.seek(-128, IO::SEEK_END) tag = f.read.unpack('A3A30A30A30A4A30C1') raise "No ID3 Tag detected" unless tag[0] == 'TAG' if tag[5][-2] == 0 and tag[5][-1] != 0 tag[5]=tag[5].unpack('A28A1C1').values_at(0,2) else tag[5]=[tag[5],nil] end super(@tag=Tag.new(*tag.flatten[1..-1])) end end def to_s members.each do |name| puts "#{name} : #{send(name)}" end end def genre MP3_TYPE[@tag.genre] end end Come