musa-dsl 0.22.3 → 0.23.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 +8 -7
- 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.rb +14 -23
- data/lib/musa-dsl/sequencer/sequencer-dsl.rb +9 -7
- data/lib/musa-dsl/sequencer/sequencer.rb +7 -0
- 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 +136 -105
- data/lib/musa-dsl/series/main-serie-constructors.rb +251 -156
- 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 -3
- data/lib/musa-dsl/series/timed-serie.rb +343 -0
- data/musa-dsl.gemspec +13 -3
- metadata +10 -11
- data/lib/musa-dsl/series/flattener-timed-serie.rb +0 -61
- data/lib/musa-dsl/series/holder-serie.rb +0 -87
- data/lib/musa-dsl/series/union-timed-series.rb +0 -109
@@ -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
|
211
207
|
end
|
212
208
|
|
213
|
-
def
|
214
|
-
@
|
215
|
-
|
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
|
223
|
+
end
|
224
|
+
|
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
|
260
|
+
end
|
261
|
+
|
262
|
+
attr_reader :from, :to, :step
|
263
|
+
|
264
|
+
def from=(value)
|
265
|
+
@from = value
|
266
|
+
sign_adjust_step
|
250
267
|
end
|
251
268
|
|
252
|
-
def
|
253
|
-
@
|
269
|
+
def to=(value)
|
270
|
+
@to = value
|
271
|
+
sign_adjust_step
|
254
272
|
end
|
255
273
|
|
256
|
-
def
|
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
|
@@ -276,24 +303,24 @@ module Musa
|
|
276
303
|
private_constant :ForLoop
|
277
304
|
|
278
305
|
class RandomValueFromArray
|
279
|
-
include Serie
|
280
|
-
|
281
|
-
attr_reader :values, :random
|
306
|
+
include Musa::Series::Serie.base
|
282
307
|
|
283
308
|
def initialize(values, random)
|
284
|
-
@values = values
|
309
|
+
@values = values
|
285
310
|
@random = random
|
286
311
|
|
287
|
-
_restart
|
288
|
-
|
289
312
|
mark_as_prototype!
|
313
|
+
|
314
|
+
init
|
290
315
|
end
|
291
316
|
|
292
|
-
|
317
|
+
attr_accessor :values, :random
|
318
|
+
|
319
|
+
private def _init
|
293
320
|
@value = nil
|
294
321
|
end
|
295
322
|
|
296
|
-
def _next_value
|
323
|
+
private def _next_value
|
297
324
|
if @value
|
298
325
|
nil
|
299
326
|
else
|
@@ -305,9 +332,7 @@ module Musa
|
|
305
332
|
private_constant :RandomValueFromArray
|
306
333
|
|
307
334
|
class RandomNumberFromRange
|
308
|
-
include Serie
|
309
|
-
|
310
|
-
attr_reader :from, :to, :step, :random
|
335
|
+
include Musa::Series::Serie.base
|
311
336
|
|
312
337
|
def initialize(from, to, step, random)
|
313
338
|
@from = from
|
@@ -318,16 +343,39 @@ module Musa
|
|
318
343
|
|
319
344
|
@random = random
|
320
345
|
|
321
|
-
_restart
|
322
|
-
|
323
346
|
mark_as_prototype!
|
347
|
+
|
348
|
+
init
|
324
349
|
end
|
325
350
|
|
326
|
-
|
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
|
327
375
|
@value = nil
|
328
376
|
end
|
329
377
|
|
330
|
-
def _next_value
|
378
|
+
private def _next_value
|
331
379
|
if @value
|
332
380
|
nil
|
333
381
|
else
|
@@ -344,24 +392,25 @@ module Musa
|
|
344
392
|
private_constant :RandomNumberFromRange
|
345
393
|
|
346
394
|
class RandomValuesFromArray
|
347
|
-
include Serie
|
348
|
-
|
349
|
-
attr_reader :values, :random
|
395
|
+
include Musa::Series::Serie.base
|
350
396
|
|
351
397
|
def initialize(values, random)
|
352
398
|
@values = values.clone.freeze
|
353
399
|
@random = random
|
354
400
|
|
355
|
-
_restart
|
356
|
-
|
357
401
|
mark_as_prototype!
|
402
|
+
|
403
|
+
init
|
358
404
|
end
|
359
405
|
|
360
|
-
|
406
|
+
attr_accessor :values
|
407
|
+
attr_accessor :random
|
408
|
+
|
409
|
+
private def _init
|
361
410
|
@available_values = @values.dup
|
362
411
|
end
|
363
412
|
|
364
|
-
def _next_value
|
413
|
+
private def _next_value
|
365
414
|
value = nil
|
366
415
|
unless @available_values.empty?
|
367
416
|
i = @random.rand(0...@available_values.size)
|
@@ -375,9 +424,7 @@ module Musa
|
|
375
424
|
private_constant :RandomValuesFromArray
|
376
425
|
|
377
426
|
class RandomNumbersFromRange
|
378
|
-
include Serie
|
379
|
-
|
380
|
-
attr_reader :from, :to, :step, :random
|
427
|
+
include Musa::Series::Serie.base
|
381
428
|
|
382
429
|
def initialize(from, to, step, random)
|
383
430
|
@from = from
|
@@ -388,16 +435,39 @@ module Musa
|
|
388
435
|
|
389
436
|
@random = random
|
390
437
|
|
391
|
-
_restart
|
392
|
-
|
393
438
|
mark_as_prototype!
|
439
|
+
|
440
|
+
init
|
394
441
|
end
|
395
442
|
|
396
|
-
|
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
|
397
467
|
@available_steps = (0..@step_count).to_a
|
398
468
|
end
|
399
469
|
|
400
|
-
def _next_value
|
470
|
+
private def _next_value
|
401
471
|
value = nil
|
402
472
|
unless @available_steps.empty?
|
403
473
|
i = @random.rand(0...@available_steps.size)
|
@@ -416,37 +486,27 @@ module Musa
|
|
416
486
|
private_constant :RandomNumbersFromRange
|
417
487
|
|
418
488
|
class FromHashOfSeries
|
419
|
-
include Serie
|
420
|
-
|
421
|
-
attr_reader :sources, :cycle
|
489
|
+
include Musa::Series::Serie.with(sources: true)
|
422
490
|
|
423
491
|
def initialize(hash_of_series, cycle_all_series)
|
424
|
-
|
425
|
-
|
492
|
+
self.sources = hash_of_series
|
493
|
+
self.cycle = cycle_all_series
|
426
494
|
|
427
|
-
|
428
|
-
|
429
|
-
mark_as_prototype!
|
495
|
+
init
|
430
496
|
end
|
431
497
|
|
432
|
-
|
498
|
+
attr_accessor :cycle
|
499
|
+
|
500
|
+
private def _init
|
433
501
|
@have_current = false
|
434
502
|
@value = nil
|
435
|
-
|
436
|
-
if restart_sources
|
437
|
-
@sources.each do |_key, serie|
|
438
|
-
serie.restart
|
439
|
-
end
|
440
|
-
end
|
441
503
|
end
|
442
504
|
|
443
|
-
def
|
444
|
-
@sources.each
|
445
|
-
serie.restart if serie.current_value.nil?
|
446
|
-
end
|
505
|
+
private def _restart
|
506
|
+
@sources.values.each(&:restart)
|
447
507
|
end
|
448
508
|
|
449
|
-
def _next_value
|
509
|
+
private def _next_value
|
450
510
|
unless @have_current && @value.nil?
|
451
511
|
pre_value = @sources.collect { |key, serie| [key, serie.peek_next_value] }.to_h
|
452
512
|
|
@@ -474,42 +534,38 @@ module Musa
|
|
474
534
|
|
475
535
|
@value
|
476
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
|
477
543
|
end
|
478
544
|
|
479
545
|
private_constant :FromHashOfSeries
|
480
546
|
|
481
547
|
class FromArrayOfSeries
|
482
|
-
include Serie
|
483
|
-
|
484
|
-
attr_reader :sources, :cycle
|
548
|
+
include Musa::Series::Serie.with(sources: true)
|
485
549
|
|
486
550
|
def initialize(series_array, cycle_all_series)
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
_restart false
|
551
|
+
self.sources = series_array
|
552
|
+
self.cycle = cycle_all_series
|
491
553
|
|
492
|
-
|
554
|
+
init
|
493
555
|
end
|
494
556
|
|
495
|
-
|
557
|
+
attr_accessor :cycle
|
558
|
+
|
559
|
+
private def _init
|
496
560
|
@have_current = false
|
497
561
|
@value = nil
|
498
|
-
|
499
|
-
if restart_sources
|
500
|
-
@sources.each do |serie|
|
501
|
-
serie.restart if serie.current_value.nil?
|
502
|
-
end
|
503
|
-
end
|
504
562
|
end
|
505
563
|
|
506
|
-
def
|
507
|
-
@sources.each
|
508
|
-
serie.restart if serie.current_value.nil?
|
509
|
-
end
|
564
|
+
private def _restart
|
565
|
+
@sources.each(&:restart)
|
510
566
|
end
|
511
567
|
|
512
|
-
def _next_value
|
568
|
+
private def _next_value
|
513
569
|
unless @have_current && @value.nil?
|
514
570
|
pre_value = @sources.collect(&:peek_next_value)
|
515
571
|
|
@@ -537,14 +593,18 @@ module Musa
|
|
537
593
|
|
538
594
|
@value
|
539
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
|
540
602
|
end
|
541
603
|
|
542
604
|
private_constant :FromArrayOfSeries
|
543
605
|
|
544
606
|
class SinFunction
|
545
|
-
include Serie
|
546
|
-
|
547
|
-
attr_reader :start, :steps, :amplitude, :center
|
607
|
+
include Musa::Series::Serie.base
|
548
608
|
|
549
609
|
def initialize(start, steps, amplitude, center)
|
550
610
|
@start = start.to_f
|
@@ -555,16 +615,44 @@ module Musa
|
|
555
615
|
|
556
616
|
update
|
557
617
|
|
558
|
-
_restart
|
559
|
-
|
560
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
|
561
649
|
end
|
562
650
|
|
563
|
-
def
|
651
|
+
private def _init
|
564
652
|
@position = 0
|
565
653
|
end
|
566
654
|
|
567
|
-
def _next_value
|
655
|
+
private def _next_value
|
568
656
|
value = nil
|
569
657
|
unless @position >= @steps
|
570
658
|
value = Math.sin(@offset + @step_size * @position) * (@amplitude / 2.0) + @center
|
@@ -573,13 +661,7 @@ module Musa
|
|
573
661
|
value
|
574
662
|
end
|
575
663
|
|
576
|
-
def
|
577
|
-
"offset: #{@offset.round(3)}rd amplitude: #{@amplitude.round(3)} center: #{@center.round(3)} length: #{@length} step_size: #{@step_size.round(6)}"
|
578
|
-
end
|
579
|
-
|
580
|
-
private
|
581
|
-
|
582
|
-
def update
|
664
|
+
private def update
|
583
665
|
y = 2 * (@start - @center) / @amplitude
|
584
666
|
warn "WARNING: value for offset calc #{y} is outside asin range" if y < -1 || y > 1
|
585
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
|
@@ -588,25 +670,28 @@ module Musa
|
|
588
670
|
@offset = Math.asin(y)
|
589
671
|
@step_size = 2.0 * Math::PI / @steps
|
590
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
|
591
677
|
end
|
592
678
|
|
593
679
|
private_constant :SinFunction
|
594
680
|
|
595
681
|
class Fibonacci
|
596
|
-
include Serie
|
682
|
+
include Musa::Series::Serie.base
|
597
683
|
|
598
684
|
def initialize
|
599
|
-
_restart
|
600
|
-
|
601
685
|
mark_as_prototype!
|
686
|
+
init
|
602
687
|
end
|
603
688
|
|
604
|
-
def
|
689
|
+
private def _init
|
605
690
|
@a = 0
|
606
691
|
@b = 1
|
607
692
|
end
|
608
693
|
|
609
|
-
def _next_value
|
694
|
+
private def _next_value
|
610
695
|
initial_b = @b
|
611
696
|
@b = @a + @b
|
612
697
|
@a = initial_b
|
@@ -622,20 +707,30 @@ module Musa
|
|
622
707
|
private_constant :Fibonacci
|
623
708
|
|
624
709
|
class HarmonicNotes
|
625
|
-
include Serie
|
626
|
-
|
627
|
-
attr_reader :error, :extended
|
710
|
+
include Musa::Series::Serie.base
|
628
711
|
|
629
712
|
def initialize(error, extended)
|
630
713
|
@error = error
|
631
714
|
@extended = extended
|
632
715
|
|
633
|
-
_restart
|
634
|
-
|
635
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
|
636
731
|
end
|
637
732
|
|
638
|
-
def
|
733
|
+
def _init
|
639
734
|
@harmonic = 0
|
640
735
|
end
|
641
736
|
|