Sha256: 496456744409422ef26ea61e97735319de56ea83225f9e1f0364df488de61441

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

module Coltrane
  # It describes a set of notes
  class NoteSet
    attr_reader :notes

    def initialize(arg)
      @notes = case arg
               when String then notes_from_note_string(arg)
               when Array  then notes_from_note_array(arg)
               end
    end

    def root_note
      notes.sort_by(&:number).first
    end

    def transpose_to(note_name)
      transpose_by(root_note.interval_to(note_name).number)
    end

    def transpose_by(interval)
      notes.map do |note|
        note.transpose_by(interval)
      end
    end

    def guitar_notes
      GuitarNoteSet.new(notes.map(&:guitar_notes).flatten)
    end

    def interval_sequence
      IntervalSequence.new(self)
    end

    protected

    def notes_from_note_string(note_string)
      notes_from_note_array(note_string.split(' '))
    end

    def notes_from_note_array(note_array)
      note_array.collect do |note|
        case note
        when String then Note.new(note)
        when Note   then note
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
coltrane-0.0.2 lib/coltrane/note_set.rb