Hi, all.

Please find attached a simple Ruby script that rummages through my 
ITunes files, reads the first megabyte or so, finds the encoder, and 
then prints the encoder and filename.  This lets me know which tracks 
need re-ripping.

This script blows through half a gig of RAM while running, and I really 
do not see why.  It should only have perhaps a few megabytes at max in 
RAM.

FWIW, the output looks like:
iTunes v4.9, QuickTime 7.0.1  /Users/work/Music/iTunes/iTunes 
Music/Yellowcard/Ocean Avenue  Song1.m4a
iTunes v4.9, QuickTime 7.0.1  /Users/work/Music/iTunes/iTunes 
Music/Yellowcard/Ocean Avenue  Song2.m4a
iTunes v4.9, QuickTime 7.0.1  /Users/work/Music/iTunes/iTunes 
Music/Yellowcard/Ocean Avenue  Song3.m4a

Style and speed optimizations are accepted, but the runtime is under a 
minute now for the 5500 files I have in my library, so memory usage is 
my real problem.

Help?

#!/usr/bin/env ruby
require 'find'
def procpath(f)
   if File.file?(f) then
      if File.fnmatch("*.m4a",f) then
         found = false
         data = IO.read(f, 65536*8)
         re = /[[:alnum:]_., ]{9,}/
         data.scan(re) do |string|
            if (string =~ /QuickTime/) then
               filename = File.basename(f)
               dirname = File.dirname(f)
#               puts "#{string}   #{dirname}"
              puts "#{string}   #{dirname}  #{filename}"
               found = true
               break
            end
         end
         if (!found) then
            puts "Unknown  #{f}"
         end
      end
   elsif File.directory?(f) && !File.fnmatch(".", f) && 
!File.fnmatch("..", f) then
      Dir.foreach(f) { |subf| procpath(subf) }
   end
end

Find.find("/Users/work/Music/iTunes/iTunes Music/") do |f|
   procpath(f)
end

Scott
--
scott / alodar.nospam.com
Java, Cocoa, and Database consulting for the life sciences

-- 
Scott Ellsworth
scott / alodar.nospam.com
Java and database consulting for the life sciences