Sha256: 9991cc962bc9abc422dd87f35a223ca5edd53606585f16d1eaa913e87b76858e
Contents?: true
Size: 1.44 KB
Versions: 2
Compression:
Stored size: 1.44 KB
Contents
module HeadMusic::Style::Annotations end class HeadMusic::Style::Annotations::ConsonantClimax < HeadMusic::Style::Annotation MESSAGE = "Peak on a consonant high note one time or twice with a step between." def marks HeadMusic::Style::Mark.for_each(highest_notes) if !adherent_climax? end private def adherent_climax? notes? && highest_pitch_consonant_with_tonic? && ( highest_pitch_appears_once? || highest_pitch_appears_twice_with_step_between? ) end def highest_pitch_consonant_with_tonic? functional_interval_to_highest_pitch.consonance?(:melodic) end def functional_interval_to_highest_pitch @functional_interval_to_highest_pitch ||= HeadMusic::FunctionalInterval.new(tonic_pitch, highest_pitch) end def highest_pitch_appears_once? highest_notes.length == 1 end def highest_pitch_appears_twice_with_step_between? highest_pitch_appears_twice? && single_note_between_highest_notes? && step_between_highest_notes? end def highest_pitch_appears_twice? highest_notes.length == 2 end def step_between_highest_notes? HeadMusic::MelodicInterval.new(voice, highest_notes.first, notes_between_highest_notes.first).step? end def single_note_between_highest_notes? notes_between_highest_notes.length == 1 end def notes_between_highest_notes indexes = highest_notes.map { |note| notes.index(note) } notes[(indexes.first + 1)..(indexes.last - 1)] || [] end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
head_music-0.14.8 | lib/head_music/style/annotations/consonant_climax.rb |
head_music-0.14.7 | lib/head_music/style/annotations/consonant_climax.rb |