Sha256: 0ef4fdeea806f3de31acf95391d34e73ea7933af1c4aa2cc33e3ff946a05a16b

Contents?: true

Size: 1.14 KB

Versions: 9

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

# Module for guides
module HeadMusic::Style::Guides; end

# Rules for first species harmony
class HeadMusic::Style::Guides::FirstSpeciesHarmony
  RULESET = [
    HeadMusic::Style::Guidelines::ApproachPerfectionContrarily,
    HeadMusic::Style::Guidelines::AvoidCrossingVoices,
    HeadMusic::Style::Guidelines::AvoidOverlappingVoices,
    HeadMusic::Style::Guidelines::ConsonantDownbeats,
    HeadMusic::Style::Guidelines::NoUnisonsInMiddle,
    HeadMusic::Style::Guidelines::OneToOne,
    HeadMusic::Style::Guidelines::PreferContraryMotion,
    HeadMusic::Style::Guidelines::PreferImperfect
  ].freeze

  def self.analyze(voice)
    RULESET.map { |rule| rule.new(voice) }
  end
end

# TODO: Guideline against leaping into P8 even by contrary motion.
# TODO: Guideline allowing oblique motion < ~15% of the time.
# TODO: Guideline against battuta (10-8 not at cadence, unless 10-8-6 voice exchange)
# TODO: 16th C: No M6 leaps. m6 leaps ascending only.
# TODO: 16th C (?): Avoid perfect consonances on consecutive downbeats
# TODO: 16th C: No 5-7-1 ending
# TODO: 16th C Cantus Firmus: Raise the 7 in the cadence, except in Phrygian

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
head_music-4.0.1 lib/head_music/style/guides/first_species_harmony.rb
head_music-4.0.0 lib/head_music/style/guides/first_species_harmony.rb
head_music-3.0.1 lib/head_music/style/guides/first_species_harmony.rb
head_music-3.0.0 lib/head_music/style/guides/first_species_harmony.rb
head_music-2.0.1 lib/head_music/style/guides/first_species_harmony.rb
head_music-2.0.0 lib/head_music/style/guides/first_species_harmony.rb
head_music-1.0.0 lib/head_music/style/guides/first_species_harmony.rb
head_music-0.29.0 lib/head_music/style/guides/first_species_harmony.rb
head_music-0.28.0 lib/head_music/style/guides/first_species_harmony.rb