class HeadMusic::Style::Guidelines::MostlyConjunct

A counterpoint guideline

Constants

MESSAGE
MINIMUM_CONJUNCT_PORTION

Public Instance Methods

marks() click to toggle source

~38% Fux is 5/13 for lydian cantus firmus

# File lib/head_music/style/guidelines/mostly_conjunct.rb, line 14
def marks
  marks_for_skips_and_leaps if conjunct_ratio < MINIMUM_CONJUNCT_PORTION
end

Private Instance Methods

conjunct_ratio() click to toggle source
# File lib/head_music/style/guidelines/mostly_conjunct.rb, line 26
def conjunct_ratio
  return 1 if melodic_intervals.empty?

  melodic_intervals.count(&:step?).to_f / melodic_intervals.length
end
marks_for_skips_and_leaps() click to toggle source
# File lib/head_music/style/guidelines/mostly_conjunct.rb, line 20
def marks_for_skips_and_leaps
  melodic_intervals.
    reject(&:step?).
    map { |interval| HeadMusic::Style::Mark.for_all(interval.notes, fitness: HeadMusic::SMALL_PENALTY_FACTOR) }
end