musa-dsl 0.22.3 → 0.23.1
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 +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
|
|