Class: HeadMusic::Rudiment::Key

Inherits:
QualifiedDiatonicContext show all
Defined in:
lib/head_music/rudiment/key.rb

Overview

Represents a musical key (major or minor)

Constant Summary collapse

QUALITIES =
%i[major minor].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

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

Instance Attribute Details

#alias_name_keysObject (readonly) Originally defined in module Named

Returns the value of attribute alias_name_keys.

#name_keyObject (readonly) Originally defined in module Named

Returns the value of attribute name_key.

Class Method Details

.default_qualifierObject



8
9
10
# File 'lib/head_music/rudiment/key.rb', line 8

def self.default_qualifier
  :major
end

.invalid_qualifier_messageObject



16
17
18
# File 'lib/head_music/rudiment/key.rb', line 16

def self.invalid_qualifier_message
  "Quality must be :major or :minor"
end

.valid_qualifiersObject



12
13
14
# File 'lib/head_music/rudiment/key.rb', line 12

def self.valid_qualifiers
  QUALITIES
end

Instance Method Details

#major?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/head_music/rudiment/key.rb', line 22

def major?
  quality == :major
end

#minor?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/head_music/rudiment/key.rb', line 26

def minor?
  quality == :minor
end

#parallelObject



42
43
44
45
46
47
48
# File 'lib/head_music/rudiment/key.rb', line 42

def parallel
  if major?
    self.class.get("#{tonic_spelling} minor")
  else
    self.class.get("#{tonic_spelling} major")
  end
end

#relativeObject



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/head_music/rudiment/key.rb', line 30

def relative
  if major?
    # Major to relative minor: down a minor third (3 semitones)
    relative_pitch = tonic_pitch + -3
    self.class.get("#{relative_pitch.spelling} minor")
  else
    # Minor to relative major: up a minor third (3 semitones)
    relative_pitch = tonic_pitch + 3
    self.class.get("#{relative_pitch.spelling} major")
  end
end