Sha256: 0cbe4d37a13b7194cedf3408b59bb36fc941e147e539061c59bf66e5cc6de88b

Contents?: true

Size: 916 Bytes

Versions: 6

Compression:

Stored size: 916 Bytes

Contents

# Key signatures are enharmonic when all pitch classes in one are respellings of the pitch classes in the other.
class HeadMusic::KeySignature::EnharmonicEquivalence
  attr_reader :key_signature

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

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

  def enharmonic_equivalent?(other)
    other = HeadMusic::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

  alias_method :enharmonic?, :enharmonic_equivalent?
  alias_method :equivalent?, :enharmonic_equivalent?

  private_class_method :new
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
head_music-7.0.5 lib/head_music/key_signature/enharmonic_equivalence.rb
head_music-7.0.4 lib/head_music/key_signature/enharmonic_equivalence.rb
head_music-7.0.3 lib/head_music/key_signature/enharmonic_equivalence.rb
head_music-7.0.2 lib/head_music/key_signature/enharmonic_equivalence.rb
head_music-7.0.1 lib/head_music/key_signature/enharmonic_equivalence.rb
head_music-7.0.0 lib/head_music/key_signature/enharmonic_equivalence.rb