class HeadMusic::DiatonicInterval::Naming
Accepts a number and number of semitones and privides the naming methods.
Attributes
number[R]
semitones[R]
Public Class Methods
new(number:, semitones:)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 208 def initialize(number:, semitones:) @number = number @semitones = semitones end
Public Instance Methods
name()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 240 def name if named_number? [quality_name, number_name].join(' ') elsif simple_name == 'perfect octave' "#{octaves.humanize} octaves" else "#{octaves.humanize} octaves and #{quality.article} #{simple_name}" end end
number_name()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 236 def number_name NUMBER_NAMES[number - 1] || (number.to_s + NAME_SUFFIXES[number % 10]) end
quality_name()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 225 def quality_name starting_quality = QUALITY_SEMITONES[simple_number_name.to_sym].keys.first delta = simple_semitones - (QUALITY_SEMITONES[simple_number_name.to_sym][starting_quality] % 12) delta -= 12 while delta >= 6 HeadMusic::Quality.from(starting_quality, delta) end
shorthand()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 250 def shorthand step_shorthand = number == 1 ? 'U' : number [quality.shorthand, step_shorthand].join end
simple_name()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 221 def simple_name [quality_name, simple_number_name].join(' ') end
simple_number()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 217 def simple_number @simple_number ||= octave_equivalent? ? 8 : (number - 1) % 7 + 1 end
simple_number_name()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 232 def simple_number_name NUMBER_NAMES[simple_number - 1] end
simple_semitones()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 213 def simple_semitones @simple_semitones ||= semitones % 12 end
Private Instance Methods
named_number?()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 257 def named_number? number < NUMBER_NAMES.length end
octave_equivalent?()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 269 def octave_equivalent? number > 1 && ((number - 1) % 7).zero? end
octaves()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 265 def octaves @octaves ||= semitones / 12 end
quality()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 261 def quality @quality ||= HeadMusic::Quality.get(quality_name) end