musicality 0.8.0 → 0.9.0

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 (146) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog.md +27 -1
  3. data/README.md +153 -10
  4. data/bin/collidify +102 -0
  5. data/bin/lilify +57 -29
  6. data/bin/midify +64 -24
  7. data/bin/musicality +39 -0
  8. data/examples/composition/auto_counterpoint.rb +4 -5
  9. data/examples/composition/part_generator.rb +8 -2
  10. data/examples/composition/scale_exercise.rb +1 -1
  11. data/examples/notation/notes.rb +27 -0
  12. data/examples/notation/parts.rb +51 -0
  13. data/examples/notation/scores.rb +38 -0
  14. data/examples/notation/twinkle.rb +34 -0
  15. data/examples/notation/twinkle.score +33 -0
  16. data/lib/musicality.rb +46 -11
  17. data/lib/musicality/composition/dsl/score_dsl.rb +2 -2
  18. data/lib/musicality/composition/dsl/score_methods.rb +10 -7
  19. data/lib/musicality/notation/conversion/change_conversion.rb +1 -1
  20. data/lib/musicality/notation/conversion/note_time_converter.rb +6 -23
  21. data/lib/musicality/notation/conversion/score_conversion.rb +15 -15
  22. data/lib/musicality/notation/conversion/score_converter.rb +50 -67
  23. data/lib/musicality/notation/model/articulations.rb +3 -2
  24. data/lib/musicality/notation/model/change.rb +15 -6
  25. data/lib/musicality/notation/model/dynamics.rb +11 -8
  26. data/lib/musicality/notation/model/instrument.rb +61 -0
  27. data/lib/musicality/notation/model/instruments.rb +111 -0
  28. data/lib/musicality/notation/model/key.rb +137 -0
  29. data/lib/musicality/notation/model/keys.rb +37 -0
  30. data/lib/musicality/notation/model/link.rb +6 -19
  31. data/lib/musicality/notation/model/mark.rb +43 -0
  32. data/lib/musicality/notation/model/marks.rb +11 -0
  33. data/lib/musicality/notation/model/meter.rb +4 -0
  34. data/lib/musicality/notation/model/note.rb +42 -28
  35. data/lib/musicality/notation/model/part.rb +18 -5
  36. data/lib/musicality/notation/model/pitch.rb +13 -4
  37. data/lib/musicality/notation/model/score.rb +104 -66
  38. data/lib/musicality/notation/model/symbols.rb +16 -11
  39. data/lib/musicality/notation/parsing/articulation_parsing.rb +38 -38
  40. data/lib/musicality/notation/parsing/articulation_parsing.treetop +14 -14
  41. data/lib/musicality/notation/parsing/link_parsing.rb +6 -6
  42. data/lib/musicality/notation/parsing/link_parsing.treetop +3 -3
  43. data/lib/musicality/notation/parsing/mark_parsing.rb +138 -0
  44. data/lib/musicality/notation/parsing/mark_parsing.treetop +31 -0
  45. data/lib/musicality/notation/parsing/note_node.rb +19 -12
  46. data/lib/musicality/notation/parsing/note_parsing.rb +218 -87
  47. data/lib/musicality/notation/parsing/note_parsing.treetop +9 -5
  48. data/lib/musicality/notation/parsing/numbers/nonnegative_integer_parsing.rb +7 -2
  49. data/lib/musicality/notation/parsing/numbers/nonnegative_integer_parsing.treetop +1 -1
  50. data/lib/musicality/notation/parsing/numbers/positive_integer_parsing.rb +6 -4
  51. data/lib/musicality/notation/parsing/numbers/positive_integer_parsing.treetop +1 -1
  52. data/lib/musicality/notation/util/function.rb +41 -18
  53. data/lib/musicality/packable.rb +156 -0
  54. data/lib/musicality/performance/conversion/glissando_converter.rb +2 -2
  55. data/lib/musicality/performance/conversion/note_sequence_extractor.rb +223 -70
  56. data/lib/musicality/performance/conversion/portamento_converter.rb +5 -2
  57. data/lib/musicality/performance/conversion/score_collator.rb +70 -64
  58. data/lib/musicality/performance/midi/midi_events.rb +3 -3
  59. data/lib/musicality/performance/midi/midi_settings.rb +127 -0
  60. data/lib/musicality/performance/midi/midi_util.rb +8 -2
  61. data/lib/musicality/performance/midi/part_sequencer.rb +19 -18
  62. data/lib/musicality/performance/midi/score_sequencer.rb +13 -9
  63. data/lib/musicality/performance/midi/score_sequencing.rb +5 -5
  64. data/lib/musicality/performance/model/attack.rb +8 -0
  65. data/lib/musicality/performance/model/duration_functions.rb +23 -0
  66. data/lib/musicality/performance/model/note_sequence.rb +52 -95
  67. data/lib/musicality/performance/model/separation.rb +10 -0
  68. data/lib/musicality/performance/supercollider/add_actions.rb +13 -0
  69. data/lib/musicality/performance/supercollider/bundle.rb +18 -0
  70. data/lib/musicality/performance/supercollider/conductor.rb +125 -0
  71. data/lib/musicality/performance/supercollider/group.rb +71 -0
  72. data/lib/musicality/performance/supercollider/message.rb +26 -0
  73. data/lib/musicality/performance/supercollider/node.rb +122 -0
  74. data/lib/musicality/performance/supercollider/performer.rb +123 -0
  75. data/lib/musicality/performance/supercollider/score_conducting.rb +17 -0
  76. data/lib/musicality/performance/supercollider/server.rb +8 -0
  77. data/lib/musicality/performance/supercollider/synth.rb +43 -0
  78. data/lib/musicality/performance/supercollider/synthdef.rb +57 -0
  79. data/lib/musicality/performance/supercollider/synthdef_settings.rb +23 -0
  80. data/lib/musicality/performance/supercollider/synthdefs.rb +1654 -0
  81. data/lib/musicality/{composition/model/pitch_class.rb → pitch_class.rb} +1 -1
  82. data/lib/musicality/{composition/model/pitch_classes.rb → pitch_classes.rb} +9 -9
  83. data/lib/musicality/printing/lilypond/clef.rb +12 -0
  84. data/lib/musicality/printing/lilypond/key_engraving.rb +9 -0
  85. data/lib/musicality/printing/lilypond/lilypond_settings.rb +105 -0
  86. data/lib/musicality/printing/lilypond/meter_engraving.rb +1 -1
  87. data/lib/musicality/printing/lilypond/note_engraving.rb +112 -30
  88. data/lib/musicality/printing/lilypond/part_engraver.rb +114 -3
  89. data/lib/musicality/printing/lilypond/pitch_class_engraving.rb +22 -0
  90. data/lib/musicality/printing/lilypond/pitch_engraving.rb +2 -15
  91. data/lib/musicality/printing/lilypond/score_engraver.rb +44 -73
  92. data/lib/musicality/printing/lilypond/score_engraving.rb +3 -3
  93. data/lib/musicality/project/create_tasks.rb +31 -0
  94. data/lib/musicality/project/file_cleaner.rb +19 -0
  95. data/lib/musicality/project/file_raker.rb +107 -0
  96. data/lib/musicality/project/load_config.rb +43 -0
  97. data/lib/musicality/project/project.rb +64 -0
  98. data/lib/musicality/version.rb +1 -1
  99. data/musicality.gemspec +3 -0
  100. data/spec/composition/util/random_sampler_spec.rb +1 -1
  101. data/spec/notation/conversion/measure_note_map_spec.rb +1 -1
  102. data/spec/notation/conversion/note_time_converter_spec.rb +5 -85
  103. data/spec/notation/conversion/score_conversion_spec.rb +6 -41
  104. data/spec/notation/conversion/score_converter_spec.rb +19 -137
  105. data/spec/notation/model/change_spec.rb +55 -0
  106. data/spec/notation/model/key_spec.rb +171 -0
  107. data/spec/notation/model/link_spec.rb +34 -5
  108. data/spec/notation/model/meter_spec.rb +15 -0
  109. data/spec/notation/model/note_spec.rb +33 -27
  110. data/spec/notation/model/part_spec.rb +53 -4
  111. data/spec/notation/model/pitch_spec.rb +15 -0
  112. data/spec/notation/model/score_spec.rb +64 -72
  113. data/spec/notation/parsing/link_nodes_spec.rb +3 -3
  114. data/spec/notation/parsing/link_parsing_spec.rb +6 -6
  115. data/spec/notation/parsing/note_node_spec.rb +34 -9
  116. data/spec/notation/parsing/note_parsing_spec.rb +11 -9
  117. data/spec/notation/parsing/numbers/nonnegative_integer_spec.rb +4 -0
  118. data/spec/notation/parsing/pitch_node_spec.rb +0 -1
  119. data/spec/notation/util/value_computer_spec.rb +2 -2
  120. data/spec/performance/conversion/glissando_converter_spec.rb +9 -9
  121. data/spec/performance/conversion/note_sequence_extractor_spec.rb +48 -53
  122. data/spec/performance/conversion/portamento_converter_spec.rb +11 -9
  123. data/spec/performance/conversion/score_collator_spec.rb +59 -63
  124. data/spec/performance/midi/midi_util_spec.rb +22 -8
  125. data/spec/performance/midi/part_sequencer_spec.rb +2 -2
  126. data/spec/performance/midi/score_sequencer_spec.rb +12 -10
  127. data/spec/performance/midi/score_sequencing_spec.rb +2 -2
  128. data/spec/performance/model/note_sequence_spec.rb +41 -134
  129. data/spec/printing/note_engraving_spec.rb +204 -0
  130. data/spec/printing/score_engraver_spec.rb +40 -0
  131. data/spec/spec_helper.rb +1 -0
  132. metadata +69 -23
  133. data/examples/notation/hip.rb +0 -32
  134. data/examples/notation/missed_connection.rb +0 -26
  135. data/examples/notation/song1.rb +0 -33
  136. data/examples/notation/song2.rb +0 -32
  137. data/lib/musicality/notation/model/links.rb +0 -11
  138. data/lib/musicality/notation/packing/change_packing.rb +0 -56
  139. data/lib/musicality/notation/packing/part_packing.rb +0 -31
  140. data/lib/musicality/notation/packing/score_packing.rb +0 -123
  141. data/lib/musicality/performance/model/note_attacks.rb +0 -19
  142. data/lib/musicality/performance/util/note_linker.rb +0 -28
  143. data/spec/notation/packing/change_packing_spec.rb +0 -304
  144. data/spec/notation/packing/part_packing_spec.rb +0 -66
  145. data/spec/notation/packing/score_packing_spec.rb +0 -255
  146. data/spec/performance/util/note_linker_spec.rb +0 -68
@@ -3,35 +3,35 @@ module Parsing
3
3
 
4
4
  grammar Articulation
5
5
  rule articulation
6
- slur / legato / tenuto / portato / staccato / staccatissimo
6
+ tenuto / accent / marcato / portato / staccato / staccatissimo
7
7
  end
8
-
9
- rule slur
10
- "(" {
8
+
9
+ rule tenuto
10
+ "-" {
11
11
  def to_articulation
12
- Musicality::Articulations::SLUR
12
+ Musicality::Articulations::TENUTO
13
13
  end
14
14
  }
15
15
  end
16
16
 
17
- rule legato
18
- "[" {
17
+ rule accent
18
+ ">" {
19
19
  def to_articulation
20
- Musicality::Articulations::LEGATO
20
+ Musicality::Articulations::ACCENT
21
21
  end
22
22
  }
23
23
  end
24
-
25
- rule tenuto
26
- "_" {
24
+
25
+ rule marcato
26
+ "^" {
27
27
  def to_articulation
28
- Musicality::Articulations::TENUTO
28
+ Musicality::Articulations::MARCATO
29
29
  end
30
30
  }
31
31
  end
32
32
 
33
33
  rule portato
34
- "%" {
34
+ "_" {
35
35
  def to_articulation
36
36
  Musicality::Articulations::PORTATO
37
37
  end
@@ -47,7 +47,7 @@ grammar Articulation
47
47
  end
48
48
 
49
49
  rule staccatissimo
50
- "'" {
50
+ "!" {
51
51
  def to_articulation
52
52
  Musicality::Articulations::STACCATISSIMO
53
53
  end
@@ -62,11 +62,11 @@ module Link
62
62
  return cached
63
63
  end
64
64
 
65
- if (match_len = has_terminal?("=", false, index))
65
+ if (match_len = has_terminal?("~", false, index))
66
66
  r0 = instantiate_node(TieNode,input, index...(index + match_len))
67
67
  @index += match_len
68
68
  else
69
- terminal_parse_failure("=")
69
+ terminal_parse_failure('"~"')
70
70
  r0 = nil
71
71
  end
72
72
 
@@ -93,11 +93,11 @@ module Link
93
93
  end
94
94
 
95
95
  i0, s0 = index, []
96
- if (match_len = has_terminal?("~", false, index))
96
+ if (match_len = has_terminal?(";", false, index))
97
97
  r1 = true
98
98
  @index += match_len
99
99
  else
100
- terminal_parse_failure("~")
100
+ terminal_parse_failure('";"')
101
101
  r1 = nil
102
102
  end
103
103
  s0 << r1
@@ -136,11 +136,11 @@ module Link
136
136
  end
137
137
 
138
138
  i0, s0 = index, []
139
- if (match_len = has_terminal?("|", false, index))
139
+ if (match_len = has_terminal?(":", false, index))
140
140
  r1 = true
141
141
  @index += match_len
142
142
  else
143
- terminal_parse_failure("|")
143
+ terminal_parse_failure('":"')
144
144
  r1 = nil
145
145
  end
146
146
  s0 << r1
@@ -9,15 +9,15 @@ grammar Link
9
9
  end
10
10
 
11
11
  rule tie
12
- "=" <TieNode>
12
+ "~" <TieNode>
13
13
  end
14
14
 
15
15
  rule glissando
16
- "~" pitch <GlissandoNode>
16
+ ";" pitch <GlissandoNode>
17
17
  end
18
18
 
19
19
  rule portamento
20
- "|" pitch <PortamentoNode>
20
+ ":" pitch <PortamentoNode>
21
21
  end
22
22
  end
23
23
 
@@ -0,0 +1,138 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Musicality
5
+ module Parsing
6
+
7
+ module Mark
8
+ include Treetop::Runtime
9
+
10
+ def root
11
+ @root ||= :begin_slur
12
+ end
13
+
14
+ module BeginSlur0
15
+ def to_mark; return Musicality::Mark::Slur::Begin.new; end
16
+ end
17
+
18
+ def _nt_begin_slur
19
+ start_index = index
20
+ if node_cache[:begin_slur].has_key?(index)
21
+ cached = node_cache[:begin_slur][index]
22
+ if cached
23
+ node_cache[:begin_slur][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
24
+ @index = cached.interval.end
25
+ end
26
+ return cached
27
+ end
28
+
29
+ if (match_len = has_terminal?("(", false, index))
30
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
31
+ r0.extend(BeginSlur0)
32
+ @index += match_len
33
+ else
34
+ terminal_parse_failure('"("')
35
+ r0 = nil
36
+ end
37
+
38
+ node_cache[:begin_slur][start_index] = r0
39
+
40
+ r0
41
+ end
42
+
43
+ module EndSlur0
44
+ def to_mark; return Musicality::Mark::Slur::End.new; end
45
+ end
46
+
47
+ def _nt_end_slur
48
+ start_index = index
49
+ if node_cache[:end_slur].has_key?(index)
50
+ cached = node_cache[:end_slur][index]
51
+ if cached
52
+ node_cache[:end_slur][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
53
+ @index = cached.interval.end
54
+ end
55
+ return cached
56
+ end
57
+
58
+ if (match_len = has_terminal?(")", false, index))
59
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
60
+ r0.extend(EndSlur0)
61
+ @index += match_len
62
+ else
63
+ terminal_parse_failure('")"')
64
+ r0 = nil
65
+ end
66
+
67
+ node_cache[:end_slur][start_index] = r0
68
+
69
+ r0
70
+ end
71
+
72
+ module BeginTriplet0
73
+ def to_mark; return Musicality::Mark::Triplet::Begin.new; end
74
+ end
75
+
76
+ def _nt_begin_triplet
77
+ start_index = index
78
+ if node_cache[:begin_triplet].has_key?(index)
79
+ cached = node_cache[:begin_triplet][index]
80
+ if cached
81
+ node_cache[:begin_triplet][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
82
+ @index = cached.interval.end
83
+ end
84
+ return cached
85
+ end
86
+
87
+ if (match_len = has_terminal?("[", false, index))
88
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
89
+ r0.extend(BeginTriplet0)
90
+ @index += match_len
91
+ else
92
+ terminal_parse_failure('"["')
93
+ r0 = nil
94
+ end
95
+
96
+ node_cache[:begin_triplet][start_index] = r0
97
+
98
+ r0
99
+ end
100
+
101
+ module EndTriplet0
102
+ def to_mark; return Musicality::Mark::Triplet::End.new; end
103
+ end
104
+
105
+ def _nt_end_triplet
106
+ start_index = index
107
+ if node_cache[:end_triplet].has_key?(index)
108
+ cached = node_cache[:end_triplet][index]
109
+ if cached
110
+ node_cache[:end_triplet][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
111
+ @index = cached.interval.end
112
+ end
113
+ return cached
114
+ end
115
+
116
+ if (match_len = has_terminal?("]", false, index))
117
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
118
+ r0.extend(EndTriplet0)
119
+ @index += match_len
120
+ else
121
+ terminal_parse_failure('"]"')
122
+ r0 = nil
123
+ end
124
+
125
+ node_cache[:end_triplet][start_index] = r0
126
+
127
+ r0
128
+ end
129
+
130
+ end
131
+
132
+ class MarkParser < Treetop::Runtime::CompiledParser
133
+ include Mark
134
+ end
135
+
136
+
137
+ end
138
+ end
@@ -0,0 +1,31 @@
1
+ module Musicality
2
+ module Parsing
3
+
4
+ grammar Mark
5
+ rule begin_slur
6
+ "(" {
7
+ def to_mark; return Musicality::Mark::Slur::Begin.new; end
8
+ }
9
+ end
10
+
11
+ rule end_slur
12
+ ")" {
13
+ def to_mark; return Musicality::Mark::Slur::End.new; end
14
+ }
15
+ end
16
+
17
+ rule begin_triplet
18
+ "[" {
19
+ def to_mark; return Musicality::Mark::Triplet::Begin.new; end
20
+ }
21
+ end
22
+
23
+ rule end_triplet
24
+ "]" {
25
+ def to_mark; return Musicality::Mark::Triplet::End.new; end
26
+ }
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -1,13 +1,11 @@
1
1
  module Musicality
2
2
  module Parsing
3
3
  class NoteNode < Treetop::Runtime::SyntaxNode
4
- def primitives env
5
- [ self.to_note ]
6
- end
7
-
8
4
  def to_note
5
+ dur = duration.to_r
6
+
9
7
  if more.empty?
10
- return Musicality::Note.new(duration.to_r)
8
+ return Musicality::Note.new(dur)
11
9
  end
12
10
 
13
11
  pitches = []
@@ -27,15 +25,24 @@ module Parsing
27
25
  links[pitches[-1]] = x.pl.the_link.to_link
28
26
  end
29
27
  end
30
-
31
- artic = Musicality::Articulations::NORMAL
32
- unless more.art.empty?
33
- artic = more.art.to_articulation
28
+
29
+ marks = []
30
+ unless begin_marks.empty?
31
+ marks.push begin_marks.first.to_mark
32
+ unless begin_marks.second.empty?
33
+ marks.push begin_marks.second.to_mark
34
+ end
35
+ end
36
+
37
+ unless end_marks.empty?
38
+ marks.push end_marks.first.to_mark
39
+ unless end_marks.second.empty?
40
+ marks.push end_marks.second.to_mark
41
+ end
34
42
  end
35
43
 
36
- accent_flag = !more.acc.empty?
37
- Musicality::Note.new(duration.to_r, pitches,
38
- links: links, articulation: artic, accented: accent_flag)
44
+ Musicality::Note.new(dur, pitches, links: links, marks: marks,
45
+ articulation: more.art.empty? ? Articulations::NORMAL : more.art.to_articulation)
39
46
  end
40
47
  end
41
48
  end
@@ -19,13 +19,35 @@ module Note
19
19
 
20
20
  include Duration
21
21
 
22
+ include Mark
23
+
22
24
  module Note0
23
- def pl
25
+ def first
26
+ elements[0]
27
+ end
28
+
29
+ def second
24
30
  elements[1]
25
31
  end
26
32
  end
27
33
 
28
34
  module Note1
35
+ def first
36
+ elements[0]
37
+ end
38
+
39
+ def second
40
+ elements[1]
41
+ end
42
+ end
43
+
44
+ module Note2
45
+ def pl
46
+ elements[1]
47
+ end
48
+ end
49
+
50
+ module Note3
29
51
  def first_pl
30
52
  elements[0]
31
53
  end
@@ -37,22 +59,46 @@ module Note
37
59
  def art
38
60
  elements[2]
39
61
  end
62
+ end
40
63
 
41
- def acc
42
- elements[3]
64
+ module Note4
65
+ def first
66
+ elements[0]
67
+ end
68
+
69
+ def second
70
+ elements[1]
43
71
  end
44
72
  end
45
73
 
46
- module Note2
47
- def duration
74
+ module Note5
75
+ def first
48
76
  elements[0]
49
77
  end
50
78
 
51
- def more
79
+ def second
52
80
  elements[1]
53
81
  end
54
82
  end
55
83
 
84
+ module Note6
85
+ def begin_marks
86
+ elements[0]
87
+ end
88
+
89
+ def duration
90
+ elements[1]
91
+ end
92
+
93
+ def more
94
+ elements[2]
95
+ end
96
+
97
+ def end_marks
98
+ elements[3]
99
+ end
100
+ end
101
+
56
102
  def _nt_note
57
103
  start_index = index
58
104
  if node_cache[:note].has_key?(index)
@@ -65,79 +111,188 @@ module Note
65
111
  end
66
112
 
67
113
  i0, s0 = index, []
68
- r1 = _nt_duration
114
+ i2 = index
115
+ i3, s3 = index, []
116
+ r4 = _nt_begin_triplet
117
+ s3 << r4
118
+ if r4
119
+ r6 = _nt_begin_slur
120
+ if r6
121
+ r5 = r6
122
+ else
123
+ r5 = instantiate_node(SyntaxNode,input, index...index)
124
+ end
125
+ s3 << r5
126
+ end
127
+ if s3.last
128
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
129
+ r3.extend(Note0)
130
+ else
131
+ @index = i3
132
+ r3 = nil
133
+ end
134
+ if r3
135
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
136
+ r2 = r3
137
+ else
138
+ i7, s7 = index, []
139
+ r8 = _nt_begin_slur
140
+ s7 << r8
141
+ if r8
142
+ r10 = _nt_begin_triplet
143
+ if r10
144
+ r9 = r10
145
+ else
146
+ r9 = instantiate_node(SyntaxNode,input, index...index)
147
+ end
148
+ s7 << r9
149
+ end
150
+ if s7.last
151
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
152
+ r7.extend(Note1)
153
+ else
154
+ @index = i7
155
+ r7 = nil
156
+ end
157
+ if r7
158
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
159
+ r2 = r7
160
+ else
161
+ @index = i2
162
+ r2 = nil
163
+ end
164
+ end
165
+ if r2
166
+ r1 = r2
167
+ else
168
+ r1 = instantiate_node(SyntaxNode,input, index...index)
169
+ end
69
170
  s0 << r1
70
171
  if r1
71
- i3, s3 = index, []
72
- r4 = _nt_pitch_link
73
- s3 << r4
74
- if r4
75
- s5, i5 = [], index
76
- loop do
77
- i6, s6 = index, []
78
- if (match_len = has_terminal?(",", false, index))
79
- r7 = true
80
- @index += match_len
81
- else
82
- terminal_parse_failure(",")
83
- r7 = nil
172
+ r11 = _nt_duration
173
+ s0 << r11
174
+ if r11
175
+ i13, s13 = index, []
176
+ r14 = _nt_pitch_link
177
+ s13 << r14
178
+ if r14
179
+ s15, i15 = [], index
180
+ loop do
181
+ i16, s16 = index, []
182
+ if (match_len = has_terminal?(",", false, index))
183
+ r17 = true
184
+ @index += match_len
185
+ else
186
+ terminal_parse_failure('","')
187
+ r17 = nil
188
+ end
189
+ s16 << r17
190
+ if r17
191
+ r18 = _nt_pitch_link
192
+ s16 << r18
193
+ end
194
+ if s16.last
195
+ r16 = instantiate_node(SyntaxNode,input, i16...index, s16)
196
+ r16.extend(Note2)
197
+ else
198
+ @index = i16
199
+ r16 = nil
200
+ end
201
+ if r16
202
+ s15 << r16
203
+ else
204
+ break
205
+ end
84
206
  end
85
- s6 << r7
86
- if r7
87
- r8 = _nt_pitch_link
88
- s6 << r8
207
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
208
+ s13 << r15
209
+ if r15
210
+ r20 = _nt_articulation
211
+ if r20
212
+ r19 = r20
213
+ else
214
+ r19 = instantiate_node(SyntaxNode,input, index...index)
215
+ end
216
+ s13 << r19
89
217
  end
90
- if s6.last
91
- r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
92
- r6.extend(Note0)
93
- else
94
- @index = i6
95
- r6 = nil
218
+ end
219
+ if s13.last
220
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
221
+ r13.extend(Note3)
222
+ else
223
+ @index = i13
224
+ r13 = nil
225
+ end
226
+ if r13
227
+ r12 = r13
228
+ else
229
+ r12 = instantiate_node(SyntaxNode,input, index...index)
230
+ end
231
+ s0 << r12
232
+ if r12
233
+ i22 = index
234
+ i23, s23 = index, []
235
+ r24 = _nt_end_triplet
236
+ s23 << r24
237
+ if r24
238
+ r26 = _nt_end_slur
239
+ if r26
240
+ r25 = r26
241
+ else
242
+ r25 = instantiate_node(SyntaxNode,input, index...index)
243
+ end
244
+ s23 << r25
96
245
  end
97
- if r6
98
- s5 << r6
246
+ if s23.last
247
+ r23 = instantiate_node(SyntaxNode,input, i23...index, s23)
248
+ r23.extend(Note4)
99
249
  else
100
- break
250
+ @index = i23
251
+ r23 = nil
101
252
  end
102
- end
103
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
104
- s3 << r5
105
- if r5
106
- r10 = _nt_articulation
107
- if r10
108
- r9 = r10
253
+ if r23
254
+ r23 = SyntaxNode.new(input, (index-1)...index) if r23 == true
255
+ r22 = r23
109
256
  else
110
- r9 = instantiate_node(SyntaxNode,input, index...index)
111
- end
112
- s3 << r9
113
- if r9
114
- r12 = _nt_accent
115
- if r12
116
- r11 = r12
257
+ i27, s27 = index, []
258
+ r28 = _nt_end_slur
259
+ s27 << r28
260
+ if r28
261
+ r30 = _nt_end_triplet
262
+ if r30
263
+ r29 = r30
264
+ else
265
+ r29 = instantiate_node(SyntaxNode,input, index...index)
266
+ end
267
+ s27 << r29
268
+ end
269
+ if s27.last
270
+ r27 = instantiate_node(SyntaxNode,input, i27...index, s27)
271
+ r27.extend(Note5)
272
+ else
273
+ @index = i27
274
+ r27 = nil
275
+ end
276
+ if r27
277
+ r27 = SyntaxNode.new(input, (index-1)...index) if r27 == true
278
+ r22 = r27
117
279
  else
118
- r11 = instantiate_node(SyntaxNode,input, index...index)
280
+ @index = i22
281
+ r22 = nil
119
282
  end
120
- s3 << r11
121
283
  end
284
+ if r22
285
+ r21 = r22
286
+ else
287
+ r21 = instantiate_node(SyntaxNode,input, index...index)
288
+ end
289
+ s0 << r21
122
290
  end
123
291
  end
124
- if s3.last
125
- r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
126
- r3.extend(Note1)
127
- else
128
- @index = i3
129
- r3 = nil
130
- end
131
- if r3
132
- r2 = r3
133
- else
134
- r2 = instantiate_node(SyntaxNode,input, index...index)
135
- end
136
- s0 << r2
137
292
  end
138
293
  if s0.last
139
294
  r0 = instantiate_node(NoteNode,input, i0...index, s0)
140
- r0.extend(Note2)
295
+ r0.extend(Note6)
141
296
  else
142
297
  @index = i0
143
298
  r0 = nil
@@ -194,30 +349,6 @@ module Note
194
349
  r0
195
350
  end
196
351
 
197
- def _nt_accent
198
- start_index = index
199
- if node_cache[:accent].has_key?(index)
200
- cached = node_cache[:accent][index]
201
- if cached
202
- node_cache[:accent][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
203
- @index = cached.interval.end
204
- end
205
- return cached
206
- end
207
-
208
- if (match_len = has_terminal?("!", false, index))
209
- r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
210
- @index += match_len
211
- else
212
- terminal_parse_failure("!")
213
- r0 = nil
214
- end
215
-
216
- node_cache[:accent][start_index] = r0
217
-
218
- r0
219
- end
220
-
221
352
  end
222
353
 
223
354
  class NoteParser < Treetop::Runtime::CompiledParser