Class: HeadMusic::Style::Guidelines::ConsonantDownbeats

Inherits:
HeadMusic::Style::Guideline 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).

Instance Method Summary collapse

Constructor Details

This class inherits a constructor from HeadMusic::Style::Guideline

Instance Method Details

#dissonant_intervalsObject (private)



24
25
26
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 24

def dissonant_intervals
  downbeat_harmonic_intervals.select { |interval| interval.dissonance?(:two_part_harmony) }
end

#dissonant_pairsObject (private)



16
17
18
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 16

def dissonant_pairs
  non_suspension_dissonant_intervals.map(&:notes).compact
end

#marksObject



8
9
10
11
12
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 8

def marks
  dissonant_pairs.map do |dissonant_pair|
    HeadMusic::Style::Mark.for_all(dissonant_pair)
  end.flatten
end

#non_suspension_dissonant_intervalsObject (private)



20
21
22
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 20

def non_suspension_dissonant_intervals
  dissonant_intervals.reject { |interval| tied_suspension?(interval) }
end

#tied_suspension?(interval) ⇒ Boolean (private)

Returns:

  • (Boolean)


28
29
30
31
32
33
# File 'lib/head_music/style/guidelines/consonant_downbeats.rb', line 28

def tied_suspension?(interval)
  cp_note = voice.note_at(interval.position)
  return false unless cp_note

  cp_note.position < interval.position
end