musa-dsl 0.26.5 → 0.26.8

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.
@@ -15,7 +15,7 @@ grammar Musa::Neumalang::Neumalang::Parser::Grammar::Grammar
15
15
 
16
16
  rule object_expression
17
17
  braced_command |
18
- reference_expression |
18
+ referenced_braced_command |
19
19
  bracketed_expression |
20
20
  use_variable |
21
21
  constant |
@@ -26,8 +26,8 @@ grammar Musa::Neumalang::Neumalang::Parser::Grammar::Grammar
26
26
  vector
27
27
  end
28
28
 
29
- rule reference_expression
30
- (ampersand optional_separation expression) <Musa::Neumalang::Neumalang::Parser::ReferenceExpression>
29
+ rule referenced_braced_command
30
+ (ampersand optional_separation braced_command) <Musa::Neumalang::Neumalang::Parser::ReferencedBracedCommand>
31
31
  end
32
32
 
33
33
  rule variable_assign
@@ -67,7 +67,13 @@ grammar Musa::Neumalang::Neumalang::Parser::Grammar::Grammar
67
67
  end
68
68
 
69
69
  rule parameters
70
- (lpar parameter (comma parameter)* optional_separation rpar) <Musa::Neumalang::Neumalang::Parser::Parameters>
70
+ (lpar parameter? (comma parameter)* optional_separation rpar codeblock?)
71
+ <Musa::Neumalang::Neumalang::Parser::Parameters>
72
+ end
73
+
74
+ rule codeblock
75
+ (ampersand lpar (braced_command | referenced_braced_command | use_variable) rpar)
76
+ <Musa::Neumalang::Neumalang::Parser::Codeblock>
71
77
  end
72
78
 
73
79
  rule parameter
@@ -33,10 +33,10 @@ module Musa
33
33
  end
34
34
  end
35
35
 
36
- module ReferenceExpression
36
+ module ReferencedBracedCommand
37
37
  def value
38
- { kind: :reference,
39
- reference: capture(:expression).value }.extend Musa::Neumas::Neuma
38
+ { kind: :command_reference,
39
+ command: capture(:braced_command).value }.extend Musa::Neumas::Neuma
40
40
  end
41
41
  end
42
42
 
@@ -74,10 +74,21 @@ module Musa
74
74
  {}.tap do |_|
75
75
  _[:value_parameters] = value_parameters unless value_parameters.empty?
76
76
  _[:key_parameters] = key_value_parameters unless key_value_parameters.empty?
77
+
78
+ _[:proc_parameter] = capture(:codeblock).value if capture(:codeblock)
77
79
  end
78
80
  end
79
81
  end
80
82
 
83
+ module Codeblock
84
+ def value
85
+ { codeblock:
86
+ capture(:braced_command)&.value ||
87
+ capture(:referenced_braced_command)&.value ||
88
+ capture(:use_variable)&.value }
89
+ end
90
+ end
91
+
81
92
  module Parameter
82
93
  def value
83
94
  if capture(:key_value_parameter)
@@ -113,11 +113,15 @@ module Musa
113
113
  @client_threads.clear
114
114
  end
115
115
 
116
- def puts(message)
116
+ def puts(*messages)
117
117
  if @connection
118
- send output: @connection, content: message&.to_s
118
+ messages.each do |message|
119
+ send output: @connection, content: message&.to_s
120
+ end
119
121
  else
120
- @logger.warn('REPL') { "trying to print a message in Atom client but the client is not connected. Ignoring message \'#{message} \'." }
122
+ @logger.warn('REPL') do
123
+ "trying to print a message in MusaLCE but the client is not connected. Ignoring message \'#{message} \'."
124
+ end
121
125
  end
122
126
  end
123
127
 
@@ -35,6 +35,7 @@ module Musa
35
35
  class AtModePlayEval < PlayEval
36
36
  def initialize(block_procedure_binder)
37
37
  @block_procedure_binder = block_procedure_binder
38
+ super()
38
39
  end
39
40
 
40
41
  def run_operation(element)
@@ -42,20 +43,22 @@ module Musa
42
43
 
43
44
  if element.is_a? Hash
44
45
  value = {
45
- current_operation: :block,
46
- current_block: @block_procedure_binder,
47
- current_parameter: element,
48
- continue_operation: :at,
49
- continue_parameter: element[:at]
46
+ current_operation: :block,
47
+ current_block: @block_procedure_binder,
48
+ current_parameter: element,
49
+ continue_operation: :at,
50
+ continue_parameter: element[:at]
50
51
  }
51
52
  end
52
53
 
53
54
  value ||= {
54
- current_operation: @block_procedure_binder,
55
- current_parameter: element,
56
- continue_operation: :at,
57
- continue_parameter: position
55
+ current_operation: @block_procedure_binder,
56
+ current_parameter: element,
57
+ continue_operation: :at,
58
+ continue_parameter: position
58
59
  }
60
+
61
+ value
59
62
  end
60
63
  end
61
64
 
@@ -66,6 +69,7 @@ module Musa
66
69
 
67
70
  def initialize(block_procedure_binder)
68
71
  @block_procedure_binder = block_procedure_binder
72
+ super()
69
73
  end
70
74
 
71
75
  def run_operation(element)
@@ -76,30 +80,30 @@ module Musa
76
80
  element = AbsD.to_AbsD(element)
77
81
 
78
82
  value = {
79
- current_operation: :block,
80
- current_block: @block_procedure_binder,
81
- current_parameter: element,
82
- continue_operation: :wait,
83
- continue_parameter: element.forward_duration
83
+ current_operation: :block,
84
+ current_block: @block_procedure_binder,
85
+ current_parameter: element,
86
+ continue_operation: :wait,
87
+ continue_parameter: element.forward_duration
84
88
  }
85
89
  end
86
90
 
87
91
  if element.key? :wait_event
88
92
  value = {
89
- current_operation: :block,
90
- current_block: @block_procedure_binder,
91
- current_parameter: element,
92
- continue_operation: :on,
93
- continue_parameter: element[:wait_event]
93
+ current_operation: :block,
94
+ current_block: @block_procedure_binder,
95
+ current_parameter: element,
96
+ continue_operation: :on,
97
+ continue_parameter: element[:wait_event]
94
98
  }
95
99
  end
96
100
  end
97
101
 
98
102
  value ||= {
99
- current_operation: :block,
100
- current_block: @block_procedure_binder,
101
- current_parameter: element,
102
- continue_operation: :now
103
+ current_operation: :block,
104
+ current_block: @block_procedure_binder,
105
+ current_parameter: element,
106
+ continue_operation: :now
103
107
  }
104
108
 
105
109
  value
@@ -115,8 +119,8 @@ module Musa
115
119
 
116
120
  @@id = 0
117
121
 
118
- attr_reader :neumalang_context
119
- attr_reader :block_procedure_binder
122
+ attr_reader :neumalang_context,
123
+ :block_procedure_binder
120
124
 
121
125
  def initialize(block_procedure_binder, decoder, nl_context, parent: nil)
122
126
  @id = @@id += 1
@@ -127,6 +131,8 @@ module Musa
127
131
  @nl_context = nl_context
128
132
 
129
133
  @nl_context ||= Object.new
134
+
135
+ super()
130
136
  end
131
137
 
132
138
  def subcontext
@@ -138,17 +144,17 @@ module Musa
138
144
  AbsD.to_AbsD(element)
139
145
  else
140
146
  case element[:kind]
141
- when :serie then eval_serie element[:serie]
142
- when :parallel then eval_parallel element[:parallel]
143
- when :assign_to then eval_assign_to element[:assign_to], element[:assign_value]
144
- when :use_variable then eval_use_variable element[:use_variable]
145
- when :command then eval_command element[:command], element[:value_parameters], element[:key_parameters]
146
- when :value then eval_value element[:value]
147
- when :gdvd then eval_gdvd element[:gdvd]
148
- when :p then eval_p element[:p]
149
- when :call_methods then eval_call_methods element[:on], element[:call_methods]
150
- when :reference then eval_reference element[:reference]
151
- when :event then element
147
+ when :serie then eval_serie element[:serie]
148
+ when :parallel then eval_parallel element[:parallel]
149
+ when :assign_to then eval_assign_to element[:assign_to], element[:assign_value]
150
+ when :use_variable then eval_use_variable element[:use_variable]
151
+ when :command then eval_command element[:command], element[:value_parameters], element[:key_parameters]
152
+ when :value then eval_value element[:value]
153
+ when :gdvd then eval_gdvd element[:gdvd]
154
+ when :p then eval_p element[:p]
155
+ when :call_methods then eval_call_methods element[:on], element[:call_methods]
156
+ when :command_reference then eval_command_reference element[:command]
157
+ when :event then element
152
158
  else
153
159
  raise ArgumentError, "eval_element: don't know how to process #{element}"
154
160
  end
@@ -197,10 +203,10 @@ module Musa
197
203
 
198
204
  def eval_command(block, value_parameters, key_parameters)
199
205
  _value_parameters = value_parameters ? value_parameters.collect { |e| subcontext.eval_element(e) } : []
200
- _key_parameters = key_parameters ? key_parameters.collect { |k, e| [k, subcontext.eval_element(e)] }.to_h : {}
206
+ _key_parameters = key_parameters ? key_parameters.transform_values { |e| subcontext.eval_element(e) } : {}
201
207
 
202
- # used instance_exec because the code on block comes from a neumalang source, so the correct execution context is the neumalang context
203
- # (no other context has any sense)
208
+ # used instance_exec because the code on block comes from a neumalang source, so the correct
209
+ # execution context is the neumalang context (no other context has any sense)
204
210
  #
205
211
  @nl_context.instance_exec *_value_parameters, **_key_parameters, &block
206
212
  end
@@ -211,38 +217,43 @@ module Musa
211
217
  value = play_eval.eval_element on
212
218
 
213
219
  if value.is_a? Parallel
214
- value.collect do |_value|
215
- call_methods.each do |methd|
216
- value_parameters = methd[:value_parameters] ? methd[:value_parameters].collect { |e| play_eval.subcontext.eval_element(e) } : []
217
- key_parameters = methd[:key_parameters] ? methd[:key_parameters].collect { |k, e| [k, play_eval.subcontext.eval_element(e)] }.to_h : {}
218
-
219
- _value = _value.send methd[:method], *value_parameters, **key_parameters
220
- end
221
-
222
- _value
223
- end.extend Parallel
220
+ value.collect { |_value| eval_methods(play_eval, _value, call_methods) }.extend Parallel
224
221
  else
225
- call_methods.each do |methd|
226
- value_parameters = methd[:value_parameters] ? methd[:value_parameters].collect { |e| play_eval.subcontext.eval_element(e) } : []
227
- key_parameters = methd[:key_parameters] ? methd[:key_parameters].collect { |k, e| [k, play_eval.subcontext.eval_element(e)] }.to_h : {}
222
+ eval_methods(play_eval, value, call_methods)
223
+ end
224
+ end
228
225
 
229
- value = value.send methd[:method], *value_parameters, **key_parameters
230
- end
226
+ def eval_methods(play_eval, value, methods)
227
+ methods.each do |methd|
228
+ value_parameters = methd[:value_parameters]&.collect { |e| play_eval.subcontext.eval_element(e) } || []
229
+ key_parameters = methd[:key_parameters]&.transform_values { |e| play_eval.subcontext.eval_element(e) } || {}
230
+ proc_parameter = eval_proc_parameter(methd[:proc_parameter][:codeblock]) if methd[:proc_parameter]
231
231
 
232
- value
232
+ value = value.send methd[:method], *value_parameters, **key_parameters, &proc_parameter
233
233
  end
234
+
235
+ value
236
+ end
237
+
238
+ def eval_command_reference(element)
239
+ element[:command]
234
240
  end
235
241
 
236
- def eval_reference(element)
237
- if element.is_a?(Hash) && element.key?(:kind)
242
+ def eval_proc_parameter(element)
243
+ case element
244
+ when Proc
245
+ element
246
+ when nil
247
+ nil
248
+ else
238
249
  case element[:kind]
250
+ when :use_variable
251
+ eval_proc_parameter(eval_use_variable(element[:use_variable]))
252
+ when :command_reference
253
+ eval_proc_parameter(element[:command])
239
254
  when :command
240
255
  element[:command]
241
- else
242
- raise ArgumentError, "eval_reference(&): don't know how to process element #{element}"
243
256
  end
244
- else
245
- raise ArgumentError, "eval_reference(&): don't know how to process element #{element}"
246
257
  end
247
258
  end
248
259
 
@@ -264,7 +275,7 @@ module Musa
264
275
 
265
276
  when Parallel
266
277
  { current_operation: :parallel_play,
267
- current_parameter: element.instance.tap { |e| e.each(&:restart) } }
278
+ current_parameter: element.tap { |e| e.each(&:restart) } }
268
279
 
269
280
  when Array
270
281
  { current_operation: :no_eval_play,
@@ -322,18 +333,15 @@ module Musa
322
333
  run_operation eval_use_variable(element[:use_variable])
323
334
 
324
335
  when :event
325
- value_parameters = element[:value_parameters] ?
326
- element[:value_parameters].collect { |e| subcontext.eval_element(e) } :
327
- []
328
-
329
- key_parameters = element[:key_parameters] ?
330
- element[:key_parameters].collect { |k, e| [k, subcontext.eval_element(e)] }.to_h :
331
- {}
336
+ value_parameters = element[:value_parameters]&.collect { |e| subcontext.eval_element(e) } || []
337
+ key_parameters = element[:key_parameters]&.transform_values { |e| subcontext.eval_element(e) } || {}
338
+ proc_parameter = eval_proc_parameter(element[:proc_parameter][:codeblock]) if element[:proc_parameter]
332
339
 
333
340
  { current_operation: :event,
334
341
  current_event: element[:event],
335
342
  current_value_parameters: value_parameters,
336
343
  current_key_parameters: key_parameters,
344
+ current_proc_parameter: proc_parameter,
337
345
  continue_operation: :now }
338
346
 
339
347
  when :command
@@ -343,7 +351,7 @@ module Musa
343
351
  run_operation eval_call_methods(element[:on], element[:call_methods])
344
352
 
345
353
  when :reference
346
- run_operation eval_reference(element[:reference])
354
+ run_operation eval_command_reference(element[:reference])
347
355
 
348
356
  else
349
357
  raise ArgumentError, "run_operation: don't know how to process #{element}"
@@ -44,13 +44,20 @@ module Musa::Sequencer
44
44
 
45
45
  case operation[:current_operation]
46
46
  when :none
47
+ # do nothing
47
48
  when :block
48
- __play_eval.block_procedure_binder.call operation[:current_parameter], control: control
49
+ # duplicating parameters as direct object value (operation[:current_parameter])
50
+ # and key_passed parameters (**operation[:current_parameter])
51
+ #
52
+ __play_eval.block_procedure_binder.call operation[:current_parameter],
53
+ **operation[:current_parameter],
54
+ control: control
49
55
 
50
56
  when :event
51
57
  control._launch operation[:current_event],
52
58
  operation[:current_value_parameters],
53
- operation[:current_key_parameters]
59
+ operation[:current_key_parameters],
60
+ operation[:current_proc_parameter]
54
61
 
55
62
  when :play
56
63
  control2 = PlayControl.new control
@@ -97,7 +104,7 @@ module Musa::Sequencer
97
104
 
98
105
  control2.on :sync do
99
106
  counter -= 1
100
- _play serie, control, __play_eval: __play_eval, **mode_args if counter == 0
107
+ _play serie, control, __play_eval: __play_eval, **mode_args if counter.zero?
101
108
  end
102
109
  end
103
110
 
@@ -151,18 +158,18 @@ module Musa::Sequencer
151
158
  def store_continuation(sequencer:, serie:, neumalang_context:, mode:, decoder:, play_eval:, mode_args:)
152
159
  @continuation_sequencer = sequencer
153
160
  @continuation_parameters = {
154
- serie: serie,
155
- control: self,
156
- neumalang_context: neumalang_context,
157
- mode: mode,
158
- decoder: decoder,
159
- play_eval: play_eval,
160
- mode_args: mode_args }
161
+ serie: serie,
162
+ control: self,
163
+ neumalang_context: neumalang_context,
164
+ mode: mode,
165
+ decoder: decoder,
166
+ play_eval: play_eval,
167
+ mode_args: mode_args }
161
168
  end
162
169
 
163
170
  def continue
164
171
  super
165
- @continuation_sequencer.continuation_play(@continuation_parameters) if @continuation_sequencer
172
+ @continuation_sequencer&.continuation_play(@continuation_parameters)
166
173
  end
167
174
 
168
175
  def after(bars = nil, &block)
@@ -18,13 +18,13 @@ module Musa::Sequencer
18
18
  @event_handlers.push command[:parent_control]
19
19
 
20
20
  @tick_mutex.synchronize do
21
- command[:block].call *command[:value_parameters], **command[:key_parameters] if command[:block]
21
+ command[:block]&.call *command[:value_parameters], **command[:key_parameters]
22
22
  end
23
23
 
24
24
  @event_handlers.pop
25
25
  else
26
26
  @tick_mutex.synchronize do
27
- command[:block].call *command[:value_parameters], **command[:key_parameters] if command[:block]
27
+ command[:block]&.call *command[:value_parameters], **command[:key_parameters]
28
28
  end
29
29
  end
30
30
  end
@@ -72,7 +72,7 @@ module Musa::Sequencer
72
72
  key_parameters[:control] = control if block_key_parameters_binder.key?(:control)
73
73
 
74
74
  if at_position == @position
75
- @on_debug_at.each { |c| c.call } if @logger.sev_threshold >= ::Logger::Severity::DEBUG
75
+ @on_debug_at.each(&:call) if @logger.sev_threshold >= ::Logger::Severity::DEBUG
76
76
 
77
77
  begin
78
78
  locked = @tick_mutex.try_lock
@@ -169,24 +169,24 @@ module Musa::Sequencer
169
169
  @handlers[event][name] = { block: Musa::Extension::SmartProcBinder::SmartProcBinder.new(block), only_once: only_once }
170
170
  end
171
171
 
172
- def launch(event, *value_parameters, **key_parameters)
173
- _launch event, value_parameters, key_parameters
172
+ def launch(event, *value_parameters, **key_parameters, &proc_parameter)
173
+ _launch event, value_parameters, key_parameters, proc_parameter
174
174
  end
175
175
 
176
- def _launch(event, value_parameters = nil, key_parameters = nil)
176
+ def _launch(event, value_parameters = nil, key_parameters = nil, proc_parameter = nil)
177
177
  value_parameters ||= []
178
178
  key_parameters ||= {}
179
179
  processed = false
180
180
 
181
181
  if @handlers.key? event
182
182
  @handlers[event].each do |name, handler|
183
- handler[:block].call *value_parameters, **key_parameters
183
+ handler[:block].call *value_parameters, **key_parameters, &proc_parameter
184
184
  @handlers[event].delete name if handler[:only_once]
185
185
  processed = true
186
186
  end
187
187
  end
188
188
 
189
- @parent._launch event, value_parameters, key_parameters if @parent && !processed
189
+ @parent._launch event, value_parameters, key_parameters, proc_parameter if @parent && !processed
190
190
  end
191
191
 
192
192
  def inspect
@@ -2,8 +2,6 @@ require 'forwardable'
2
2
 
3
3
  require_relative '../core-ext/with'
4
4
 
5
- module TEMP; end
6
-
7
5
  module Musa
8
6
  module Sequencer
9
7
  class Sequencer
@@ -41,7 +39,7 @@ module Musa
41
39
  do_error_log: do_error_log,
42
40
  log_position_format: log_position_format
43
41
 
44
- # dsl_context_class ||= DSLContext
42
+ dsl_context_class ||= DSLContext
45
43
 
46
44
  @dsl = dsl_context_class.new @sequencer, keep_block_context: keep_block_context
47
45
 
@@ -148,7 +148,12 @@ module Musa
148
148
  self.source = serie
149
149
  self.with_sources = with_series || []
150
150
  self.on_restart = on_restart
151
- self.proc = block if block
151
+
152
+ if block
153
+ self.proc = block
154
+ elsif !with_series
155
+ proc { |_| _ }
156
+ end
152
157
 
153
158
  @isolate_values = isolate_values
154
159
 
@@ -278,7 +283,8 @@ module Musa
278
283
  init
279
284
  end
280
285
 
281
- private def _restart
286
+ private :_restart
287
+ def _restart
282
288
  @source.restart
283
289
  if @sources.is_a? Array
284
290
  @sources.each(&:restart)
@@ -287,7 +293,8 @@ module Musa
287
293
  end
288
294
  end
289
295
 
290
- private def _next_value
296
+ private :_next_value
297
+ def _next_value
291
298
  value = nil
292
299
 
293
300
  index_or_key = @source.next_value
@@ -21,10 +21,12 @@ module Musa
21
21
  @logger.debug! if do_log
22
22
  end
23
23
 
24
+ @time_table = []
24
25
  @midi_parser = MIDIParser.new
25
26
  end
26
27
 
27
28
  attr_reader :input
29
+ attr_reader :time_table
28
30
 
29
31
  def input=(input_midi_port)
30
32
  @input = input_midi_port
@@ -121,6 +123,7 @@ module Musa
121
123
  case m.name
122
124
  when 'Start'
123
125
  process_start
126
+ @time_table.clear
124
127
 
125
128
  when 'Stop'
126
129
  @logger.debug('InputMidiClock') { 'processing Stop...' }
@@ -135,7 +138,15 @@ module Musa
135
138
  @logger.debug('InputMidiClock') { 'processing Continue... done' }
136
139
 
137
140
  when 'Clock'
138
- yield if block_given? && @started
141
+ if block_given? && @started
142
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
143
+ yield
144
+ finish_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
145
+
146
+ duration = finish_time - start_time
147
+ @time_table[duration] ||= 0
148
+ @time_table[duration] += 1
149
+ end
139
150
 
140
151
  when 'Song Position Pointer'
141
152
  new_position_in_midi_beats = m.data[0] & 0x7F | ((m.data[1] & 0x7F) << 7)
data/lib/musa-dsl.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Musa
2
- VERSION = '0.26.5'.freeze
2
+ VERSION = '0.26.8'.freeze
3
3
  end
4
4
 
5
5
  require_relative 'musa-dsl/core-ext'
@@ -54,7 +54,7 @@ module Musa::All
54
54
 
55
55
  include Musa::Darwin
56
56
  include Musa::Markov
57
- include Musa::Backboner
57
+ include Musa::Rules
58
58
  include Musa::Variatio
59
59
 
60
60
  include Musa::MIDIRecorder
data/musa-dsl.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'musa-dsl'
3
- s.version = '0.26.5'
4
- s.date = '2022-02-25'
3
+ s.version = '0.26.8'
4
+ s.date = '2023-05-30'
5
5
  s.summary = 'A simple Ruby DSL for making complex music'
6
6
  s.description = 'Musa-DSL: A Ruby framework and DSL for algorithmic sound and musical thinking and composition'
7
7
  s.authors = ['Javier Sánchez Yeste']
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.required_ruby_version = '~> 2.7'
14
14
 
15
- # TODO
15
+ # TODO para sistema de paquetes de MusaDSL
16
16
  #s.metadata = {
17
17
  # "source_code_uri" => "https://",
18
18
  # "homepage_uri" => "",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: musa-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.5
4
+ version: 0.26.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Sánchez Yeste
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-25 00:00:00.000000000 Z
11
+ date: 2023-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -161,10 +161,10 @@ files:
161
161
  - lib/musa-dsl/datasets/score/to-mxml/to-mxml.rb
162
162
  - lib/musa-dsl/datasets/v.rb
163
163
  - lib/musa-dsl/generative.rb
164
- - lib/musa-dsl/generative/backboner.rb
165
164
  - lib/musa-dsl/generative/darwin.rb
166
165
  - lib/musa-dsl/generative/generative-grammar.rb
167
166
  - lib/musa-dsl/generative/markov.rb
167
+ - lib/musa-dsl/generative/rules.rb
168
168
  - lib/musa-dsl/generative/variatio.rb
169
169
  - lib/musa-dsl/logger.rb
170
170
  - lib/musa-dsl/logger/logger.rb
@@ -255,7 +255,7 @@ homepage: https://github.com/javier-sy/musa-dsl
255
255
  licenses:
256
256
  - LGPL-3.0
257
257
  metadata: {}
258
- post_install_message:
258
+ post_install_message:
259
259
  rdoc_options: []
260
260
  require_paths:
261
261
  - lib
@@ -271,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
271
  version: '0'
272
272
  requirements: []
273
273
  rubygems_version: 3.1.6
274
- signing_key:
274
+ signing_key:
275
275
  specification_version: 4
276
276
  summary: A simple Ruby DSL for making complex music
277
277
  test_files: []