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

Inherits:
Object
  • Object
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.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key_signature) ⇒ EnharmonicEquivalence

Returns a new instance of EnharmonicEquivalence.



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

def initialize(key_signature)
  @key_signature = HeadMusic::Rudiment::KeySignature.get(key_signature)
end

Instance Attribute Details

#key_signatureObject (readonly)

Returns the value of attribute key_signature.



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

def key_signature
  @key_signature
end

Class Method Details

.get(key_signature) ⇒ Object



5
6
7
8
9
# File 'lib/head_music/rudiment/key_signature/enharmonic_equivalence.rb', line 5

def self.get(key_signature)
  key_signature = HeadMusic::Rudiment::KeySignature.get(key_signature)
  @enharmonic_equivalences ||= {}
  @enharmonic_equivalences[key_signature.to_s] ||= new(key_signature)
end

Instance Method Details

#enharmonic_equivalent?(other) ⇒ Boolean Also known as: enharmonic?, equivalent?

Returns:

  • (Boolean)


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

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

  key_signature.pitch_classes.map(&:to_i).sort == other.pitch_classes.map(&:to_i).sort &&
    key_signature.alterations.map(&:to_s).sort != other.alterations.map(&:to_s).sort
end