head_music 0.19.0 → 0.19.1

Sign up to get free protection for your applications and to get access to all the features.
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