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.



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

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

Instance Attribute Details

#numberObject (readonly)

Returns the value of attribute number.



202
203
204
# File 'lib/head_music/diatonic_interval.rb', line 202

def number
  @number
end

#semitonesObject (readonly)

Returns the value of attribute semitones.



202
203
204
# File 'lib/head_music/diatonic_interval.rb', line 202

def semitones
  @semitones
end

Instance Method Details

#nameObject



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

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



232
233
234
# File 'lib/head_music/diatonic_interval.rb', line 232

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

#quality_nameObject



221
222
223
224
225
226
# File 'lib/head_music/diatonic_interval.rb', line 221

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



246
247
248
249
# File 'lib/head_music/diatonic_interval.rb', line 246

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

#simple_nameObject



217
218
219
# File 'lib/head_music/diatonic_interval.rb', line 217

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

#simple_numberObject



213
214
215
# File 'lib/head_music/diatonic_interval.rb', line 213

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

#simple_number_nameObject



228
229
230
# File 'lib/head_music/diatonic_interval.rb', line 228

def simple_number_name
  NUMBER_NAMES[simple_number - 1]
end

#simple_semitonesObject



209
210
211
# File 'lib/head_music/diatonic_interval.rb', line 209

def simple_semitones
  @simple_semitones ||= semitones % 12
end