stretto 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.markdown +0 -0
- data/README.markdown +67 -0
- data/Rakefile +9 -0
- data/lib/stretto.rb +14 -0
- data/lib/stretto/grammar/channel_pressure_grammar.treetop +9 -0
- data/lib/stretto/grammar/chord_grammar.treetop +60 -0
- data/lib/stretto/grammar/controller_change_grammar.treetop +9 -0
- data/lib/stretto/grammar/duration_grammar.treetop +60 -0
- data/lib/stretto/grammar/grammar_helper.rb +6 -0
- data/lib/stretto/grammar/harmonic_chord_grammar.treetop +15 -0
- data/lib/stretto/grammar/harmony_grammar.treetop +15 -0
- data/lib/stretto/grammar/instrument_grammar.treetop +9 -0
- data/lib/stretto/grammar/key_signature_grammar.treetop +10 -0
- data/lib/stretto/grammar/layer_change_grammar.treetop +9 -0
- data/lib/stretto/grammar/measure_grammar.treetop +7 -0
- data/lib/stretto/grammar/note_grammar.treetop +32 -0
- data/lib/stretto/grammar/pitch_bend_grammar.treetop +7 -0
- data/lib/stretto/grammar/polyphonic_pressure_grammar.treetop +9 -0
- data/lib/stretto/grammar/rest_grammar.treetop +9 -0
- data/lib/stretto/grammar/stretto_grammar.treetop +62 -0
- data/lib/stretto/grammar/tempo_grammar.treetop +9 -0
- data/lib/stretto/grammar/timing_grammar.treetop +9 -0
- data/lib/stretto/grammar/tokens/attack_decay_token.rb +42 -0
- data/lib/stretto/grammar/tokens/chord_token.rb +67 -0
- data/lib/stretto/grammar/tokens/controller_change_token.rb +26 -0
- data/lib/stretto/grammar/tokens/duration_token.rb +55 -0
- data/lib/stretto/grammar/tokens/harmonic_chord_token.rb +25 -0
- data/lib/stretto/grammar/tokens/harmony_with_melody_token.rb +66 -0
- data/lib/stretto/grammar/tokens/hash_token.rb +15 -0
- data/lib/stretto/grammar/tokens/key_signature_token.rb +30 -0
- data/lib/stretto/grammar/tokens/measure_token.rb +21 -0
- data/lib/stretto/grammar/tokens/modifier_token.rb +99 -0
- data/lib/stretto/grammar/tokens/note_string_token.rb +106 -0
- data/lib/stretto/grammar/tokens/note_token.rb +25 -0
- data/lib/stretto/grammar/tokens/pattern_token.rb +26 -0
- data/lib/stretto/grammar/tokens/polyphonic_pressure_token.rb +28 -0
- data/lib/stretto/grammar/tokens/rest_token.rb +21 -0
- data/lib/stretto/grammar/tokens/value_token.rb +28 -0
- data/lib/stretto/grammar/tokens/variable_definition_token.rb +30 -0
- data/lib/stretto/grammar/value_grammar.treetop +45 -0
- data/lib/stretto/grammar/variable_grammar.treetop +10 -0
- data/lib/stretto/grammar/voice_change_grammar.treetop +9 -0
- data/lib/stretto/music_elements/channel_pressure.rb +44 -0
- data/lib/stretto/music_elements/chord.rb +194 -0
- data/lib/stretto/music_elements/controller_change.rb +49 -0
- data/lib/stretto/music_elements/harmonic_chord.rb +56 -0
- data/lib/stretto/music_elements/harmony.rb +37 -0
- data/lib/stretto/music_elements/instrument.rb +57 -0
- data/lib/stretto/music_elements/key_signature.rb +110 -0
- data/lib/stretto/music_elements/layer.rb +22 -0
- data/lib/stretto/music_elements/layer_change.rb +39 -0
- data/lib/stretto/music_elements/measure.rb +38 -0
- data/lib/stretto/music_elements/melody.rb +72 -0
- data/lib/stretto/music_elements/modifiers/attack_decay.rb +55 -0
- data/lib/stretto/music_elements/modifiers/chord_intervals.rb +44 -0
- data/lib/stretto/music_elements/modifiers/duration.rb +180 -0
- data/lib/stretto/music_elements/modifiers/value.rb +172 -0
- data/lib/stretto/music_elements/modifiers/variables.rb +365 -0
- data/lib/stretto/music_elements/music_element.rb +88 -0
- data/lib/stretto/music_elements/note.rb +282 -0
- data/lib/stretto/music_elements/pattern.rb +100 -0
- data/lib/stretto/music_elements/pitch_bend.rb +46 -0
- data/lib/stretto/music_elements/polyphonic_pressure.rb +62 -0
- data/lib/stretto/music_elements/rest.rb +26 -0
- data/lib/stretto/music_elements/tempo.rb +42 -0
- data/lib/stretto/music_elements/timing.rb +33 -0
- data/lib/stretto/music_elements/variable.rb +49 -0
- data/lib/stretto/music_elements/voice.rb +49 -0
- data/lib/stretto/music_elements/voice_change.rb +39 -0
- data/lib/stretto/parsers/exceptions.rb +11 -0
- data/lib/stretto/parsers/parser.rb +89 -0
- data/lib/stretto/renderers/midiator/player.rb +200 -0
- data/lib/stretto/util/jfugue_format_parser.rb +20 -0
- data/lib/stretto/util/node.rb +5 -0
- data/lib/stretto/util/utils.rb +41 -0
- data/lib/stretto/version.rb +3 -0
- metadata +203 -0
@@ -0,0 +1,365 @@
|
|
1
|
+
module Stretto
|
2
|
+
|
3
|
+
# Module that holds the predefined variables according to JFugue
|
4
|
+
module Variables
|
5
|
+
|
6
|
+
INSTRUMENT_VARIABLES = {
|
7
|
+
'PIANO' => 0,
|
8
|
+
'ACOUSTIC_GRAND' => 0,
|
9
|
+
'BRIGHT_ACOUSTIC' => 1,
|
10
|
+
'ELECTRIC_GRAND' => 2,
|
11
|
+
'HONKEY_TONK' => 3,
|
12
|
+
'ELECTRIC_PIANO' => 4,
|
13
|
+
'ELECTRIC_PIANO_1' => 4,
|
14
|
+
'ELECTRIC_PIANO_2' => 5,
|
15
|
+
'HARPISCHORD' => 6,
|
16
|
+
'CLAVINET' => 7,
|
17
|
+
'CELESTA' => 8,
|
18
|
+
'GLOCKENSPIEL' => 9,
|
19
|
+
'MUSIC_BOX' => 10,
|
20
|
+
'VIBRAPHONE' => 11,
|
21
|
+
'MARIMBA' => 12,
|
22
|
+
'XYLOPHONE' => 13,
|
23
|
+
'TUBULAR_BELLS' => 14,
|
24
|
+
'DULCIMER' => 15,
|
25
|
+
'DRAWBAR_ORGAN' => 16,
|
26
|
+
'PERCUSSIVE_ORGAN' => 17,
|
27
|
+
'ROCK_ORGAN' => 18,
|
28
|
+
'CHURCH_ORGAN' => 19,
|
29
|
+
'REED_ORGAN' => 20,
|
30
|
+
'ACCORDION' => 21,
|
31
|
+
'HARMONICA' => 22,
|
32
|
+
'TANGO_ACCORDION' => 23,
|
33
|
+
'GUITAR' => 24,
|
34
|
+
'NYLON_STRING_GUITAR' => 24,
|
35
|
+
'STEEL_STRING_GUITAR' => 25,
|
36
|
+
'ELECTRIC_JAZZ_GUITAR' => 26,
|
37
|
+
'ELECTRIC_CLEAN_GUITAR' => 27,
|
38
|
+
'ELECTRIC_MUTED_GUITAR' => 28,
|
39
|
+
'OVERDRIVEN_GUITAR' => 29,
|
40
|
+
'DISTORTION_GUITAR' => 30,
|
41
|
+
'GUITAR_HARMONICS' => 31,
|
42
|
+
'ACOUSTIC_BASS' => 32,
|
43
|
+
'ELECTRIC_BASS_FINGER' => 33,
|
44
|
+
'ELECTRIC_BASS_PICK' => 34,
|
45
|
+
'FRETLESS_BASS' => 35,
|
46
|
+
'SLAP_BASS_1' => 36,
|
47
|
+
'SLAP_BASS_2' => 37,
|
48
|
+
'SYNTH_BASS_1' => 38,
|
49
|
+
'SYNTH_BASS_2' => 39,
|
50
|
+
'VIOLIN' => 40,
|
51
|
+
'VIOLA' => 41,
|
52
|
+
'CELLO' => 42,
|
53
|
+
'CONTRABASS' => 43,
|
54
|
+
'TREMOLO_STRINGS' => 44,
|
55
|
+
'PIZZICATO_STRINGS' => 45,
|
56
|
+
'ORCHESTRAL_STRINGS' => 46,
|
57
|
+
'TIMPANI' => 47,
|
58
|
+
'STRING_ENSEMBLE_1' => 48,
|
59
|
+
'STRING_ENSEMBLE_2' => 49,
|
60
|
+
'SYNTH_STRINGS_1' => 50,
|
61
|
+
'SYNTH_STRINGS_2' => 51,
|
62
|
+
'CHOIR_AAHS' => 52,
|
63
|
+
'VOICE_OOHS' => 53,
|
64
|
+
'SYNTH_VOICE' => 54,
|
65
|
+
'ORCHESTRA_HIT' => 55,
|
66
|
+
'TRUMPET' => 56,
|
67
|
+
'TROMBONE' => 57,
|
68
|
+
'TUBA' => 58,
|
69
|
+
'MUTED_TRUMPET' => 59,
|
70
|
+
'FRENCH_HORN' => 60,
|
71
|
+
'BRASS_SECTION' => 61,
|
72
|
+
'SYNTHBRASS_1' => 62,
|
73
|
+
'SYNTHBRASS_2' => 63,
|
74
|
+
'SOPRANO_SAX' => 64,
|
75
|
+
'ALTO_SAX' => 65,
|
76
|
+
'TENOR_SAX' => 66,
|
77
|
+
'BARITONE_SAX' => 67,
|
78
|
+
'OBOE' => 68,
|
79
|
+
'ENGLISH_HORN' => 69,
|
80
|
+
'BASOON' => 70,
|
81
|
+
'CLARINET' => 71,
|
82
|
+
'PICCOLO' => 72,
|
83
|
+
'FLUTE' => 73,
|
84
|
+
'RECORDER' => 74,
|
85
|
+
'PAN_FLUTE' => 75,
|
86
|
+
'BLOWN_BOTTLE' => 76,
|
87
|
+
'SHAKUHACHI' => 77,
|
88
|
+
'WHISTLE' => 78,
|
89
|
+
'OCARINA' => 79,
|
90
|
+
'LEAD_SQUARE' => 80,
|
91
|
+
'SQUARE' => 80,
|
92
|
+
'LEAD_SAWTOOTH' => 81,
|
93
|
+
'SAWTOOTH' => 81,
|
94
|
+
'LEAD_CALLIOPE' => 82,
|
95
|
+
'CALLIOPE' => 82,
|
96
|
+
'LEAD_CHIFF' => 83,
|
97
|
+
'CHIFF' => 83,
|
98
|
+
'LEAD_CHARANG' => 84,
|
99
|
+
'CHARANG' => 84,
|
100
|
+
'LEAD_VOICE' => 85,
|
101
|
+
'VOICE' => 85,
|
102
|
+
'LEAD_FIFTHS' => 86,
|
103
|
+
'FIFTHS' => 86,
|
104
|
+
'LEAD_BASSLEAD' => 87,
|
105
|
+
'BASSLEAD' => 87,
|
106
|
+
'PAD_NEW_AGE' => 88,
|
107
|
+
'NEW_AGE' => 88,
|
108
|
+
'PAD_WARM' => 89,
|
109
|
+
'WARM' => 89,
|
110
|
+
'PAD_POLYSYNTH' => 90,
|
111
|
+
'POLYSYNTH' => 90,
|
112
|
+
'PAD_CHOIR' => 91,
|
113
|
+
'CHOIR' => 91,
|
114
|
+
'PAD_BOWED' => 92,
|
115
|
+
'BOWED' => 92,
|
116
|
+
'PAD_METALLIC' => 93,
|
117
|
+
'METALLIC' => 93,
|
118
|
+
'PAD_HALO' => 94,
|
119
|
+
'HALO' => 94,
|
120
|
+
'PAD_SWEEP' => 95,
|
121
|
+
'SWEEP' => 95,
|
122
|
+
'FX_RAIN' => 96,
|
123
|
+
'RAIN' => 96,
|
124
|
+
'FX_SOUNDTRACK' => 97,
|
125
|
+
'SOUNDTRACK' => 97,
|
126
|
+
'FX_CRYSTAL' => 98,
|
127
|
+
'CRYSTAL' => 98,
|
128
|
+
'FX_ATMOSPHERE' => 99,
|
129
|
+
'ATMOSPHERE' => 99,
|
130
|
+
'FX_BRIGHTNESS' => 100,
|
131
|
+
'BRIGHTNESS' => 100,
|
132
|
+
'FX_GOBLINS' => 101,
|
133
|
+
'GOBLINS' => 101,
|
134
|
+
'FX_ECHOES' => 102,
|
135
|
+
'ECHOES' => 102,
|
136
|
+
'FX_SCI_FI' => 103,
|
137
|
+
'SCI_FI' => 103,
|
138
|
+
'SITAR' => 104,
|
139
|
+
'BANJO' => 105,
|
140
|
+
'SHAMISEN' => 106,
|
141
|
+
'KOTO' => 107,
|
142
|
+
'KALIMBA' => 108,
|
143
|
+
'BAGPIPE' => 109,
|
144
|
+
'FIDDLE' => 110,
|
145
|
+
'SHANAI' => 111,
|
146
|
+
'TINKLE_BELL' => 112,
|
147
|
+
'AGOGO' => 113,
|
148
|
+
'STEEL_DRUMS' => 114,
|
149
|
+
'WOODBLOCK' => 115,
|
150
|
+
'TAIKO_DRUM' => 116,
|
151
|
+
'MELODIC_TOM' => 117,
|
152
|
+
'SYNTH_DRUM' => 118,
|
153
|
+
'REVERSE_CYMBAL' => 119,
|
154
|
+
'GUITAR_FRET_NOISE' => 120,
|
155
|
+
'BREATH_NOISE' => 121,
|
156
|
+
'SEASHORE' => 122,
|
157
|
+
'BIRD_TWEET' => 123,
|
158
|
+
'TELEPHONE_RING' => 124,
|
159
|
+
'HELICOPTER' => 125,
|
160
|
+
'APPLAUSE' => 126,
|
161
|
+
'GUNSHOT' => 127,
|
162
|
+
}
|
163
|
+
|
164
|
+
PERCUSSION_VARIABLES = {
|
165
|
+
'ACOUSTIC_BASE_DRUM' => 35,
|
166
|
+
'BASS_DRUM' => 36,
|
167
|
+
'SIDE_KICK' => 37,
|
168
|
+
'ACOUSTIC_SNARE' => 38,
|
169
|
+
'HAND_CLAP' => 39,
|
170
|
+
'ELECTRIC_SNARE' => 40,
|
171
|
+
'LOW_FLOOR_TOM' => 41,
|
172
|
+
'CLOSED_HI_HAT' => 42,
|
173
|
+
'HIGH_FLOOR_TOM' => 43,
|
174
|
+
'PEDAL_HI_TOM' => 44,
|
175
|
+
'LOW_TOM' => 45,
|
176
|
+
'OPEN_HI_HAT' => 46,
|
177
|
+
'LOW_MID_TOM' => 47,
|
178
|
+
'HI_MID_TOM' => 48,
|
179
|
+
'CRASH_CYMBAL_1' => 49,
|
180
|
+
'HIGH_TOM' => 50,
|
181
|
+
'RIDE_CYMBAL_1' => 51,
|
182
|
+
'CHINESE_CYMBAL' => 52,
|
183
|
+
'RIDE_BELL' => 53,
|
184
|
+
'TAMBOURINE' => 54,
|
185
|
+
'SPLASH_CYMBAL' => 55,
|
186
|
+
'COWBELL' => 56,
|
187
|
+
'CRASH_CYMBAL_2' => 57,
|
188
|
+
'VIBRASLAP' => 58,
|
189
|
+
'RIDE_CYMBAL_2' => 59,
|
190
|
+
'HI_BONGO' => 60,
|
191
|
+
'LOW_BONGO' => 61,
|
192
|
+
'MUTE_HI_CONGA' => 62,
|
193
|
+
'OPEN_HI_CONGA' => 63,
|
194
|
+
'LOW_CONGO' => 64,
|
195
|
+
'HIGH_TIMBALE' => 65,
|
196
|
+
'LOW_TIMBALE' => 66,
|
197
|
+
'HIGH_AGOGO' => 67,
|
198
|
+
'LOW_AGOGO' => 68,
|
199
|
+
'CABASA' => 69,
|
200
|
+
'MARACAS' => 70,
|
201
|
+
'SHORT_WHISTLE' => 71,
|
202
|
+
'LONG_WHISTLE' => 72,
|
203
|
+
'SHORT_GUIRO' => 73,
|
204
|
+
'LONG_GUIRO' => 74,
|
205
|
+
'CLAVES' => 75,
|
206
|
+
'HI_WOOD_BLOCK' => 76,
|
207
|
+
'LOW_WOOD_BLOCK' => 77,
|
208
|
+
'MUTE_CUICA' => 78,
|
209
|
+
'OPEN_CUICA' => 79,
|
210
|
+
'MUTE_TRIANGLE' => 80,
|
211
|
+
'OPEN_TRIANGLE' => 81,
|
212
|
+
}
|
213
|
+
|
214
|
+
TEMPO_VARIABLES = {
|
215
|
+
'GRAVE' => 40,
|
216
|
+
'LARGO' => 45,
|
217
|
+
'LARGHETTO' => 50,
|
218
|
+
'LENTO' => 55,
|
219
|
+
'ADAGIO' => 60,
|
220
|
+
'ADAGIETTO' => 65,
|
221
|
+
'ANDANTE' => 70,
|
222
|
+
'ANDANTINO' => 80,
|
223
|
+
'MODERATO' => 95,
|
224
|
+
'ALLEGRETTO' => 110,
|
225
|
+
'ALLEGRO' => 120,
|
226
|
+
'VIVACE' => 145,
|
227
|
+
'PRESTO' => 180,
|
228
|
+
'PRESTISSIMO' => 220,
|
229
|
+
}
|
230
|
+
|
231
|
+
CONTROLLER_VARIABLES = {
|
232
|
+
'BANK_SELECT_COARSE' => 0,
|
233
|
+
'MOD_WHEEL_COARSE' => 1,
|
234
|
+
'BREATH_COARSE' => 2,
|
235
|
+
'FOOT_PEDAL_COARSE' => 4,
|
236
|
+
'PORTAMENTO_TIME_COARSE' => 5,
|
237
|
+
'DATA_ENTRY_COARSE' => 6,
|
238
|
+
'VOLUME_COARSE' => 7,
|
239
|
+
'BALANCE_COARSE' => 8,
|
240
|
+
'PAN_POSITION_COARSE' => 10,
|
241
|
+
'EXPRESSION_COARSE' => 11,
|
242
|
+
'EFFECT_CONTROL_1_COARSE' => 12,
|
243
|
+
'EFFECT_CONTROL_2_COARSE' => 13,
|
244
|
+
'SLIDER_1' => 16,
|
245
|
+
'SLIDER_2' => 17,
|
246
|
+
'SLIDER_3' => 18,
|
247
|
+
'SLIDER_4' => 19,
|
248
|
+
'BANK_SELECT_FINE' => 32,
|
249
|
+
'MOD_WHEEL_FINE' => 33,
|
250
|
+
'BREATH_FINE' => 34,
|
251
|
+
'FOOT_PEDAL_FINE' => 36,
|
252
|
+
'PORTAMENTO_TIME_FINE' => 37,
|
253
|
+
'DATA_ENTRY_FINE' => 38,
|
254
|
+
'VOLUME_FINE' => 39,
|
255
|
+
'BALANCE_FINE' => 40,
|
256
|
+
'PAN_POSITION_FINE' => 42,
|
257
|
+
'EXPRESSION_FINE' => 43,
|
258
|
+
'EFFECT_CONTROL_1_FINE' => 44,
|
259
|
+
'EFFECT_CONTROL_2_FINE' => 45,
|
260
|
+
'HOLD_PEDAL' => 64,
|
261
|
+
'HOLD' => 64,
|
262
|
+
'PORTAMENTO' => 65,
|
263
|
+
'SUSTENUTO_PEDAL' => 66,
|
264
|
+
'SUSTENUTO' => 66,
|
265
|
+
'SOFT_PEDAL' => 67,
|
266
|
+
'SOFT' => 67,
|
267
|
+
'LEGATO_PEDAL' => 68,
|
268
|
+
'LEGATO' => 68,
|
269
|
+
'HOLD_2_PEDAL' => 69,
|
270
|
+
'HOLD_2' => 69,
|
271
|
+
'SOUND_VARIATION' => 70,
|
272
|
+
'VARIATION' => 70,
|
273
|
+
'SOUND_TIMBRE' => 71,
|
274
|
+
'TIMBRE' => 71,
|
275
|
+
'SOUND_RELEASE_TIME' => 72,
|
276
|
+
'RELEASE_TIME' => 72,
|
277
|
+
'SOUND_ATTACK_TIME' => 73,
|
278
|
+
'ATTACK_TIME' => 73,
|
279
|
+
'SOUND_BRIGHTNESS' => 74,
|
280
|
+
'X_BRIGHTNESS' => 74,
|
281
|
+
'SOUND_CONTROL_6' => 75,
|
282
|
+
'CONTROL_6' => 75,
|
283
|
+
'SOUND_CONTROL_7' => 76,
|
284
|
+
'CONTROL_7' => 76,
|
285
|
+
'SOUND_CONTROL_8' => 77,
|
286
|
+
'CONTROL_8' => 77,
|
287
|
+
'SOUND_CONTROL_9' => 78,
|
288
|
+
'CONTROL_9' => 78,
|
289
|
+
'SOUND_CONTROL_10' => 79,
|
290
|
+
'CONTROL_10' => 79,
|
291
|
+
'GENERAL_PURPOSE_BUTTON_1' => 80,
|
292
|
+
'GENERAL_BUTTON_1' => 80,
|
293
|
+
'BUTTON_1' => 80,
|
294
|
+
'GENERAL_PURPOSE_BUTTON_2' => 81,
|
295
|
+
'GENERAL_BUTTON_2' => 81,
|
296
|
+
'BUTTON_2' => 81,
|
297
|
+
'GENERAL_PURPOSE_BUTTON_3' => 82,
|
298
|
+
'GENERAL_BUTTON_3' => 82,
|
299
|
+
'BUTTON_3' => 82,
|
300
|
+
'GENERAL_PURPOSE_BUTTON_4' => 83,
|
301
|
+
'GENERAL_BUTTON_4' => 83,
|
302
|
+
'BUTTON_4' => 83,
|
303
|
+
'EFFECTS_LEVEL' => 91,
|
304
|
+
'EFFECTS' => 91,
|
305
|
+
'TREMOLO_LEVEL' => 92,
|
306
|
+
'TREMOLO' => 92,
|
307
|
+
'CHORUS_LEVEL' => 93,
|
308
|
+
'CHORUS' => 93,
|
309
|
+
'CELESTE_LEVEL' => 94,
|
310
|
+
'CELESTE' => 94,
|
311
|
+
'PHASER_LEVEL' => 95,
|
312
|
+
'PHASER' => 95,
|
313
|
+
'DATA_BUTTON_INCREMENT' => 96,
|
314
|
+
'DATA_BUTTON_INC' => 96,
|
315
|
+
'BUTTON_INC' => 96,
|
316
|
+
'DATA_BUTTON_DECREMENT' => 97,
|
317
|
+
'DATA_BUTTON_DEC' => 97,
|
318
|
+
'BUTTON_DEC' => 97,
|
319
|
+
'NON_REGISTERED_COARSE' => 98,
|
320
|
+
'NON_REGISTERED_FINE' => 99,
|
321
|
+
'REGISTERED_COARSE' => 100,
|
322
|
+
'REGISTERED_FINE' => 101,
|
323
|
+
'ALL_SOUND_OFF' => 120,
|
324
|
+
'ALL_CONTROLLERS_OFF' => 121,
|
325
|
+
'LOCAL_KEYBOARD' => 122,
|
326
|
+
'ALL_NOTES_OFF' => 123,
|
327
|
+
'OMNI_MODE_OFF' => 124,
|
328
|
+
'OMNI_OFF' => 124,
|
329
|
+
'OMNI_MODE_ON' => 125,
|
330
|
+
'OMNI_ON' => 125,
|
331
|
+
'MONO_OPERATION' => 126,
|
332
|
+
'MONO' => 126,
|
333
|
+
'POLY_OPERATION' => 127,
|
334
|
+
'POLY' => 127,
|
335
|
+
|
336
|
+
#== Combined values ==
|
337
|
+
'BANK_SELECT' => 16383,
|
338
|
+
'MOD_WHEEL' => 161,
|
339
|
+
'BREATH' => 290,
|
340
|
+
'FOOT_PEDAL' => 548,
|
341
|
+
'PORTAMENTO_TIME' => 677,
|
342
|
+
'DATA_ENTRY' => 806,
|
343
|
+
'VOLUME' => 935,
|
344
|
+
'BALANCE' => 1064,
|
345
|
+
'PAN_POSITION' => 1322,
|
346
|
+
'EXPRESSION' => 1451,
|
347
|
+
'EFFECT_CONTROL_1' => 1580,
|
348
|
+
'EFFECT_CONTROL_2' => 1709,
|
349
|
+
'NON_REGISTERED' => 12770,
|
350
|
+
'REGISTERED' => 13208,
|
351
|
+
|
352
|
+
#== Controller values ==
|
353
|
+
'ON' => 127,
|
354
|
+
'OFF' => 0,
|
355
|
+
'DEFAULT' => 64,
|
356
|
+
}
|
357
|
+
|
358
|
+
# All predefined variables for stretto
|
359
|
+
PREDEFINED_VARIABLES = INSTRUMENT_VARIABLES.
|
360
|
+
merge(PERCUSSION_VARIABLES).
|
361
|
+
merge(TEMPO_VARIABLES).
|
362
|
+
merge(CONTROLLER_VARIABLES)
|
363
|
+
|
364
|
+
end
|
365
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../util/node')
|
2
|
+
require File.join(File.dirname(__FILE__), 'modifiers/duration')
|
3
|
+
|
4
|
+
module Stretto
|
5
|
+
module MusicElements
|
6
|
+
|
7
|
+
# Superclass of all music elements in Stretto.
|
8
|
+
#
|
9
|
+
# These are all the elements than can be added to a pattern, most of them represent some
|
10
|
+
# data to be sent to a MIDI channel, or are some notation element to aid in the composition.
|
11
|
+
class MusicElement
|
12
|
+
|
13
|
+
include Stretto::Node
|
14
|
+
|
15
|
+
# In the case of parsed element, this is the originating string.
|
16
|
+
# In the case of calculated elements, this should be an empty string, and its string
|
17
|
+
# representation must be provided by the element
|
18
|
+
#
|
19
|
+
# @return [String, nil]
|
20
|
+
attr_reader :original_string
|
21
|
+
|
22
|
+
# The pattern to where this element belongs. Used to make calculations about key signatures,
|
23
|
+
# ties, instruments, voices, etc. that may modify the element itself.
|
24
|
+
#
|
25
|
+
# @return [Pattern, nil]
|
26
|
+
attr_reader :pattern
|
27
|
+
|
28
|
+
# Stores the original string and an optional pattern
|
29
|
+
def initialize(original_string, pattern = nil)
|
30
|
+
@original_string = original_string # TODO: Validates always an original string?
|
31
|
+
@pattern = pattern
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return The string representation of the element
|
35
|
+
# @todo No specs for this. Ideally, its string representation should be one that can be
|
36
|
+
# parsed again to retrieve the same element
|
37
|
+
def to_s
|
38
|
+
original_string || build_music_string
|
39
|
+
end
|
40
|
+
|
41
|
+
# @abstract
|
42
|
+
# @todo Not yet implemented
|
43
|
+
def build_music_string
|
44
|
+
raise "build_music_string not implemented in #{self.class}"
|
45
|
+
end
|
46
|
+
|
47
|
+
alias inspect to_s
|
48
|
+
|
49
|
+
# By default, it is true, so we can tie notes with elements in between
|
50
|
+
def start_of_tie?
|
51
|
+
true
|
52
|
+
end
|
53
|
+
|
54
|
+
# By default, it is true, so we can tie notes with elements in between
|
55
|
+
def end_of_tie?
|
56
|
+
true
|
57
|
+
end
|
58
|
+
|
59
|
+
# By default, duration is 0
|
60
|
+
#
|
61
|
+
# The correct duration should be overriden by subclasses
|
62
|
+
def duration
|
63
|
+
0
|
64
|
+
end
|
65
|
+
|
66
|
+
# @private
|
67
|
+
#
|
68
|
+
# Called whenever an element is attached to a pattern, and its attributes need to be
|
69
|
+
# recalculated / validated (because of variables, key signatures, ties, etc.)
|
70
|
+
#
|
71
|
+
# Each element class must override this class to provide the callback when the element
|
72
|
+
# is added to a pattern.
|
73
|
+
def substitute_variables!
|
74
|
+
# TODO: Big TODO - Change this method's name for a callback.
|
75
|
+
end
|
76
|
+
|
77
|
+
# Assigns the pattern to the element, and runs any associated callback
|
78
|
+
#
|
79
|
+
# @see #substitute_variables!
|
80
|
+
def pattern=(pattern)
|
81
|
+
@pattern = pattern
|
82
|
+
substitute_variables! # TODO: Remove this call
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|