head_music 0.19.0 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/lib/head_music/chord.rb +29 -3
  4. data/lib/head_music/functional_interval.rb +175 -94
  5. data/lib/head_music/octave.rb +8 -0
  6. data/lib/head_music/style/analysis.rb +7 -7
  7. data/lib/head_music/style/{annotations → guidelines}/always_move.rb +3 -3
  8. data/lib/head_music/style/{annotations → guidelines}/approach_perfection_contrarily.rb +3 -3
  9. data/lib/head_music/style/{annotations → guidelines}/at_least_eight_notes.rb +3 -3
  10. data/lib/head_music/style/{annotations → guidelines}/avoid_crossing_voices.rb +3 -3
  11. data/lib/head_music/style/{annotations → guidelines}/avoid_overlapping_voices.rb +3 -3
  12. data/lib/head_music/style/{annotations → guidelines}/consonant_climax.rb +3 -3
  13. data/lib/head_music/style/{annotations → guidelines}/consonant_downbeats.rb +3 -3
  14. data/lib/head_music/style/{annotations → guidelines}/diatonic.rb +3 -3
  15. data/lib/head_music/style/{annotations → guidelines}/direction_changes.rb +3 -3
  16. data/lib/head_music/style/{annotations → guidelines}/end_on_perfect_consonance.rb +3 -3
  17. data/lib/head_music/style/{annotations → guidelines}/end_on_tonic.rb +3 -3
  18. data/lib/head_music/style/guidelines/frequent_direction_changes.rb +13 -0
  19. data/lib/head_music/style/{annotations → guidelines}/limit_octave_leaps.rb +3 -3
  20. data/lib/head_music/style/guidelines/moderate_direction_changes.rb +13 -0
  21. data/lib/head_music/style/{annotations → guidelines}/mostly_conjunct.rb +3 -3
  22. data/lib/head_music/style/{annotations → guidelines}/no_rests.rb +3 -3
  23. data/lib/head_music/style/{annotations → guidelines}/no_unisons_in_middle.rb +3 -3
  24. data/lib/head_music/style/{annotations → guidelines}/notes_same_length.rb +3 -3
  25. data/lib/head_music/style/{annotations → guidelines}/one_to_one.rb +3 -3
  26. data/lib/head_music/style/{annotations → guidelines}/prefer_contrary_motion.rb +3 -3
  27. data/lib/head_music/style/{annotations → guidelines}/prefer_imperfect.rb +3 -3
  28. data/lib/head_music/style/{annotations → guidelines}/prepare_octave_leaps.rb +3 -3
  29. data/lib/head_music/style/{annotations → guidelines}/recover_large_leaps.rb +3 -3
  30. data/lib/head_music/style/{annotations → guidelines}/singable_intervals.rb +3 -3
  31. data/lib/head_music/style/{annotations → guidelines}/singable_range.rb +3 -3
  32. data/lib/head_music/style/{annotations → guidelines}/single_large_leaps.rb +3 -3
  33. data/lib/head_music/style/{annotations → guidelines}/start_on_perfect_consonance.rb +3 -3
  34. data/lib/head_music/style/{annotations → guidelines}/start_on_tonic.rb +3 -3
  35. data/lib/head_music/style/{annotations → guidelines}/step_down_to_final_note.rb +3 -3
  36. data/lib/head_music/style/{annotations → guidelines}/step_out_of_unison.rb +3 -3
  37. data/lib/head_music/style/{annotations → guidelines}/step_to_final_note.rb +3 -3
  38. data/lib/head_music/style/{annotations → guidelines}/step_up_to_final_note.rb +3 -3
  39. data/lib/head_music/style/{annotations → guidelines}/up_to_fourteen_notes.rb +3 -3
  40. data/lib/head_music/style/guides/first_species_harmony.rb +22 -0
  41. data/lib/head_music/style/guides/first_species_melody.rb +28 -0
  42. data/lib/head_music/style/guides/fux_cantus_firmus.rb +30 -0
  43. data/lib/head_music/style/guides/modern_cantus_firmus.rb +31 -0
  44. data/lib/head_music/style/mark.rb +1 -1
  45. data/lib/head_music/version.rb +1 -1
  46. data/lib/head_music.rb +39 -39
  47. metadata +39 -39
  48. data/lib/head_music/style/annotations/frequent_direction_changes.rb +0 -13
  49. data/lib/head_music/style/annotations/moderate_direction_changes.rb +0 -13
  50. data/lib/head_music/style/rulesets/first_species_harmony.rb +0 -22
  51. data/lib/head_music/style/rulesets/first_species_melody.rb +0 -28
  52. data/lib/head_music/style/rulesets/fux_cantus_firmus.rb +0 -30
  53. data/lib/head_music/style/rulesets/modern_cantus_firmus.rb +0 -31
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::MostlyConjunct < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::MostlyConjunct < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Use mostly conjunct motion.'
9
9
 
10
10
  MINIMUM_CONJUNCT_PORTION = HeadMusic::GOLDEN_RATIO_INVERSE**2
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::NoRests < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::NoRests < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Place a note in each measure.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::NoUnisonsInMiddle < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::NoUnisonsInMiddle < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Unisons may only be used in the first and last note.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::NotesSameLength < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::NotesSameLength < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Use consistent rhythmic unit.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::OneToOne < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::OneToOne < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Place a note for each note in the other voice.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::PreferContraryMotion < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::PreferContraryMotion < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Prefer contrary motion. Move voices in different melodic directions.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::PreferImperfect < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::PreferImperfect < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Prefer imperfect harmonic intervals.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::PrepareOctaveLeaps < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::PrepareOctaveLeaps < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Enter and exit an octave leap from within.'
9
9
 
10
10
  def marks
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # Ok, so a rule might be that after the first leap (after previous steps)
7
7
  # one should normally move by step in the opposite direction
8
8
  # unless another leap (in either direction) creates a consonant triad.
9
9
  # - Brian
10
- class HeadMusic::Style::Annotations::RecoverLargeLeaps < HeadMusic::Style::Annotation
10
+ class HeadMusic::Style::Guidelines::RecoverLargeLeaps < HeadMusic::Style::Annotation
11
11
  MESSAGE = 'Recover large leaps by step in the opposite direction.'
12
12
 
13
13
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::SingableIntervals < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::SingableIntervals < HeadMusic::Style::Annotation
8
8
  PERMITTED_ASCENDING = %w[PU m2 M2 m3 M3 P4 P5 m6 P8].freeze
9
9
  PERMITTED_DESCENDING = %w[PU m2 M2 m3 M3 P4 P5 P8].freeze
10
10
 
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A voice shouldn't expend the range of a 10th.
7
- class HeadMusic::Style::Annotations::SingableRange < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::SingableRange < HeadMusic::Style::Annotation
8
8
  MAXIMUM_RANGE = 10
9
9
 
10
10
  MESSAGE = 'Limit melodic range to a 10th.'
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::SingleLargeLeaps < HeadMusic::Style::Annotations::RecoverLargeLeaps
7
+ class HeadMusic::Style::Guidelines::SingleLargeLeaps < HeadMusic::Style::Guidelines::RecoverLargeLeaps
8
8
  MESSAGE = 'Recover leaps by step, repetition, opposite direction, or spelling triad.'
9
9
 
10
10
  private
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # marks the voice if the first note is not the first or fifth scale degree of the key.
7
- class HeadMusic::Style::Annotations::StartOnPerfectConsonance < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::StartOnPerfectConsonance < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Start on the tonic or a perfect consonance above the tonic (unless bass voice).'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::StartOnTonic < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::StartOnTonic < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Start on the first scale degree.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::StepDownToFinalNote < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::StepDownToFinalNote < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Step down to the final note.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::StepOutOfUnison < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::StepOutOfUnison < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Exit a unison by step.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::StepToFinalNote < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::StepToFinalNote < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Step to the final note.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::StepUpToFinalNote < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::StepUpToFinalNote < HeadMusic::Style::Annotation
8
8
  MESSAGE = 'Step up to final note.'
9
9
 
10
10
  def marks
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
3
+ # Module for style guidelines.
4
+ module HeadMusic::Style::Guidelines; end
5
5
 
6
6
  # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::UpToFourteenNotes < HeadMusic::Style::Annotation
7
+ class HeadMusic::Style::Guidelines::UpToFourteenNotes < HeadMusic::Style::Annotation
8
8
  MAXIMUM_NOTES = 14
9
9
 
10
10
  MESSAGE = 'Write up to fourteen notes.'
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Module for guides
4
+ module HeadMusic::Style::Guides; end
5
+
6
+ # Rules for first species harmony
7
+ class HeadMusic::Style::Guides::FirstSpeciesHarmony
8
+ RULESET = [
9
+ HeadMusic::Style::Guidelines::ApproachPerfectionContrarily,
10
+ HeadMusic::Style::Guidelines::AvoidCrossingVoices,
11
+ HeadMusic::Style::Guidelines::AvoidOverlappingVoices,
12
+ HeadMusic::Style::Guidelines::ConsonantDownbeats,
13
+ HeadMusic::Style::Guidelines::NoUnisonsInMiddle,
14
+ HeadMusic::Style::Guidelines::OneToOne,
15
+ HeadMusic::Style::Guidelines::PreferContraryMotion,
16
+ HeadMusic::Style::Guidelines::PreferImperfect,
17
+ ].freeze
18
+
19
+ def self.analyze(voice)
20
+ RULESET.map { |rule| rule.new(voice) }
21
+ end
22
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Module for guides
4
+ module HeadMusic::Style::Guides; end
5
+
6
+ # Rules for first species melodies
7
+ class HeadMusic::Style::Guides::FirstSpeciesMelody
8
+ RULESET = [
9
+ HeadMusic::Style::Guidelines::ConsonantClimax,
10
+ HeadMusic::Style::Guidelines::Diatonic,
11
+ HeadMusic::Style::Guidelines::EndOnTonic,
12
+ HeadMusic::Style::Guidelines::FrequentDirectionChanges,
13
+ HeadMusic::Style::Guidelines::LimitOctaveLeaps,
14
+ HeadMusic::Style::Guidelines::MostlyConjunct,
15
+ HeadMusic::Style::Guidelines::NoRests,
16
+ HeadMusic::Style::Guidelines::NotesSameLength,
17
+ HeadMusic::Style::Guidelines::PrepareOctaveLeaps,
18
+ HeadMusic::Style::Guidelines::SingableIntervals,
19
+ HeadMusic::Style::Guidelines::SingableRange,
20
+ HeadMusic::Style::Guidelines::StartOnPerfectConsonance,
21
+ HeadMusic::Style::Guidelines::StepOutOfUnison,
22
+ HeadMusic::Style::Guidelines::StepUpToFinalNote,
23
+ ].freeze
24
+
25
+ def self.analyze(voice)
26
+ RULESET.map { |rule| rule.new(voice) }
27
+ end
28
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Module for guides
4
+ module HeadMusic::Style::Guides; end
5
+
6
+ # Rules for the cantus firmus according to Fux.
7
+ class HeadMusic::Style::Guides::FuxCantusFirmus
8
+ RULESET = [
9
+ HeadMusic::Style::Guidelines::AlwaysMove,
10
+ HeadMusic::Style::Guidelines::AtLeastEightNotes,
11
+ HeadMusic::Style::Guidelines::ConsonantClimax,
12
+ HeadMusic::Style::Guidelines::Diatonic,
13
+ HeadMusic::Style::Guidelines::EndOnTonic,
14
+ HeadMusic::Style::Guidelines::FrequentDirectionChanges,
15
+ HeadMusic::Style::Guidelines::LimitOctaveLeaps,
16
+ HeadMusic::Style::Guidelines::MostlyConjunct,
17
+ HeadMusic::Style::Guidelines::NoRests,
18
+ HeadMusic::Style::Guidelines::NotesSameLength,
19
+ HeadMusic::Style::Guidelines::RecoverLargeLeaps,
20
+ HeadMusic::Style::Guidelines::SingableIntervals,
21
+ HeadMusic::Style::Guidelines::SingableRange,
22
+ HeadMusic::Style::Guidelines::StartOnTonic,
23
+ HeadMusic::Style::Guidelines::StepDownToFinalNote,
24
+ HeadMusic::Style::Guidelines::UpToFourteenNotes,
25
+ ].freeze
26
+
27
+ def self.analyze(voice)
28
+ RULESET.map { |rule| rule.new(voice) }
29
+ end
30
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Module for guides
4
+ module HeadMusic::Style::Guides; end
5
+
6
+ # Modern rules for the cantus firmus
7
+ class HeadMusic::Style::Guides::ModernCantusFirmus
8
+ RULESET = [
9
+ HeadMusic::Style::Guidelines::AlwaysMove,
10
+ HeadMusic::Style::Guidelines::AtLeastEightNotes,
11
+ HeadMusic::Style::Guidelines::ConsonantClimax,
12
+ HeadMusic::Style::Guidelines::Diatonic,
13
+ HeadMusic::Style::Guidelines::EndOnTonic,
14
+ HeadMusic::Style::Guidelines::LimitOctaveLeaps,
15
+ HeadMusic::Style::Guidelines::ModerateDirectionChanges,
16
+ HeadMusic::Style::Guidelines::MostlyConjunct,
17
+ HeadMusic::Style::Guidelines::NoRests,
18
+ HeadMusic::Style::Guidelines::NotesSameLength,
19
+ HeadMusic::Style::Guidelines::PrepareOctaveLeaps,
20
+ HeadMusic::Style::Guidelines::SingableIntervals,
21
+ HeadMusic::Style::Guidelines::SingableRange,
22
+ HeadMusic::Style::Guidelines::SingleLargeLeaps,
23
+ HeadMusic::Style::Guidelines::StartOnTonic,
24
+ HeadMusic::Style::Guidelines::StepToFinalNote,
25
+ HeadMusic::Style::Guidelines::UpToFourteenNotes,
26
+ ].freeze
27
+
28
+ def self.analyze(voice)
29
+ RULESET.map { |rule| rule.new(voice) }
30
+ end
31
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # A mark is a fragment of music with an optional fitness score assigned.
4
- # Marks are collected into annotations which comment on the fragments.
4
+ # Marks are collected into annotations which comment on a voice.
5
5
  class HeadMusic::Style::Mark
6
6
  attr_reader :start_position, :end_position, :placements, :fitness
7
7
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HeadMusic
4
- VERSION = '0.19.0'
4
+ VERSION = '0.19.1'
5
5
  end
data/lib/head_music.rb CHANGED
@@ -61,43 +61,43 @@ require 'head_music/style/analysis'
61
61
  require 'head_music/style/annotation'
62
62
  require 'head_music/style/mark'
63
63
 
64
- # annotations
65
- require 'head_music/style/annotations/always_move'
66
- require 'head_music/style/annotations/approach_perfection_contrarily'
67
- require 'head_music/style/annotations/at_least_eight_notes'
68
- require 'head_music/style/annotations/avoid_crossing_voices'
69
- require 'head_music/style/annotations/avoid_overlapping_voices'
70
- require 'head_music/style/annotations/consonant_climax'
71
- require 'head_music/style/annotations/consonant_downbeats'
72
- require 'head_music/style/annotations/diatonic'
73
- require 'head_music/style/annotations/direction_changes'
74
- require 'head_music/style/annotations/end_on_perfect_consonance'
75
- require 'head_music/style/annotations/end_on_tonic'
76
- require 'head_music/style/annotations/frequent_direction_changes'
77
- require 'head_music/style/annotations/limit_octave_leaps'
78
- require 'head_music/style/annotations/moderate_direction_changes'
79
- require 'head_music/style/annotations/mostly_conjunct'
80
- require 'head_music/style/annotations/notes_same_length'
81
- require 'head_music/style/annotations/no_rests'
82
- require 'head_music/style/annotations/no_unisons_in_middle'
83
- require 'head_music/style/annotations/one_to_one'
84
- require 'head_music/style/annotations/prefer_contrary_motion'
85
- require 'head_music/style/annotations/prefer_imperfect'
86
- require 'head_music/style/annotations/prepare_octave_leaps'
87
- require 'head_music/style/annotations/recover_large_leaps'
88
- require 'head_music/style/annotations/singable_intervals'
89
- require 'head_music/style/annotations/singable_range'
90
- require 'head_music/style/annotations/single_large_leaps'
91
- require 'head_music/style/annotations/start_on_perfect_consonance'
92
- require 'head_music/style/annotations/start_on_tonic'
93
- require 'head_music/style/annotations/step_down_to_final_note'
94
- require 'head_music/style/annotations/step_out_of_unison'
95
- require 'head_music/style/annotations/step_to_final_note'
96
- require 'head_music/style/annotations/step_up_to_final_note'
97
- require 'head_music/style/annotations/up_to_fourteen_notes'
64
+ # guidelines
65
+ require 'head_music/style/guidelines/always_move'
66
+ require 'head_music/style/guidelines/approach_perfection_contrarily'
67
+ require 'head_music/style/guidelines/at_least_eight_notes'
68
+ require 'head_music/style/guidelines/avoid_crossing_voices'
69
+ require 'head_music/style/guidelines/avoid_overlapping_voices'
70
+ require 'head_music/style/guidelines/consonant_climax'
71
+ require 'head_music/style/guidelines/consonant_downbeats'
72
+ require 'head_music/style/guidelines/diatonic'
73
+ require 'head_music/style/guidelines/direction_changes'
74
+ require 'head_music/style/guidelines/end_on_perfect_consonance'
75
+ require 'head_music/style/guidelines/end_on_tonic'
76
+ require 'head_music/style/guidelines/frequent_direction_changes'
77
+ require 'head_music/style/guidelines/limit_octave_leaps'
78
+ require 'head_music/style/guidelines/moderate_direction_changes'
79
+ require 'head_music/style/guidelines/mostly_conjunct'
80
+ require 'head_music/style/guidelines/notes_same_length'
81
+ require 'head_music/style/guidelines/no_rests'
82
+ require 'head_music/style/guidelines/no_unisons_in_middle'
83
+ require 'head_music/style/guidelines/one_to_one'
84
+ require 'head_music/style/guidelines/prefer_contrary_motion'
85
+ require 'head_music/style/guidelines/prefer_imperfect'
86
+ require 'head_music/style/guidelines/prepare_octave_leaps'
87
+ require 'head_music/style/guidelines/recover_large_leaps'
88
+ require 'head_music/style/guidelines/singable_intervals'
89
+ require 'head_music/style/guidelines/singable_range'
90
+ require 'head_music/style/guidelines/single_large_leaps'
91
+ require 'head_music/style/guidelines/start_on_perfect_consonance'
92
+ require 'head_music/style/guidelines/start_on_tonic'
93
+ require 'head_music/style/guidelines/step_down_to_final_note'
94
+ require 'head_music/style/guidelines/step_out_of_unison'
95
+ require 'head_music/style/guidelines/step_to_final_note'
96
+ require 'head_music/style/guidelines/step_up_to_final_note'
97
+ require 'head_music/style/guidelines/up_to_fourteen_notes'
98
98
 
99
- # rulesets
100
- require 'head_music/style/rulesets/fux_cantus_firmus'
101
- require 'head_music/style/rulesets/modern_cantus_firmus'
102
- require 'head_music/style/rulesets/first_species_melody'
103
- require 'head_music/style/rulesets/first_species_harmony'
99
+ # guides
100
+ require 'head_music/style/guides/fux_cantus_firmus'
101
+ require 'head_music/style/guides/modern_cantus_firmus'
102
+ require 'head_music/style/guides/first_species_melody'
103
+ require 'head_music/style/guides/first_species_harmony'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: head_music
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.19.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Head
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-04 00:00:00.000000000 Z
11
+ date: 2018-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -152,44 +152,44 @@ files:
152
152
  - lib/head_music/staff.rb
153
153
  - lib/head_music/style/analysis.rb
154
154
  - lib/head_music/style/annotation.rb
155
- - lib/head_music/style/annotations/always_move.rb
156
- - lib/head_music/style/annotations/approach_perfection_contrarily.rb
157
- - lib/head_music/style/annotations/at_least_eight_notes.rb
158
- - lib/head_music/style/annotations/avoid_crossing_voices.rb
159
- - lib/head_music/style/annotations/avoid_overlapping_voices.rb
160
- - lib/head_music/style/annotations/consonant_climax.rb
161
- - lib/head_music/style/annotations/consonant_downbeats.rb
162
- - lib/head_music/style/annotations/diatonic.rb
163
- - lib/head_music/style/annotations/direction_changes.rb
164
- - lib/head_music/style/annotations/end_on_perfect_consonance.rb
165
- - lib/head_music/style/annotations/end_on_tonic.rb
166
- - lib/head_music/style/annotations/frequent_direction_changes.rb
167
- - lib/head_music/style/annotations/limit_octave_leaps.rb
168
- - lib/head_music/style/annotations/moderate_direction_changes.rb
169
- - lib/head_music/style/annotations/mostly_conjunct.rb
170
- - lib/head_music/style/annotations/no_rests.rb
171
- - lib/head_music/style/annotations/no_unisons_in_middle.rb
172
- - lib/head_music/style/annotations/notes_same_length.rb
173
- - lib/head_music/style/annotations/one_to_one.rb
174
- - lib/head_music/style/annotations/prefer_contrary_motion.rb
175
- - lib/head_music/style/annotations/prefer_imperfect.rb
176
- - lib/head_music/style/annotations/prepare_octave_leaps.rb
177
- - lib/head_music/style/annotations/recover_large_leaps.rb
178
- - lib/head_music/style/annotations/singable_intervals.rb
179
- - lib/head_music/style/annotations/singable_range.rb
180
- - lib/head_music/style/annotations/single_large_leaps.rb
181
- - lib/head_music/style/annotations/start_on_perfect_consonance.rb
182
- - lib/head_music/style/annotations/start_on_tonic.rb
183
- - lib/head_music/style/annotations/step_down_to_final_note.rb
184
- - lib/head_music/style/annotations/step_out_of_unison.rb
185
- - lib/head_music/style/annotations/step_to_final_note.rb
186
- - lib/head_music/style/annotations/step_up_to_final_note.rb
187
- - lib/head_music/style/annotations/up_to_fourteen_notes.rb
155
+ - lib/head_music/style/guidelines/always_move.rb
156
+ - lib/head_music/style/guidelines/approach_perfection_contrarily.rb
157
+ - lib/head_music/style/guidelines/at_least_eight_notes.rb
158
+ - lib/head_music/style/guidelines/avoid_crossing_voices.rb
159
+ - lib/head_music/style/guidelines/avoid_overlapping_voices.rb
160
+ - lib/head_music/style/guidelines/consonant_climax.rb
161
+ - lib/head_music/style/guidelines/consonant_downbeats.rb
162
+ - lib/head_music/style/guidelines/diatonic.rb
163
+ - lib/head_music/style/guidelines/direction_changes.rb
164
+ - lib/head_music/style/guidelines/end_on_perfect_consonance.rb
165
+ - lib/head_music/style/guidelines/end_on_tonic.rb
166
+ - lib/head_music/style/guidelines/frequent_direction_changes.rb
167
+ - lib/head_music/style/guidelines/limit_octave_leaps.rb
168
+ - lib/head_music/style/guidelines/moderate_direction_changes.rb
169
+ - lib/head_music/style/guidelines/mostly_conjunct.rb
170
+ - lib/head_music/style/guidelines/no_rests.rb
171
+ - lib/head_music/style/guidelines/no_unisons_in_middle.rb
172
+ - lib/head_music/style/guidelines/notes_same_length.rb
173
+ - lib/head_music/style/guidelines/one_to_one.rb
174
+ - lib/head_music/style/guidelines/prefer_contrary_motion.rb
175
+ - lib/head_music/style/guidelines/prefer_imperfect.rb
176
+ - lib/head_music/style/guidelines/prepare_octave_leaps.rb
177
+ - lib/head_music/style/guidelines/recover_large_leaps.rb
178
+ - lib/head_music/style/guidelines/singable_intervals.rb
179
+ - lib/head_music/style/guidelines/singable_range.rb
180
+ - lib/head_music/style/guidelines/single_large_leaps.rb
181
+ - lib/head_music/style/guidelines/start_on_perfect_consonance.rb
182
+ - lib/head_music/style/guidelines/start_on_tonic.rb
183
+ - lib/head_music/style/guidelines/step_down_to_final_note.rb
184
+ - lib/head_music/style/guidelines/step_out_of_unison.rb
185
+ - lib/head_music/style/guidelines/step_to_final_note.rb
186
+ - lib/head_music/style/guidelines/step_up_to_final_note.rb
187
+ - lib/head_music/style/guidelines/up_to_fourteen_notes.rb
188
+ - lib/head_music/style/guides/first_species_harmony.rb
189
+ - lib/head_music/style/guides/first_species_melody.rb
190
+ - lib/head_music/style/guides/fux_cantus_firmus.rb
191
+ - lib/head_music/style/guides/modern_cantus_firmus.rb
188
192
  - lib/head_music/style/mark.rb
189
- - lib/head_music/style/rulesets/first_species_harmony.rb
190
- - lib/head_music/style/rulesets/first_species_melody.rb
191
- - lib/head_music/style/rulesets/fux_cantus_firmus.rb
192
- - lib/head_music/style/rulesets/modern_cantus_firmus.rb
193
193
  - lib/head_music/utilities/hash_key.rb
194
194
  - lib/head_music/version.rb
195
195
  homepage: https://github.com/roberthead/head_music
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
5
-
6
- # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::FrequentDirectionChanges < HeadMusic::Style::Annotations::DirectionChanges
8
- MESSAGE = 'Change melodic direction frequently.'
9
-
10
- def self.maximum_notes_per_direction
11
- 3
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Module for Annotations.
4
- module HeadMusic::Style::Annotations; end
5
-
6
- # A counterpoint guideline
7
- class HeadMusic::Style::Annotations::ModerateDirectionChanges < HeadMusic::Style::Annotations::DirectionChanges
8
- MESSAGE = 'Change melodic direction occasionally.'
9
-
10
- def self.maximum_notes_per_direction
11
- 5
12
- end
13
- end