class HeadMusic::DiatonicInterval
A diatonic interval is the distance between two spelled pitches.
Constants
- NAME_SUFFIXES
- NUMBER_NAMES
TODO: include Named module
- QUALITY_ABBREVIATIONS
- QUALITY_SEMITONES
Attributes
higher_pitch[R]
lower_pitch[R]
Public Class Methods
get(identifier)
click to toggle source
Accepts a name and returns the interval with middle c on the bottom
# File lib/head_music/diatonic_interval.rb, line 287 def self.get(identifier) name = Parser.new(identifier) semitones = Semitones.new(name.degree_name.to_sym, name.quality_name).count higher_pitch = HeadMusic::Pitch.from_number_and_letter(HeadMusic::Pitch.middle_c + semitones, name.higher_letter) new(HeadMusic::Pitch.middle_c, higher_pitch) end
new(pitch1, pitch2)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 294 def initialize(pitch1, pitch2) pitch1 = HeadMusic::Pitch.get(pitch1) pitch2 = HeadMusic::Pitch.get(pitch2) @lower_pitch, @higher_pitch = [pitch1, pitch2].sort end
Public Instance Methods
<=>(other)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 358 def <=>(other) other = self.class.get(other) unless other.is_a?(HeadMusic::DiatonicInterval) semitones <=> other.semitones end
above(pitch)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 336 def above(pitch) pitch = HeadMusic::Pitch.get(pitch) HeadMusic::Pitch.from_number_and_letter(pitch + semitones, pitch.letter_name.steps_up(number - 1)) end
below(pitch)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 341 def below(pitch) pitch = HeadMusic::Pitch.get(pitch) HeadMusic::Pitch.from_number_and_letter(pitch - semitones, pitch.letter_name.steps_down(number - 1)) end
consonance(style = :standard_practice)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 313 def consonance(style = :standard_practice) consonance_for_perfect(style) || consonance_for_major_and_minor || HeadMusic::Consonance.get(:dissonant) end
consonance?(style = :standard_practice)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 319 def consonance?(style = :standard_practice) consonance(style).perfect? || consonance(style).imperfect? end
Also aliased as: consonant?
dissonance?(style = :standard_practice)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 332 def dissonance?(style = :standard_practice) consonance(style).dissonant? end
imperfect_consonance?(style = :standard_practice)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 328 def imperfect_consonance?(style = :standard_practice) consonance(style).imperfect? end
interval_class()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 346 def interval_class [simple_semitones, 12 - simple_semitones].min end
interval_class_name()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 350 def interval_class_name "ic #{interval_class}" end
inversion()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 304 def inversion inverted_low_pitch = lower_pitch while inverted_low_pitch < higher_pitch inverted_low_pitch = HeadMusic::Pitch.fetch_or_create(lower_pitch.spelling, inverted_low_pitch.register + 1) end HeadMusic::DiatonicInterval.new(higher_pitch, inverted_low_pitch) end
Also aliased as: invert
perfect_consonance?(style = :standard_practice)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 324 def perfect_consonance?(style = :standard_practice) consonance(style).perfect? end
quality()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 300 def quality HeadMusic::Quality.get(quality_name) end
Private Instance Methods
category()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 377 def category @category ||= Category.new(number) end
consonance_for_major_and_minor()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 393 def consonance_for_major_and_minor HeadMusic::Consonance.get(third_or_compound? || sixth_or_compound? ? :imperfect : :dissonant) if major? || minor? end
consonance_for_perfect(style = :standard_practice)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 389 def consonance_for_perfect(style = :standard_practice) HeadMusic::Consonance.get(dissonant_fourth?(style) ? :dissonant : :perfect) if perfect? end
dissonant_fourth?(style = :standard_practice)
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 397 def dissonant_fourth?(style = :standard_practice) fourth_or_compound? && style == :two_part_harmony end
named_number?()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 385 def named_number? number < NUMBER_NAMES.length end
naming()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 381 def naming @naming ||= Naming.new(number: number, semitones: semitones) end
size()
click to toggle source
# File lib/head_music/diatonic_interval.rb, line 373 def size @size ||= Size.new(@lower_pitch, @higher_pitch) end