Sha256: 7b800d1e4226aaf775ff09d5189578e1db9948093548da2477217d09bf7d634b
Contents?: true
Size: 756 Bytes
Versions: 3
Compression:
Stored size: 756 Bytes
Contents
module HeadMusic::Style::Annotations end class HeadMusic::Style::Annotations::MostlyConjunct < HeadMusic::Style::Annotation MESSAGE = "Use mostly conjunct motion." MINIMUM_CONJUNCT_PORTION = HeadMusic::GOLDEN_RATIO_INVERSE ** 2 # ~38% # Fux is 5/13 for lydian cantus firmus def marks marks_for_skips_and_leaps if conjunct_ratio < MINIMUM_CONJUNCT_PORTION end private def marks_for_skips_and_leaps melodic_intervals.map.with_index do |interval, i| HeadMusic::Style::Mark.for_all(notes[i..i+1], fitness: HeadMusic::SMALL_PENALTY_FACTOR) unless interval.step? end.compact end def conjunct_ratio return 1 if melodic_intervals.empty? melodic_intervals.count(&:step?).to_f / melodic_intervals.length end end
Version data entries
3 entries across 3 versions & 1 rubygems