Class: HeadMusic::Rudiment::KeySignature::EnharmonicEquivalence

Inherits:
EnharmonicEquivalence show all
Defined in:
lib/head_music/rudiment/key_signature/enharmonic_equivalence.rb

Overview

Key signatures are enharmonic when they represent the same set of altered pitch classes but with different spellings.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

This class inherits a constructor from HeadMusic::Rudiment::EnharmonicEquivalence

Class Method Details

.subject_classObject



3
4
5
# File 'lib/head_music/rudiment/key_signature/enharmonic_equivalence.rb', line 3

def self.subject_class
  HeadMusic::Rudiment::KeySignature
end

Instance Method Details

#different_spelling?(other) ⇒ Boolean (private)

Returns:

  • (Boolean)


21
22
23
# File 'lib/head_music/rudiment/key_signature/enharmonic_equivalence.rb', line 21

def different_spelling?(other)
  sorted_alteration_names(key_signature) != sorted_alteration_names(other)
end

#enharmonic_equivalent?(other) ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
12
13
# File 'lib/head_music/rudiment/key_signature/enharmonic_equivalence.rb', line 9

def enharmonic_equivalent?(other)
  other = HeadMusic::Rudiment::KeySignature.get(other)

  same_pitch_classes?(other) && different_spelling?(other)
end

#same_pitch_classes?(other) ⇒ Boolean (private)

Returns:

  • (Boolean)


17
18
19
# File 'lib/head_music/rudiment/key_signature/enharmonic_equivalence.rb', line 17

def same_pitch_classes?(other)
  sorted_pitch_class_numbers(key_signature) == sorted_pitch_class_numbers(other)
end

#sorted_alteration_names(key_signature) ⇒ Object (private)



29
30
31
# File 'lib/head_music/rudiment/key_signature/enharmonic_equivalence.rb', line 29

def sorted_alteration_names(key_signature)
  key_signature.alterations.map(&:to_s).sort
end

#sorted_pitch_class_numbers(key_signature) ⇒ Object (private)



25
26
27
# File 'lib/head_music/rudiment/key_signature/enharmonic_equivalence.rb', line 25

def sorted_pitch_class_numbers(key_signature)
  key_signature.pitch_classes.map(&:to_i).sort
end