musa-dsl 0.23.23 → 0.24.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/repl/repl.rb +27 -12
- data/lib/musa-dsl/transport/input-midi-clock.rb +23 -5
- data/lib/musa-dsl.rb +1 -1
- data/musa-dsl.gemspec +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 369a811860e0450eeee36e6841fb47f90fdf5f9fbca1b9169cf1899b1998994f
|
4
|
+
data.tar.gz: 5ec80d77df612f31fbfe9535d0babf023c4f0155447d378d11ec31f4f115776c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b20abc803e8ada74bcfdca8a4ae4a123c4b9ebafd6b584a9f47a210d7ed87b421c4a4130ccf9bee2a67cea85be731b63c5bbe701bcfa73c7c5b0006f1cd7d22
|
7
|
+
data.tar.gz: bafb8e3bb49789fd9b7800067e5d01d44ff3bc384e09cac0493e6c6336dc9951f51ad341a4c7d6e9b5154a96b9d9b2e366d51d372e642a8f2d1ac7090ce3f3bb
|
data/lib/musa-dsl/repl/repl.rb
CHANGED
@@ -6,21 +6,16 @@ module Musa
|
|
6
6
|
class REPL
|
7
7
|
@@repl_mutex = Mutex.new
|
8
8
|
|
9
|
-
def initialize(binder, port: nil, after_eval: nil, logger: nil)
|
9
|
+
def initialize(binder = nil, port: nil, after_eval: nil, logger: nil)
|
10
|
+
|
11
|
+
self.binder = binder
|
12
|
+
|
10
13
|
port ||= 1327
|
11
14
|
|
12
15
|
@logger = logger || Musa::Logger::Logger.new
|
13
16
|
|
14
17
|
@block_source = nil
|
15
18
|
|
16
|
-
if binder.receiver.respond_to?(:sequencer) &&
|
17
|
-
binder.receiver.sequencer.respond_to?(:on_error)
|
18
|
-
|
19
|
-
binder.receiver.sequencer.on_error do |e|
|
20
|
-
send_exception e, output: @connection
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
19
|
@client_threads = []
|
25
20
|
@run = true
|
26
21
|
|
@@ -43,7 +38,7 @@ module Musa
|
|
43
38
|
|
44
39
|
when '#begin'
|
45
40
|
user_path = buffer&.string
|
46
|
-
binder.receiver.instance_variable_set(:@user_pathname, Pathname.new(user_path)) if user_path
|
41
|
+
@binder.receiver.instance_variable_set(:@user_pathname, Pathname.new(user_path)) if user_path
|
47
42
|
|
48
43
|
buffer = StringIO.new
|
49
44
|
|
@@ -53,7 +48,7 @@ module Musa
|
|
53
48
|
|
54
49
|
begin
|
55
50
|
send_echo @block_source, output: @connection
|
56
|
-
binder.eval @block_source, "(repl)", 1
|
51
|
+
@binder.eval @block_source, "(repl)", 1
|
57
52
|
|
58
53
|
rescue StandardError, ScriptError => e
|
59
54
|
@logger.warn('REPL') { 'code execution error' }
|
@@ -89,6 +84,22 @@ module Musa
|
|
89
84
|
end
|
90
85
|
end
|
91
86
|
|
87
|
+
def binder=(binder)
|
88
|
+
raise 'Already binded' if @binder
|
89
|
+
|
90
|
+
@binder = binder
|
91
|
+
|
92
|
+
return unless @binder
|
93
|
+
|
94
|
+
if @binder.receiver.respond_to?(:sequencer) &&
|
95
|
+
@binder.receiver.sequencer.respond_to?(:on_error)
|
96
|
+
|
97
|
+
@binder.receiver.sequencer.on_error do |e|
|
98
|
+
send_exception e, output: @connection
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
92
103
|
def stop
|
93
104
|
@run = false
|
94
105
|
|
@@ -102,7 +113,11 @@ module Musa
|
|
102
113
|
end
|
103
114
|
|
104
115
|
def puts(message)
|
105
|
-
|
116
|
+
if @connection
|
117
|
+
send output: @connection, content: message&.to_s
|
118
|
+
else
|
119
|
+
@logger.warn('REPL') { "trying to print a message in Atom client but the client is not connected. Ignoring message \'#{message} \'." }
|
120
|
+
end
|
106
121
|
end
|
107
122
|
|
108
123
|
private
|
@@ -4,14 +4,15 @@ require 'nibbler'
|
|
4
4
|
module Musa
|
5
5
|
module Clock
|
6
6
|
class InputMidiClock < Clock
|
7
|
-
def initialize(input, logger: nil, do_log: nil)
|
7
|
+
def initialize(input = nil, logger: nil, do_log: nil)
|
8
8
|
do_log ||= false
|
9
9
|
|
10
10
|
super()
|
11
11
|
|
12
|
-
@input = input
|
13
12
|
@logger = logger
|
14
13
|
|
14
|
+
self.input = input
|
15
|
+
|
15
16
|
if logger
|
16
17
|
@logger = logger
|
17
18
|
else
|
@@ -22,17 +23,34 @@ module Musa
|
|
22
23
|
@nibbler = Nibbler.new
|
23
24
|
end
|
24
25
|
|
26
|
+
attr_reader :input
|
27
|
+
|
28
|
+
def input=(input_midi_port)
|
29
|
+
@input = input_midi_port
|
30
|
+
@waiting_for_input&.wakeup
|
31
|
+
end
|
32
|
+
|
25
33
|
def run
|
26
34
|
@run = true
|
27
35
|
|
28
36
|
while @run
|
29
|
-
|
30
|
-
|
37
|
+
if @input
|
38
|
+
raw_messages = @input.gets
|
39
|
+
@input.buffer.clear
|
40
|
+
else
|
41
|
+
@logger.warn('InputMidiClock') { 'Waiting for clock input MIDI port' }
|
42
|
+
|
43
|
+
@waiting_for_input = Thread.current
|
44
|
+
sleep
|
45
|
+
@waiting_for_input = nil
|
46
|
+
|
47
|
+
@logger.info('InputMidiClock') { "Assigned clock input MIDI port '#{@input.name}'" }
|
48
|
+
end
|
31
49
|
|
32
50
|
messages = []
|
33
51
|
stop_index = nil
|
34
52
|
|
35
|
-
raw_messages
|
53
|
+
raw_messages&.each do |message|
|
36
54
|
mm = @nibbler.parse message[:data]
|
37
55
|
|
38
56
|
if mm
|
data/lib/musa-dsl.rb
CHANGED
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.
|
4
|
-
s.date = '2021-
|
3
|
+
s.version = '0.24.0'
|
4
|
+
s.date = '2021-11-09'
|
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']
|
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.
|
4
|
+
version: 0.24.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Javier Sánchez Yeste
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: citrus
|