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