Sha256: 7744d78aef8ef836080516673afe04dea274aa6227af121830762c1efe988f61

Contents?: true

Size: 846 Bytes

Versions: 1

Compression:

Stored size: 846 Bytes

Contents

module Music
  class Chord
    def initialize(notes)
      @notes = notes.collect do |note|
        if note.is_a?(Note)
          note
        else
          Note.new(note)
        end
      end.sort
    end

    def note_strings
      @notes.collect(&:note_string)
    end

    def describe
      distances = (1...@notes.size).collect do |i|
        @notes[0].distance_to(@notes[i])
      end

      quality = case distances
      when [4, 7]
        :major
      when [3, 7]
        :minor
      when [3, 6]
        :diminished
      when [4, 8]
        :augmented
      when [4, 7, 11]
        :major_7
      when [3, 7, 10]
        :minor_7
      when [3, 6, 9]
        :diminished_7
      when [3, 6, 10]
        :half_diminished_7
      when [4, 8, 10]
        :augmented_7
      end

      [@notes.first.letter, quality]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
music-0.5.1 lib/music/chord.rb