musa-dsl 0.22.2 → 0.23.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.
- checksums.yaml +4 -4
- data/Gemfile +3 -1
- data/lib/musa-dsl.rb +14 -8
- data/lib/musa-dsl/core-ext/deep-copy.rb +12 -1
- data/lib/musa-dsl/core-ext/inspect-nice.rb +1 -2
- data/lib/musa-dsl/core-ext/smart-proc-binder.rb +13 -11
- data/lib/musa-dsl/datasets/p.rb +41 -16
- data/lib/musa-dsl/datasets/score/to-mxml/process-pdv.rb +14 -12
- data/lib/musa-dsl/datasets/score/to-mxml/process-ps.rb +32 -6
- data/lib/musa-dsl/datasets/score/to-mxml/to-mxml.rb +24 -10
- data/lib/musa-dsl/generative/backboner.rb +6 -11
- data/lib/musa-dsl/generative/generative-grammar.rb +1 -3
- data/lib/musa-dsl/generative/markov.rb +10 -6
- data/lib/musa-dsl/logger/logger.rb +6 -1
- data/lib/musa-dsl/matrix/matrix.rb +9 -7
- data/lib/musa-dsl/midi/midi-voices.rb +1 -0
- data/lib/musa-dsl/music/scales.rb +1 -1
- data/lib/musa-dsl/neumalang/neumalang.rb +1 -1
- data/lib/musa-dsl/neumas/array-to-neumas.rb +1 -1
- data/lib/musa-dsl/sequencer/base-sequencer-implementation-play-helper.rb +9 -4
- data/lib/musa-dsl/sequencer/base-sequencer-implementation-play-timed.rb +30 -129
- data/lib/musa-dsl/sequencer/base-sequencer-implementation.rb +10 -24
- data/lib/musa-dsl/sequencer/base-sequencer-tick-based.rb +9 -9
- data/lib/musa-dsl/sequencer/base-sequencer-tickless-based.rb +3 -5
- data/lib/musa-dsl/sequencer/{base-sequencer-public.rb → base-sequencer.rb} +15 -23
- data/lib/musa-dsl/sequencer/sequencer-dsl.rb +9 -7
- data/lib/musa-dsl/sequencer/sequencer.rb +8 -1
- data/lib/musa-dsl/series/base-series.rb +293 -144
- data/lib/musa-dsl/series/buffer-serie.rb +237 -0
- data/lib/musa-dsl/series/hash-or-array-serie-splitter.rb +139 -60
- data/lib/musa-dsl/series/main-serie-constructors.rb +254 -165
- data/lib/musa-dsl/series/main-serie-operations.rb +308 -303
- data/lib/musa-dsl/series/proxy-serie.rb +21 -41
- data/lib/musa-dsl/series/quantizer-serie.rb +44 -46
- data/lib/musa-dsl/series/queue-serie.rb +39 -43
- data/lib/musa-dsl/series/series-composer.rb +149 -0
- data/lib/musa-dsl/series/series.rb +6 -2
- data/lib/musa-dsl/series/timed-serie.rb +343 -0
- data/musa-dsl.gemspec +13 -3
- metadata +11 -11
- data/lib/musa-dsl/series/flattener-timed-serie.rb +0 -61
- data/lib/musa-dsl/series/holder-serie.rb +0 -87
@@ -1,15 +1,15 @@
|
|
1
1
|
require_relative '../core-ext/arrayfy'
|
2
2
|
require_relative '../core-ext/smart-proc-binder'
|
3
3
|
|
4
|
+
require_relative 'base-series'
|
5
|
+
|
4
6
|
using Musa::Extension::Arrayfy
|
5
7
|
using Musa::Extension::ExplodeRanges
|
6
8
|
|
7
9
|
# TODO: añadir en for: steps: (nº de pasos en los que repartir el incremento)
|
8
10
|
|
9
11
|
module Musa
|
10
|
-
module Series
|
11
|
-
extend self
|
12
|
-
|
12
|
+
module Series::Constructors
|
13
13
|
def NIL
|
14
14
|
NilSerie.new
|
15
15
|
end
|
@@ -18,10 +18,6 @@ module Musa
|
|
18
18
|
FromArray.new values.explode_ranges
|
19
19
|
end
|
20
20
|
|
21
|
-
def _SE(values, extends:)
|
22
|
-
FromArray.new values.explode_ranges, extends
|
23
|
-
end
|
24
|
-
|
25
21
|
def H(**series_hash)
|
26
22
|
FromHashOfSeries.new series_hash, false
|
27
23
|
end
|
@@ -63,8 +59,8 @@ module Musa
|
|
63
59
|
end
|
64
60
|
end
|
65
61
|
|
66
|
-
def MERGE(*
|
67
|
-
Sequence.new(
|
62
|
+
def MERGE(*series)
|
63
|
+
Sequence.new(series)
|
68
64
|
end
|
69
65
|
|
70
66
|
def RND1(*values, from: nil, to: nil, step: nil, random: nil)
|
@@ -104,33 +100,35 @@ module Musa
|
|
104
100
|
###
|
105
101
|
|
106
102
|
class NilSerie
|
107
|
-
include Serie
|
108
|
-
|
109
|
-
|
110
|
-
end
|
103
|
+
include Musa::Series::Serie.base
|
104
|
+
|
105
|
+
def _next_value; nil; end
|
111
106
|
end
|
112
107
|
|
113
108
|
private_constant :NilSerie
|
114
109
|
|
115
110
|
class FromArray
|
116
|
-
include Serie
|
117
|
-
|
118
|
-
attr_reader :values
|
111
|
+
include Musa::Series::Serie.base
|
119
112
|
|
120
113
|
def initialize(values = nil, extends = nil)
|
121
|
-
@values = values
|
122
|
-
|
114
|
+
@values = values
|
115
|
+
mark_as_prototype!
|
123
116
|
|
124
|
-
|
117
|
+
x = self
|
118
|
+
extends.arrayfy.each do |e|
|
119
|
+
x.extend(e)
|
120
|
+
end
|
125
121
|
|
126
|
-
|
122
|
+
init
|
127
123
|
end
|
128
124
|
|
129
|
-
|
125
|
+
attr_accessor :values
|
126
|
+
|
127
|
+
private def _init
|
130
128
|
@index = 0
|
131
129
|
end
|
132
130
|
|
133
|
-
def _next_value
|
131
|
+
private def _next_value
|
134
132
|
if @values && @index < @values.size
|
135
133
|
value = @values[@index]
|
136
134
|
@index += 1
|
@@ -142,31 +140,30 @@ module Musa
|
|
142
140
|
end
|
143
141
|
end
|
144
142
|
|
145
|
-
private_constant :FromArray
|
143
|
+
# private_constant :FromArray
|
146
144
|
|
147
145
|
class Sequence
|
148
|
-
include Serie
|
149
|
-
|
150
|
-
attr_reader :sources
|
146
|
+
include Musa::Series::Serie.with(sources: true)
|
151
147
|
|
152
148
|
def initialize(series)
|
153
|
-
|
154
|
-
series.collect(&:prototype).freeze
|
155
|
-
else
|
156
|
-
series.collect(&:instance)
|
157
|
-
end
|
158
|
-
|
159
|
-
_restart false
|
149
|
+
self.sources = series
|
160
150
|
|
161
|
-
|
151
|
+
init
|
162
152
|
end
|
163
153
|
|
164
|
-
|
154
|
+
attr_accessor :sources
|
155
|
+
|
156
|
+
private def _init
|
165
157
|
@index = 0
|
166
|
-
@
|
158
|
+
@restart_sources = false
|
167
159
|
end
|
168
160
|
|
169
|
-
def
|
161
|
+
private def _restart
|
162
|
+
@sources[0].restart
|
163
|
+
@restart_sources = true
|
164
|
+
end
|
165
|
+
|
166
|
+
private def _next_value
|
170
167
|
value = nil
|
171
168
|
|
172
169
|
if @index < @sources.size
|
@@ -175,7 +172,7 @@ module Musa
|
|
175
172
|
if value.nil?
|
176
173
|
@index += 1
|
177
174
|
if @index < @sources.size
|
178
|
-
@sources[@index].restart
|
175
|
+
@sources[@index].restart if @restart_sources
|
179
176
|
value = next_value
|
180
177
|
end
|
181
178
|
end
|
@@ -192,35 +189,50 @@ module Musa
|
|
192
189
|
private_constant :Sequence
|
193
190
|
|
194
191
|
class FromEvalBlockWithParameters
|
195
|
-
include Serie
|
196
|
-
include Musa::Extension::SmartProcBinder
|
192
|
+
include Musa::Series::Serie.with(smart_block: true)
|
197
193
|
|
198
|
-
|
194
|
+
using Musa::Extension::DeepCopy
|
199
195
|
|
200
|
-
def initialize(*
|
196
|
+
def initialize(*parameters, **key_parameters, &block)
|
201
197
|
raise ArgumentError, 'Yield block is undefined' unless block
|
202
198
|
|
203
|
-
@original_value_parameters =
|
204
|
-
@original_key_parameters =
|
205
|
-
|
206
|
-
@block = SmartProcBinder.new(block)
|
199
|
+
@original_value_parameters = parameters
|
200
|
+
@original_key_parameters = key_parameters
|
207
201
|
|
208
|
-
|
202
|
+
self.proc = block
|
209
203
|
|
210
204
|
mark_as_prototype!
|
205
|
+
|
206
|
+
init
|
207
|
+
end
|
208
|
+
|
209
|
+
def parameters
|
210
|
+
@original_value_parameters
|
211
|
+
end
|
212
|
+
|
213
|
+
def parameters=(values)
|
214
|
+
@original_value_parameters = values
|
215
|
+
end
|
216
|
+
|
217
|
+
def key_parameters
|
218
|
+
@original_key_parameters
|
219
|
+
end
|
220
|
+
|
221
|
+
def key_parameters=(key_values)
|
222
|
+
@original_key_parameters = key_values
|
211
223
|
end
|
212
224
|
|
213
|
-
def
|
214
|
-
@value_parameters = @original_value_parameters.
|
215
|
-
@key_parameters = @original_key_parameters.
|
225
|
+
private def _init
|
226
|
+
@value_parameters = @original_value_parameters.clone(deep: true)
|
227
|
+
@key_parameters = @original_key_parameters.clone(deep: true)
|
216
228
|
|
217
229
|
@first = true
|
218
230
|
@value = nil
|
219
231
|
end
|
220
232
|
|
221
|
-
def _next_value
|
233
|
+
private def _next_value
|
222
234
|
@value = if !@value.nil? || @value.nil? && @first
|
223
|
-
@value = @block.call(*@value_parameters, last_value: @value, **@key_parameters)
|
235
|
+
@value = @block.call(*@value_parameters, last_value: @value, caller: self, **@key_parameters)
|
224
236
|
else
|
225
237
|
nil
|
226
238
|
end
|
@@ -233,9 +245,7 @@ module Musa
|
|
233
245
|
private_constant :FromEvalBlockWithParameters
|
234
246
|
|
235
247
|
class ForLoop
|
236
|
-
include Serie
|
237
|
-
|
238
|
-
attr_reader :from, :to, :step
|
248
|
+
include Musa::Series::Serie.base
|
239
249
|
|
240
250
|
def initialize(from, to, step)
|
241
251
|
@from = from
|
@@ -244,22 +254,39 @@ module Musa
|
|
244
254
|
|
245
255
|
sign_adjust_step
|
246
256
|
|
247
|
-
_restart
|
248
|
-
|
249
257
|
mark_as_prototype!
|
258
|
+
|
259
|
+
init
|
250
260
|
end
|
251
261
|
|
252
|
-
|
253
|
-
|
262
|
+
attr_reader :from, :to, :step
|
263
|
+
|
264
|
+
def from=(value)
|
265
|
+
@from = value
|
266
|
+
sign_adjust_step
|
254
267
|
end
|
255
268
|
|
256
|
-
def
|
269
|
+
def to=(value)
|
270
|
+
@to = value
|
271
|
+
sign_adjust_step
|
272
|
+
end
|
273
|
+
|
274
|
+
def step=(value)
|
275
|
+
@step = value
|
276
|
+
sign_adjust_step
|
277
|
+
end
|
278
|
+
|
279
|
+
private def _init
|
280
|
+
@value = @from - @step
|
281
|
+
end
|
282
|
+
|
283
|
+
private def _next_value
|
257
284
|
if @value
|
258
|
-
value = @value
|
259
285
|
@value += @step
|
286
|
+
value = @value
|
260
287
|
end
|
261
288
|
|
262
|
-
@value = nil if @to && @value && (@value
|
289
|
+
@value = nil if @to && @value && (@value >= @to && @step.positive? || @value <= @to && @step.negative?)
|
263
290
|
|
264
291
|
value
|
265
292
|
end
|
@@ -268,9 +295,7 @@ module Musa
|
|
268
295
|
@to.nil?
|
269
296
|
end
|
270
297
|
|
271
|
-
private
|
272
|
-
|
273
|
-
def sign_adjust_step
|
298
|
+
private def sign_adjust_step
|
274
299
|
@step = (-@step if @to && (@from < @to && @step < 0 || @from > @to && @step > 0)) || @step
|
275
300
|
end
|
276
301
|
end
|
@@ -278,24 +303,24 @@ module Musa
|
|
278
303
|
private_constant :ForLoop
|
279
304
|
|
280
305
|
class RandomValueFromArray
|
281
|
-
include Serie
|
282
|
-
|
283
|
-
attr_reader :values, :random
|
306
|
+
include Musa::Series::Serie.base
|
284
307
|
|
285
308
|
def initialize(values, random)
|
286
|
-
@values = values
|
309
|
+
@values = values
|
287
310
|
@random = random
|
288
311
|
|
289
|
-
_restart
|
290
|
-
|
291
312
|
mark_as_prototype!
|
313
|
+
|
314
|
+
init
|
292
315
|
end
|
293
316
|
|
294
|
-
|
317
|
+
attr_accessor :values, :random
|
318
|
+
|
319
|
+
private def _init
|
295
320
|
@value = nil
|
296
321
|
end
|
297
322
|
|
298
|
-
def _next_value
|
323
|
+
private def _next_value
|
299
324
|
if @value
|
300
325
|
nil
|
301
326
|
else
|
@@ -307,9 +332,7 @@ module Musa
|
|
307
332
|
private_constant :RandomValueFromArray
|
308
333
|
|
309
334
|
class RandomNumberFromRange
|
310
|
-
include Serie
|
311
|
-
|
312
|
-
attr_reader :from, :to, :step, :random
|
335
|
+
include Musa::Series::Serie.base
|
313
336
|
|
314
337
|
def initialize(from, to, step, random)
|
315
338
|
@from = from
|
@@ -320,16 +343,39 @@ module Musa
|
|
320
343
|
|
321
344
|
@random = random
|
322
345
|
|
323
|
-
_restart
|
324
|
-
|
325
346
|
mark_as_prototype!
|
347
|
+
|
348
|
+
init
|
326
349
|
end
|
327
350
|
|
328
|
-
|
351
|
+
attr_reader :from
|
352
|
+
|
353
|
+
def from=(value)
|
354
|
+
@from = value
|
355
|
+
sign_adjust_step
|
356
|
+
end
|
357
|
+
|
358
|
+
attr_reader :to
|
359
|
+
|
360
|
+
def to=(value)
|
361
|
+
@to = value
|
362
|
+
sign_adjust_step
|
363
|
+
end
|
364
|
+
|
365
|
+
attr_reader :step
|
366
|
+
|
367
|
+
def step=(value)
|
368
|
+
@step = value
|
369
|
+
sign_adjust_step
|
370
|
+
end
|
371
|
+
|
372
|
+
attr_accessor :random
|
373
|
+
|
374
|
+
private def _init
|
329
375
|
@value = nil
|
330
376
|
end
|
331
377
|
|
332
|
-
def _next_value
|
378
|
+
private def _next_value
|
333
379
|
if @value
|
334
380
|
nil
|
335
381
|
else
|
@@ -337,9 +383,7 @@ module Musa
|
|
337
383
|
end
|
338
384
|
end
|
339
385
|
|
340
|
-
private
|
341
|
-
|
342
|
-
def adjust_step
|
386
|
+
private def adjust_step
|
343
387
|
@step = (-@step if @from < @to && @step < 0 || @from > @to && @step > 0) || @step
|
344
388
|
@step_count = ((@to - @from) / @step).to_i
|
345
389
|
end
|
@@ -348,24 +392,25 @@ module Musa
|
|
348
392
|
private_constant :RandomNumberFromRange
|
349
393
|
|
350
394
|
class RandomValuesFromArray
|
351
|
-
include Serie
|
352
|
-
|
353
|
-
attr_reader :values, :random
|
395
|
+
include Musa::Series::Serie.base
|
354
396
|
|
355
397
|
def initialize(values, random)
|
356
398
|
@values = values.clone.freeze
|
357
399
|
@random = random
|
358
400
|
|
359
|
-
_restart
|
360
|
-
|
361
401
|
mark_as_prototype!
|
402
|
+
|
403
|
+
init
|
362
404
|
end
|
363
405
|
|
364
|
-
|
406
|
+
attr_accessor :values
|
407
|
+
attr_accessor :random
|
408
|
+
|
409
|
+
private def _init
|
365
410
|
@available_values = @values.dup
|
366
411
|
end
|
367
412
|
|
368
|
-
def _next_value
|
413
|
+
private def _next_value
|
369
414
|
value = nil
|
370
415
|
unless @available_values.empty?
|
371
416
|
i = @random.rand(0...@available_values.size)
|
@@ -379,9 +424,7 @@ module Musa
|
|
379
424
|
private_constant :RandomValuesFromArray
|
380
425
|
|
381
426
|
class RandomNumbersFromRange
|
382
|
-
include Serie
|
383
|
-
|
384
|
-
attr_reader :from, :to, :step, :random
|
427
|
+
include Musa::Series::Serie.base
|
385
428
|
|
386
429
|
def initialize(from, to, step, random)
|
387
430
|
@from = from
|
@@ -392,16 +435,39 @@ module Musa
|
|
392
435
|
|
393
436
|
@random = random
|
394
437
|
|
395
|
-
_restart
|
396
|
-
|
397
438
|
mark_as_prototype!
|
439
|
+
|
440
|
+
init
|
398
441
|
end
|
399
442
|
|
400
|
-
|
443
|
+
attr_reader :from
|
444
|
+
|
445
|
+
def from=(value)
|
446
|
+
@from = value
|
447
|
+
adjust_step
|
448
|
+
end
|
449
|
+
|
450
|
+
attr_reader :to
|
451
|
+
|
452
|
+
def to=(value)
|
453
|
+
@to = value
|
454
|
+
adjust_step
|
455
|
+
end
|
456
|
+
|
457
|
+
attr_reader :step
|
458
|
+
|
459
|
+
def step=(value)
|
460
|
+
@step = value
|
461
|
+
adjust_step
|
462
|
+
end
|
463
|
+
|
464
|
+
attr_accessor :random
|
465
|
+
|
466
|
+
private def _init
|
401
467
|
@available_steps = (0..@step_count).to_a
|
402
468
|
end
|
403
469
|
|
404
|
-
def _next_value
|
470
|
+
private def _next_value
|
405
471
|
value = nil
|
406
472
|
unless @available_steps.empty?
|
407
473
|
i = @random.rand(0...@available_steps.size)
|
@@ -411,9 +477,7 @@ module Musa
|
|
411
477
|
value
|
412
478
|
end
|
413
479
|
|
414
|
-
private
|
415
|
-
|
416
|
-
def adjust_step
|
480
|
+
private def adjust_step
|
417
481
|
@step = (-@step if @from < @to && @step < 0 || @from > @to && @step > 0) || @step
|
418
482
|
@step_count = ((@to - @from) / @step).to_i
|
419
483
|
end
|
@@ -422,37 +486,27 @@ module Musa
|
|
422
486
|
private_constant :RandomNumbersFromRange
|
423
487
|
|
424
488
|
class FromHashOfSeries
|
425
|
-
include Serie
|
426
|
-
|
427
|
-
attr_reader :sources, :cycle
|
489
|
+
include Musa::Series::Serie.with(sources: true)
|
428
490
|
|
429
491
|
def initialize(hash_of_series, cycle_all_series)
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
_restart false
|
492
|
+
self.sources = hash_of_series
|
493
|
+
self.cycle = cycle_all_series
|
434
494
|
|
435
|
-
|
495
|
+
init
|
436
496
|
end
|
437
497
|
|
438
|
-
|
498
|
+
attr_accessor :cycle
|
499
|
+
|
500
|
+
private def _init
|
439
501
|
@have_current = false
|
440
502
|
@value = nil
|
441
|
-
|
442
|
-
if restart_sources
|
443
|
-
@sources.each do |_key, serie|
|
444
|
-
serie.restart
|
445
|
-
end
|
446
|
-
end
|
447
503
|
end
|
448
504
|
|
449
|
-
def
|
450
|
-
@sources.each
|
451
|
-
serie.restart if serie.current_value.nil?
|
452
|
-
end
|
505
|
+
private def _restart
|
506
|
+
@sources.values.each(&:restart)
|
453
507
|
end
|
454
508
|
|
455
|
-
def _next_value
|
509
|
+
private def _next_value
|
456
510
|
unless @have_current && @value.nil?
|
457
511
|
pre_value = @sources.collect { |key, serie| [key, serie.peek_next_value] }.to_h
|
458
512
|
|
@@ -480,42 +534,38 @@ module Musa
|
|
480
534
|
|
481
535
|
@value
|
482
536
|
end
|
537
|
+
|
538
|
+
private def _soft_restart
|
539
|
+
@sources.each do |_key, serie|
|
540
|
+
serie.restart if serie.current_value.nil?
|
541
|
+
end
|
542
|
+
end
|
483
543
|
end
|
484
544
|
|
485
545
|
private_constant :FromHashOfSeries
|
486
546
|
|
487
547
|
class FromArrayOfSeries
|
488
|
-
include Serie
|
489
|
-
|
490
|
-
attr_reader :sources, :cycle
|
548
|
+
include Musa::Series::Serie.with(sources: true)
|
491
549
|
|
492
550
|
def initialize(series_array, cycle_all_series)
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
_restart false
|
551
|
+
self.sources = series_array
|
552
|
+
self.cycle = cycle_all_series
|
497
553
|
|
498
|
-
|
554
|
+
init
|
499
555
|
end
|
500
556
|
|
501
|
-
|
557
|
+
attr_accessor :cycle
|
558
|
+
|
559
|
+
private def _init
|
502
560
|
@have_current = false
|
503
561
|
@value = nil
|
504
|
-
|
505
|
-
if restart_sources
|
506
|
-
@sources.each do |serie|
|
507
|
-
serie.restart if serie.current_value.nil?
|
508
|
-
end
|
509
|
-
end
|
510
562
|
end
|
511
563
|
|
512
|
-
def
|
513
|
-
@sources.each
|
514
|
-
serie.restart if serie.current_value.nil?
|
515
|
-
end
|
564
|
+
private def _restart
|
565
|
+
@sources.each(&:restart)
|
516
566
|
end
|
517
567
|
|
518
|
-
def _next_value
|
568
|
+
private def _next_value
|
519
569
|
unless @have_current && @value.nil?
|
520
570
|
pre_value = @sources.collect(&:peek_next_value)
|
521
571
|
|
@@ -543,14 +593,18 @@ module Musa
|
|
543
593
|
|
544
594
|
@value
|
545
595
|
end
|
596
|
+
|
597
|
+
private def _soft_restart
|
598
|
+
@sources.each do |serie|
|
599
|
+
serie.restart if serie.current_value.nil?
|
600
|
+
end
|
601
|
+
end
|
546
602
|
end
|
547
603
|
|
548
604
|
private_constant :FromArrayOfSeries
|
549
605
|
|
550
606
|
class SinFunction
|
551
|
-
include Serie
|
552
|
-
|
553
|
-
attr_reader :start, :steps, :amplitude, :center
|
607
|
+
include Musa::Series::Serie.base
|
554
608
|
|
555
609
|
def initialize(start, steps, amplitude, center)
|
556
610
|
@start = start.to_f
|
@@ -561,16 +615,44 @@ module Musa
|
|
561
615
|
|
562
616
|
update
|
563
617
|
|
564
|
-
_restart
|
565
|
-
|
566
618
|
mark_as_prototype!
|
619
|
+
|
620
|
+
init
|
621
|
+
end
|
622
|
+
|
623
|
+
attr_reader :start
|
624
|
+
|
625
|
+
def start=(value)
|
626
|
+
@start = value.to_f
|
627
|
+
update
|
628
|
+
end
|
629
|
+
|
630
|
+
attr_reader :steps
|
631
|
+
|
632
|
+
def steps=(value)
|
633
|
+
@steps = value
|
634
|
+
update
|
635
|
+
end
|
636
|
+
|
637
|
+
attr_reader :amplitude
|
638
|
+
|
639
|
+
def amplitude=(value)
|
640
|
+
@amplitude = value
|
641
|
+
update
|
642
|
+
end
|
643
|
+
|
644
|
+
attr_reader :center
|
645
|
+
|
646
|
+
def center=(value)
|
647
|
+
@center = value
|
648
|
+
update
|
567
649
|
end
|
568
650
|
|
569
|
-
def
|
651
|
+
private def _init
|
570
652
|
@position = 0
|
571
653
|
end
|
572
654
|
|
573
|
-
def _next_value
|
655
|
+
private def _next_value
|
574
656
|
value = nil
|
575
657
|
unless @position >= @steps
|
576
658
|
value = Math.sin(@offset + @step_size * @position) * (@amplitude / 2.0) + @center
|
@@ -579,13 +661,7 @@ module Musa
|
|
579
661
|
value
|
580
662
|
end
|
581
663
|
|
582
|
-
def
|
583
|
-
"offset: #{@offset.round(3)}rd amplitude: #{@amplitude.round(3)} center: #{@center.round(3)} length: #{@length} step_size: #{@step_size.round(6)}"
|
584
|
-
end
|
585
|
-
|
586
|
-
private
|
587
|
-
|
588
|
-
def update
|
664
|
+
private def update
|
589
665
|
y = 2 * (@start - @center) / @amplitude
|
590
666
|
warn "WARNING: value for offset calc #{y} is outside asin range" if y < -1 || y > 1
|
591
667
|
y = 1.0 if y > 1.0 # por los errores de precisión infinitesimal en el cálculo de y cuando es muy próximo a 1.0
|
@@ -594,25 +670,28 @@ module Musa
|
|
594
670
|
@offset = Math.asin(y)
|
595
671
|
@step_size = 2.0 * Math::PI / @steps
|
596
672
|
end
|
673
|
+
|
674
|
+
def to_s
|
675
|
+
"offset: #{@offset.round(3)}rd amplitude: #{@amplitude.round(3)} center: #{@center.round(3)} length: #{@length} step_size: #{@step_size.round(6)}"
|
676
|
+
end
|
597
677
|
end
|
598
678
|
|
599
679
|
private_constant :SinFunction
|
600
680
|
|
601
681
|
class Fibonacci
|
602
|
-
include Serie
|
682
|
+
include Musa::Series::Serie.base
|
603
683
|
|
604
684
|
def initialize
|
605
|
-
_restart
|
606
|
-
|
607
685
|
mark_as_prototype!
|
686
|
+
init
|
608
687
|
end
|
609
688
|
|
610
|
-
def
|
689
|
+
private def _init
|
611
690
|
@a = 0
|
612
691
|
@b = 1
|
613
692
|
end
|
614
693
|
|
615
|
-
def _next_value
|
694
|
+
private def _next_value
|
616
695
|
initial_b = @b
|
617
696
|
@b = @a + @b
|
618
697
|
@a = initial_b
|
@@ -628,20 +707,30 @@ module Musa
|
|
628
707
|
private_constant :Fibonacci
|
629
708
|
|
630
709
|
class HarmonicNotes
|
631
|
-
include Serie
|
632
|
-
|
633
|
-
attr_reader :error, :extended
|
710
|
+
include Musa::Series::Serie.base
|
634
711
|
|
635
712
|
def initialize(error, extended)
|
636
713
|
@error = error
|
637
714
|
@extended = extended
|
638
715
|
|
639
|
-
_restart
|
640
|
-
|
641
716
|
mark_as_prototype!
|
717
|
+
|
718
|
+
init
|
719
|
+
end
|
720
|
+
|
721
|
+
attr_reader :error
|
722
|
+
|
723
|
+
def error=(value)
|
724
|
+
@error = value
|
725
|
+
end
|
726
|
+
|
727
|
+
attr_reader :extended
|
728
|
+
|
729
|
+
def extended=(value)
|
730
|
+
@extended = value
|
642
731
|
end
|
643
732
|
|
644
|
-
def
|
733
|
+
def _init
|
645
734
|
@harmonic = 0
|
646
735
|
end
|
647
736
|
|