musa-dsl 0.26.9 → 0.30.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/lib/musa-dsl/core-ext/deep-copy.rb +2 -2
- data/lib/musa-dsl/sequencer/base-sequencer-tick-based.rb +1 -1
- data/lib/musa-dsl/sequencer/base-sequencer.rb +4 -0
- data/lib/musa-dsl/sequencer/sequencer-dsl.rb +3 -0
- data/lib/musa-dsl/transport/transport.rb +5 -1
- data/lib/musa-dsl.rb +1 -1
- data/musa-dsl.gemspec +12 -8
- metadata +53 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72e082f4a941047bc45568d63c36388997e6930d2447023d61e6c07d48e5b50b
|
4
|
+
data.tar.gz: 313cb32122fd0b95bfdd9b91f5dfd26832a75c48ed39508156c07c11feb13f83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14fd5760399d092187a432dc97d7ecb99106372d70f9d0219715b328b8f508c5b679508502c26b65ea2fe9d8b5b4de42a257405dde6d75e81289a75fd8894b7a
|
7
|
+
data.tar.gz: 6cd0b86af1c4810b84c162206db7a868ddac45751fdf9714889fea7c8cec43569df78657490669d48e326dadca48244f4b6e05de48ddce8ac5bac94a61dd1a9c
|
@@ -7,7 +7,7 @@ module Musa
|
|
7
7
|
module DeepCopy
|
8
8
|
extend self
|
9
9
|
|
10
|
-
def deep_copy(object, method: :dup, freeze:
|
10
|
+
def deep_copy(object, method: :dup, freeze: nil)
|
11
11
|
raise ArgumentError, "deep_copy method can only be :dup or :clone" unless method == :dup || method == :clone
|
12
12
|
register = {}
|
13
13
|
|
@@ -182,7 +182,7 @@ module Musa
|
|
182
182
|
end
|
183
183
|
end
|
184
184
|
|
185
|
-
def clone(freeze:
|
185
|
+
def clone(freeze: nil, deep: false)
|
186
186
|
if deep
|
187
187
|
Musa::Extension::DeepCopy::DeepCopy.deep_copy(self, method: :clone, freeze: freeze)
|
188
188
|
else
|
@@ -37,7 +37,7 @@ module Musa
|
|
37
37
|
end
|
38
38
|
|
39
39
|
private def _reset_timing
|
40
|
-
@position = @position_mutex.synchronize { 1r - @tick_duration }
|
40
|
+
@position = @position_mutex.synchronize { 1r + @offset - @tick_duration }
|
41
41
|
end
|
42
42
|
|
43
43
|
private def _quantize_position(position, warn: true)
|
@@ -13,11 +13,13 @@ module Musa
|
|
13
13
|
module Sequencer
|
14
14
|
class BaseSequencer
|
15
15
|
attr_reader :beats_per_bar, :ticks_per_beat
|
16
|
+
attr_reader :offset
|
16
17
|
attr_reader :running_position
|
17
18
|
attr_reader :everying, :playing, :moving
|
18
19
|
attr_reader :logger
|
19
20
|
|
20
21
|
def initialize(beats_per_bar = nil, ticks_per_beat = nil,
|
22
|
+
offset: nil,
|
21
23
|
logger: nil,
|
22
24
|
do_log: nil, do_error_log: nil, log_position_format: nil)
|
23
25
|
|
@@ -35,6 +37,8 @@ module Musa
|
|
35
37
|
@logger.debug! if do_log
|
36
38
|
end
|
37
39
|
|
40
|
+
@offset = offset || 0r
|
41
|
+
|
38
42
|
if beats_per_bar && ticks_per_beat
|
39
43
|
@beats_per_bar = Rational(beats_per_bar)
|
40
44
|
@ticks_per_beat = Rational(ticks_per_beat)
|
@@ -9,6 +9,7 @@ module Musa
|
|
9
9
|
|
10
10
|
def_delegators :@sequencer,
|
11
11
|
:beats_per_bar, :ticks_per_beat, :ticks_per_bar, :tick_duration,
|
12
|
+
:offset,
|
12
13
|
:size, :empty?,
|
13
14
|
:on_debug_at, :on_error, :on_fast_forward, :before_tick,
|
14
15
|
:raw_at,
|
@@ -25,6 +26,7 @@ module Musa
|
|
25
26
|
|
26
27
|
def initialize(beats_per_bar = nil,
|
27
28
|
ticks_per_beat = nil,
|
29
|
+
offset: nil,
|
28
30
|
sequencer: nil,
|
29
31
|
logger: nil,
|
30
32
|
do_log: nil, do_error_log: nil, log_position_format: nil,
|
@@ -34,6 +36,7 @@ module Musa
|
|
34
36
|
|
35
37
|
@sequencer = sequencer
|
36
38
|
@sequencer ||= BaseSequencer.new beats_per_bar, ticks_per_beat,
|
39
|
+
offset: offset,
|
37
40
|
logger: logger,
|
38
41
|
do_log: do_log,
|
39
42
|
do_error_log: do_error_log,
|
@@ -12,6 +12,7 @@ module Musa
|
|
12
12
|
def initialize(clock,
|
13
13
|
beats_per_bar = nil,
|
14
14
|
ticks_per_beat = nil,
|
15
|
+
offset: nil,
|
15
16
|
sequencer: nil,
|
16
17
|
before_begin: nil,
|
17
18
|
on_start: nil,
|
@@ -22,6 +23,8 @@ module Musa
|
|
22
23
|
|
23
24
|
beats_per_bar ||= 4
|
24
25
|
ticks_per_beat ||= 24
|
26
|
+
offset ||= 0r
|
27
|
+
|
25
28
|
do_log ||= false
|
26
29
|
|
27
30
|
@clock = clock
|
@@ -41,7 +44,7 @@ module Musa
|
|
41
44
|
@do_log = do_log
|
42
45
|
|
43
46
|
@sequencer = sequencer
|
44
|
-
@sequencer ||= Musa::Sequencer::Sequencer.new beats_per_bar, ticks_per_beat, logger: logger, do_log: @do_log
|
47
|
+
@sequencer ||= Musa::Sequencer::Sequencer.new beats_per_bar, ticks_per_beat, offset: offset, logger: logger, do_log: @do_log
|
45
48
|
|
46
49
|
@clock.on_start do
|
47
50
|
do_on_start
|
@@ -91,6 +94,7 @@ module Musa
|
|
91
94
|
position += Rational(midi_beats, 4 * @sequencer.beats_per_bar) if midi_beats
|
92
95
|
position += Rational(beats, @sequencer.beats_per_bar) if beats
|
93
96
|
|
97
|
+
position += @sequencer.offset
|
94
98
|
position -= @sequencer.tick_duration
|
95
99
|
|
96
100
|
raise ArgumentError, "undefined new position" unless position
|
data/lib/musa-dsl.rb
CHANGED
data/musa-dsl.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'musa-dsl'
|
3
|
-
s.version = '0.
|
4
|
-
s.date = '
|
3
|
+
s.version = '0.30.0'
|
4
|
+
s.date = '2025-08-23'
|
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']
|
8
8
|
s.email = 'javier.sy@gmail.com'
|
9
9
|
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|samples|\.github)/}) }
|
10
10
|
s.homepage = 'https://github.com/javier-sy/musa-dsl'
|
11
|
-
s.license = 'LGPL-3.0'
|
11
|
+
s.license = 'LGPL-3.0-or-later'
|
12
12
|
|
13
|
-
s.required_ruby_version = '~>
|
13
|
+
s.required_ruby_version = '~> 3.4'
|
14
14
|
|
15
15
|
# TODO para sistema de paquetes de MusaDSL
|
16
16
|
#s.metadata = {
|
@@ -20,13 +20,17 @@ Gem::Specification.new do |s|
|
|
20
20
|
# "changelog_uri" => ""
|
21
21
|
#}
|
22
22
|
|
23
|
+
s.add_runtime_dependency 'prime', '~> 0.1'
|
24
|
+
s.add_runtime_dependency 'matrix', '~> 0.4'
|
25
|
+
s.add_runtime_dependency 'sorted_set', '~> 1.0'
|
26
|
+
|
23
27
|
s.add_runtime_dependency 'logger', '~> 1.4', '>= 1.4.3'
|
24
28
|
|
25
|
-
s.add_runtime_dependency 'citrus', '~> 3.0'
|
29
|
+
s.add_runtime_dependency 'citrus', '~> 3.0'
|
26
30
|
|
27
|
-
s.add_runtime_dependency 'midi-events', '~> 0.
|
28
|
-
s.add_runtime_dependency 'midi-parser', '~> 0.
|
31
|
+
s.add_runtime_dependency 'midi-events', '~> 0.6'
|
32
|
+
s.add_runtime_dependency 'midi-parser', '~> 0.4'
|
29
33
|
|
30
34
|
s.add_development_dependency 'descriptive-statistics', '~> 2.2'
|
31
|
-
s.add_development_dependency 'rspec', '~> 3
|
35
|
+
s.add_development_dependency 'rspec', '~> 3'
|
32
36
|
end
|
metadata
CHANGED
@@ -1,15 +1,56 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: musa-dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Javier Sánchez Yeste
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-08-23 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: prime
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0.1'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - "~>"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0.1'
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: matrix
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0.4'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.4'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: sorted_set
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.0'
|
13
54
|
- !ruby/object:Gem::Dependency
|
14
55
|
name: logger
|
15
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -37,9 +78,6 @@ dependencies:
|
|
37
78
|
- - "~>"
|
38
79
|
- !ruby/object:Gem::Version
|
39
80
|
version: '3.0'
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 3.0.0
|
43
81
|
type: :runtime
|
44
82
|
prerelease: false
|
45
83
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -47,49 +85,34 @@ dependencies:
|
|
47
85
|
- - "~>"
|
48
86
|
- !ruby/object:Gem::Version
|
49
87
|
version: '3.0'
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 3.0.0
|
53
88
|
- !ruby/object:Gem::Dependency
|
54
89
|
name: midi-events
|
55
90
|
requirement: !ruby/object:Gem::Requirement
|
56
91
|
requirements:
|
57
92
|
- - "~>"
|
58
93
|
- !ruby/object:Gem::Version
|
59
|
-
version: '0.
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 0.5.0
|
94
|
+
version: '0.6'
|
63
95
|
type: :runtime
|
64
96
|
prerelease: false
|
65
97
|
version_requirements: !ruby/object:Gem::Requirement
|
66
98
|
requirements:
|
67
99
|
- - "~>"
|
68
100
|
- !ruby/object:Gem::Version
|
69
|
-
version: '0.
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 0.5.0
|
101
|
+
version: '0.6'
|
73
102
|
- !ruby/object:Gem::Dependency
|
74
103
|
name: midi-parser
|
75
104
|
requirement: !ruby/object:Gem::Requirement
|
76
105
|
requirements:
|
77
106
|
- - "~>"
|
78
107
|
- !ruby/object:Gem::Version
|
79
|
-
version: '0.
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.3.0
|
108
|
+
version: '0.4'
|
83
109
|
type: :runtime
|
84
110
|
prerelease: false
|
85
111
|
version_requirements: !ruby/object:Gem::Requirement
|
86
112
|
requirements:
|
87
113
|
- - "~>"
|
88
114
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0.
|
90
|
-
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: 0.3.0
|
115
|
+
version: '0.4'
|
93
116
|
- !ruby/object:Gem::Dependency
|
94
117
|
name: descriptive-statistics
|
95
118
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,14 +133,14 @@ dependencies:
|
|
110
133
|
requirements:
|
111
134
|
- - "~>"
|
112
135
|
- !ruby/object:Gem::Version
|
113
|
-
version: '3
|
136
|
+
version: '3'
|
114
137
|
type: :development
|
115
138
|
prerelease: false
|
116
139
|
version_requirements: !ruby/object:Gem::Requirement
|
117
140
|
requirements:
|
118
141
|
- - "~>"
|
119
142
|
- !ruby/object:Gem::Version
|
120
|
-
version: '3
|
143
|
+
version: '3'
|
121
144
|
description: 'Musa-DSL: A Ruby framework and DSL for algorithmic sound and musical
|
122
145
|
thinking and composition'
|
123
146
|
email: javier.sy@gmail.com
|
@@ -252,9 +275,8 @@ files:
|
|
252
275
|
- musa-dsl.gemspec
|
253
276
|
homepage: https://github.com/javier-sy/musa-dsl
|
254
277
|
licenses:
|
255
|
-
- LGPL-3.0
|
278
|
+
- LGPL-3.0-or-later
|
256
279
|
metadata: {}
|
257
|
-
post_install_message:
|
258
280
|
rdoc_options: []
|
259
281
|
require_paths:
|
260
282
|
- lib
|
@@ -262,15 +284,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
284
|
requirements:
|
263
285
|
- - "~>"
|
264
286
|
- !ruby/object:Gem::Version
|
265
|
-
version: '
|
287
|
+
version: '3.4'
|
266
288
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
289
|
requirements:
|
268
290
|
- - ">="
|
269
291
|
- !ruby/object:Gem::Version
|
270
292
|
version: '0'
|
271
293
|
requirements: []
|
272
|
-
rubygems_version: 3.
|
273
|
-
signing_key:
|
294
|
+
rubygems_version: 3.6.9
|
274
295
|
specification_version: 4
|
275
296
|
summary: A simple Ruby DSL for making complex music
|
276
297
|
test_files: []
|