class HeadMusic::DiatonicInterval::Semitones

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

Attributes

count[R]

Public Class Methods

_degree_quality_modifications(quality) click to toggle source
# File lib/head_music/diatonic_interval.rb, line 119
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) click to toggle source
# File lib/head_music/diatonic_interval.rb, line 111
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_semitones() click to toggle source
# File lib/head_music/diatonic_interval.rb, line 99
def self.degree_quality_semitones
  @degree_quality_semitones ||= begin
    {}.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
end
new(name, quality_name) click to toggle source
# File lib/head_music/diatonic_interval.rb, line 95
def initialize(name, quality_name)
  @count = Semitones.degree_quality_semitones.dig(name, quality_name)
end