Class: HeadMusic::Analysis::DiatonicInterval::Semitones

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

Overview

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

Constant Summary collapse

QUALITY_SEMITONES =
HeadMusic::Analysis::DiatonicInterval::QUALITY_SEMITONES

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, quality_name) ⇒ Semitones



7
8
9
# File 'lib/head_music/analysis/diatonic_interval/semitones.rb', line 7

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

Instance Attribute Details

#countObject (readonly)

Returns the value of attribute count.



5
6
7
# File 'lib/head_music/analysis/diatonic_interval/semitones.rb', line 5

def count
  @count
end

Class Method Details

._degree_quality_modifications(quality) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/head_music/analysis/diatonic_interval/semitones.rb', line 29

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

._semitones_for_degree(quality, default_semitones) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/head_music/analysis/diatonic_interval/semitones.rb', line 21

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



11
12
13
14
15
16
17
18
19
# File 'lib/head_music/analysis/diatonic_interval/semitones.rb', line 11

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