Class: HeadMusic::Rudiment::TonalContext

Inherits:
Base
  • Object
show all
Defined in:
lib/head_music/rudiment/tonal_context.rb

Overview

Abstract base class representing a tonal context (system of pitches with a tonal center)

Direct Known Subclasses

DiatonicContext

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tonic_spelling) ⇒ TonalContext

Returns a new instance of TonalContext.



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

def initialize(tonic_spelling)
  @tonic_spelling = HeadMusic::Rudiment::Spelling.get(tonic_spelling)
end

Instance Attribute Details

#tonic_spellingObject (readonly)

Returns the value of attribute tonic_spelling.



6
7
8
# File 'lib/head_music/rudiment/tonal_context.rb', line 6

def tonic_spelling
  @tonic_spelling
end

Instance Method Details

#key_signatureObject

Raises:

  • (NotImplementedError)


32
33
34
# File 'lib/head_music/rudiment/tonal_context.rb', line 32

def key_signature
  raise NotImplementedError, "Subclasses must implement #key_signature"
end

#pitch_classesObject



24
25
26
# File 'lib/head_music/rudiment/tonal_context.rb', line 24

def pitch_classes
  scale.pitch_classes
end

#pitches(octave = nil) ⇒ Object



20
21
22
# File 'lib/head_music/rudiment/tonal_context.rb', line 20

def pitches(octave = nil)
  scale.pitches(direction: :ascending, octaves: 1)
end

#scaleObject

Raises:

  • (NotImplementedError)


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

def scale
  raise NotImplementedError, "Subclasses must implement #scale"
end

#spellingsObject



28
29
30
# File 'lib/head_music/rudiment/tonal_context.rb', line 28

def spellings
  scale.spellings
end

#tonic_pitch(octave = 4) ⇒ Object



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

def tonic_pitch(octave = 4)
  HeadMusic::Rudiment::Pitch.get("#{tonic_spelling}#{octave}")
end