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,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Module for rulesets
4
- module HeadMusic::Style::Rulesets; end
5
-
6
- # Rules for first species harmony
7
- class HeadMusic::Style::Rulesets::FirstSpeciesHarmony
8
- RULESET = [
9
- HeadMusic::Style::Annotations::ApproachPerfectionContrarily,
10
- HeadMusic::Style::Annotations::AvoidCrossingVoices,
11
- HeadMusic::Style::Annotations::AvoidOverlappingVoices,
12
- HeadMusic::Style::Annotations::ConsonantDownbeats,
13
- HeadMusic::Style::Annotations::NoUnisonsInMiddle,
14
- HeadMusic::Style::Annotations::OneToOne,
15
- HeadMusic::Style::Annotations::PreferContraryMotion,
16
- HeadMusic::Style::Annotations::PreferImperfect,
17
- ].freeze
18
-
19
- def self.analyze(voice)
20
- RULESET.map { |rule| rule.new(voice) }
21
- end
22
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Module for rulesets
4
- module HeadMusic::Style::Rulesets; end
5
-
6
- # Rules for first species melodies
7
- class HeadMusic::Style::Rulesets::FirstSpeciesMelody
8
- RULESET = [
9
- HeadMusic::Style::Annotations::ConsonantClimax,
10
- HeadMusic::Style::Annotations::Diatonic,
11
- HeadMusic::Style::Annotations::EndOnTonic,
12
- HeadMusic::Style::Annotations::FrequentDirectionChanges,
13
- HeadMusic::Style::Annotations::LimitOctaveLeaps,
14
- HeadMusic::Style::Annotations::MostlyConjunct,
15
- HeadMusic::Style::Annotations::NoRests,
16
- HeadMusic::Style::Annotations::NotesSameLength,
17
- HeadMusic::Style::Annotations::PrepareOctaveLeaps,
18
- HeadMusic::Style::Annotations::SingableIntervals,
19
- HeadMusic::Style::Annotations::SingableRange,
20
- HeadMusic::Style::Annotations::StartOnPerfectConsonance,
21
- HeadMusic::Style::Annotations::StepOutOfUnison,
22
- HeadMusic::Style::Annotations::StepUpToFinalNote,
23
- ].freeze
24
-
25
- def self.analyze(voice)
26
- RULESET.map { |rule| rule.new(voice) }
27
- end
28
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Module for rulesets
4
- module HeadMusic::Style::Rulesets; end
5
-
6
- # Rules for the cantus firmus according to Fux.
7
- class HeadMusic::Style::Rulesets::FuxCantusFirmus
8
- RULESET = [
9
- HeadMusic::Style::Annotations::AlwaysMove,
10
- HeadMusic::Style::Annotations::AtLeastEightNotes,
11
- HeadMusic::Style::Annotations::ConsonantClimax,
12
- HeadMusic::Style::Annotations::Diatonic,
13
- HeadMusic::Style::Annotations::EndOnTonic,
14
- HeadMusic::Style::Annotations::FrequentDirectionChanges,
15
- HeadMusic::Style::Annotations::LimitOctaveLeaps,
16
- HeadMusic::Style::Annotations::MostlyConjunct,
17
- HeadMusic::Style::Annotations::NoRests,
18
- HeadMusic::Style::Annotations::NotesSameLength,
19
- HeadMusic::Style::Annotations::RecoverLargeLeaps,
20
- HeadMusic::Style::Annotations::SingableIntervals,
21
- HeadMusic::Style::Annotations::SingableRange,
22
- HeadMusic::Style::Annotations::StartOnTonic,
23
- HeadMusic::Style::Annotations::StepDownToFinalNote,
24
- HeadMusic::Style::Annotations::UpToFourteenNotes,
25
- ].freeze
26
-
27
- def self.analyze(voice)
28
- RULESET.map { |rule| rule.new(voice) }
29
- end
30
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Module for rulesets
4
- module HeadMusic::Style::Rulesets; end
5
-
6
- # Modern rules for the cantus firmus
7
- class HeadMusic::Style::Rulesets::ModernCantusFirmus
8
- RULESET = [
9
- HeadMusic::Style::Annotations::AlwaysMove,
10
- HeadMusic::Style::Annotations::AtLeastEightNotes,
11
- HeadMusic::Style::Annotations::ConsonantClimax,
12
- HeadMusic::Style::Annotations::Diatonic,
13
- HeadMusic::Style::Annotations::EndOnTonic,
14
- HeadMusic::Style::Annotations::LimitOctaveLeaps,
15
- HeadMusic::Style::Annotations::ModerateDirectionChanges,
16
- HeadMusic::Style::Annotations::MostlyConjunct,
17
- HeadMusic::Style::Annotations::NoRests,
18
- HeadMusic::Style::Annotations::NotesSameLength,
19
- HeadMusic::Style::Annotations::PrepareOctaveLeaps,
20
- HeadMusic::Style::Annotations::SingableIntervals,
21
- HeadMusic::Style::Annotations::SingableRange,
22
- HeadMusic::Style::Annotations::SingleLargeLeaps,
23
- HeadMusic::Style::Annotations::StartOnTonic,
24
- HeadMusic::Style::Annotations::StepToFinalNote,
25
- HeadMusic::Style::Annotations::UpToFourteenNotes,
26
- ].freeze
27
-
28
- def self.analyze(voice)
29
- RULESET.map { |rule| rule.new(voice) }
30
- end
31
- end