Class: HeadMusic::DiatonicInterval::Naming

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

Overview

Accepts a number and number of semitones and privides the naming methods.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(number:, semitones:) ⇒ Naming

Returns a new instance of Naming.



206
207
208
209
# File 'lib/head_music/diatonic_interval.rb', line 206

def initialize(number:, semitones:)
  @number = number
  @semitones = semitones
end

Instance Attribute Details

#numberObject (readonly)

Returns the value of attribute number.



204
205
206
# File 'lib/head_music/diatonic_interval.rb', line 204

def number
  @number
end

#semitonesObject (readonly)

Returns the value of attribute semitones.



204
205
206
# File 'lib/head_music/diatonic_interval.rb', line 204

def semitones
  @semitones
end

Instance Method Details

#nameObject



238
239
240
241
242
243
244
245
246
# File 'lib/head_music/diatonic_interval.rb', line 238

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_nameObject



234
235
236
# File 'lib/head_music/diatonic_interval.rb', line 234

def number_name
  NUMBER_NAMES[number - 1] || (number.to_s + NAME_SUFFIXES[number % 10])
end

#quality_nameObject



223
224
225
226
227
228
# File 'lib/head_music/diatonic_interval.rb', line 223

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

#shorthandObject



248
249
250
251
# File 'lib/head_music/diatonic_interval.rb', line 248

def shorthand
  step_shorthand = (number == 1) ? "U" : number
  [quality.shorthand, step_shorthand].join
end

#simple_nameObject



219
220
221
# File 'lib/head_music/diatonic_interval.rb', line 219

def simple_name
  [quality_name, simple_number_name].join(" ")
end

#simple_numberObject



215
216
217
# File 'lib/head_music/diatonic_interval.rb', line 215

def simple_number
  @simple_number ||= octave_equivalent? ? 8 : (number - 1) % 7 + 1
end

#simple_number_nameObject



230
231
232
# File 'lib/head_music/diatonic_interval.rb', line 230

def simple_number_name
  NUMBER_NAMES[simple_number - 1]
end

#simple_semitonesObject



211
212
213
# File 'lib/head_music/diatonic_interval.rb', line 211

def simple_semitones
  @simple_semitones ||= semitones % 12
end