musa-dsl 0.23.23 → 0.24.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|