Class: HeadMusic::DiatonicInterval::Semitones

Inherits:
Object
  • Object
show all
Defined in:
lib/head_music/diatonic_interval.rb

Overview

Accepts a name and a quality and returns the number of semitones

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, quality_name) ⇒ Semitones

Returns a new instance of Semitones.



95
96
97
# File 'lib/head_music/diatonic_interval.rb', line 95

def initialize(name, quality_name)
  @count = Semitones.degree_quality_semitones.dig(name, quality_name)
end

Instance Attribute Details

#countObject (readonly)

Returns the value of attribute count.



93
94
95
# File 'lib/head_music/diatonic_interval.rb', line 93

def count
  @count
end

Class Method Details

._degree_quality_modifications(quality) ⇒ Object



117
118
119
120
121
122
123
# File 'lib/head_music/diatonic_interval.rb', line 117

def self._degree_quality_modifications(quality)
  if quality == :perfect
    HeadMusic::Quality::PERFECT_INTERVAL_MODIFICATION.invert
  else
    HeadMusic::Quality::MAJOR_INTERVAL_MODIFICATION.invert
  end
end

._semitones_for_degree(quality, default_semitones) ⇒ Object



109
110
111
112
113
114
115
# File 'lib/head_music/diatonic_interval.rb', line 109

def self._semitones_for_degree(quality, default_semitones)
  {}.tap do |semitones|
    _degree_quality_modifications(quality).each do |current_quality, delta|
      semitones[current_quality] = default_semitones + delta
    end
  end
end

.degree_quality_semitonesObject



99
100
101
102
103
104
105
106
107
# File 'lib/head_music/diatonic_interval.rb', line 99

def self.degree_quality_semitones
  @degree_quality_semitones ||= {}.tap do |degree_quality_semitones|
    QUALITY_SEMITONES.each do |degree_name, qualities|
      default_quality = qualities.keys.first
      default_semitones = qualities[default_quality]
      degree_quality_semitones[degree_name] = _semitones_for_degree(default_quality, default_semitones)
    end
  end
end