Class: HeadMusic::Style::Guidelines::ConsonantDownbeats
- Inherits:
-
Annotation
- Object
- Annotation
- HeadMusic::Style::Guidelines::ConsonantDownbeats
show all
- Defined in:
- lib/head_music/style/guidelines/consonant_downbeats.rb
Overview
A counterpoint guideline.
Dissonant downbeats are permitted only when the counterpoint note is a
properly tied-over suspension (i.e., it began before the current CF note).
Constant Summary
collapse
- MESSAGE =
"Use consonant harmonic intervals on every downbeat (unless a tied suspension)."
Instance Method Summary
collapse
Instance Method Details
#dissonant_intervals ⇒ Object
26
27
28
|
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 26
def dissonant_intervals
downbeat_harmonic_intervals.select { |interval| interval.dissonance?(:two_part_harmony) }
end
|
#dissonant_pairs ⇒ Object
18
19
20
|
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 18
def dissonant_pairs
non_suspension_dissonant_intervals.map(&:notes).compact
end
|
#marks ⇒ Object
10
11
12
13
14
|
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 10
def marks
dissonant_pairs.map do |dissonant_pair|
HeadMusic::Style::Mark.for_all(dissonant_pair)
end.flatten
end
|
#non_suspension_dissonant_intervals ⇒ Object
22
23
24
|
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 22
def non_suspension_dissonant_intervals
dissonant_intervals.reject { |interval| tied_suspension?(interval) }
end
|
#tied_suspension?(interval) ⇒ Boolean
30
31
32
33
34
35
|
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 30
def tied_suspension?(interval)
cp_note = voice.note_at(interval.position)
return false unless cp_note
cp_note.position < interval.position
end
|