Sha256: d438f56d012614929739dea1c2358aeb97d8c260c4f5c8e42ec11b92a52ae081
Contents?: true
Size: 1.25 KB
Versions: 1
Compression:
Stored size: 1.25 KB
Contents
# frozen_string_literal: true module Coltrane attr_reader :degree, :quality # It deals with chords in roman notation class RomanChord DIGITS = %w[I II III IV V VI VII].freeze NOTATION_REGEX = %r{ (?<degree>b?[ivIV]*) (?<quality>.*) }x def initialize(scale, notation) @scale = scale @notation = notation.match(NOTATION_REGEX).named_captures @notation['quality'] = @notation['quality'] .gsub('o', 'dim') .gsub('ΓΈ', 'm7b5') end def degree d = @notation['degree'] @flats = d.count('b') d = d.delete('b') @degree ||= DIGITS.index(d.upcase) + 1 end def quality_name [ minor_notation, @notation['quality'] ].join end def minor_notation return 'm' if !@notation['quality'].match?((/dim|m7b5/)) && !upcase? end def upcase? !!(@notation['degree'][0].match /[[:upper:]]/) end def chord Chord.new root_note: root_note, quality: quality end def quality q = quality_name ChordQuality.new(name: (q.size.zero? ? 'M' : q)) end def root_note binding.pry if @scale[degree] - @flats == Note['A#'] @scale[degree] - @flats end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
coltrane-1.0.24 | lib/coltrane/roman_chord.rb |