Here is my attempt at a guitarist.
class Guitarist
  def initialize(guitar=nil)
    @guitar = guitar unless guitar.nil?
    @guitar = Guitar.new(Guitar::CLEAN_ELECTRIC) if guitar.nil?
  end
  def play(tab)
    tab.chords.each { |notes| @guitar.play(notes)  }
    @guitar.dump
  end
end

He's not a good guitarist. He only plays in the first 9 frets. He can
play all of the included tabs on the included guitar. Of course the
hard work is done by the tab reader.

class Tab
  def initialize(tab_file)
    @chords = []
    @file = tab_file
    @tab = extract_tabs(tab_file)
  end

  #select only lines containing tab notation and remove extraneous chars
  def extract_tabs(file)
    File.readlines(file).select { |line|
      line =~ /[eBCDAE|-][|-]/
    }.collect { |line|
      line.gsub(/[eBGDAE|\s]/, '')
    }
  end

  def chords
    return [] if @tab.empty?
    return make_chords if @chords.empty?
    @chords
  end

  #break each string into individual notes
  # then zip and join the notes into the notation the guitar expects
  def make_chords
    @tab.collect! { |string| string.split(//) }
    (0...sections).each { |e|
      @chords << @tab[e+5].zip(@tab[e+4], @tab[e+3], @tab[e+2],
@tab[e+1], @tab[e]).collect { |chord| chord.join }
    }
    @chords.flatten!
  end

  def sections
    @tab.length / 6
  end
end


And that's all there is to my simple guitarist. Thanks Ross for
another neat quiz.

Anthony Moralez
http://anthonysseblog.blogspot.com