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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d553a28107482bf41290cc93cdfca73a8096fa9525658b8c3f41d26681de062b
4
- data.tar.gz: 7491c04165a88ac74ce1131e7721ee071d9e2bf54b0a3d1ca2b09844d2c5f174
3
+ metadata.gz: 369a811860e0450eeee36e6841fb47f90fdf5f9fbca1b9169cf1899b1998994f
4
+ data.tar.gz: 5ec80d77df612f31fbfe9535d0babf023c4f0155447d378d11ec31f4f115776c
5
5
  SHA512:
6
- metadata.gz: d147175f329eb74f1660c11d643de3ff65abaea2c4d1ed2554322d353b626bade1d073e2c7d6c25d2c9982916253d8318f792d0f3b41f9294505954f642e5f45
7
- data.tar.gz: 4938ef8a3b0115dad3ad7c09ce8410d0049844965f5cfcdb22c58de8f85353541fae483e3f1578b97c149daf168b37efd23b596808e72c1c45996ed05a2cd96a
6
+ metadata.gz: 2b20abc803e8ada74bcfdca8a4ae4a123c4b9ebafd6b584a9f47a210d7ed87b421c4a4130ccf9bee2a67cea85be731b63c5bbe701bcfa73c7c5b0006f1cd7d22
7
+ data.tar.gz: bafb8e3bb49789fd9b7800067e5d01d44ff3bc384e09cac0493e6c6336dc9951f51ad341a4c7d6e9b5154a96b9d9b2e366d51d372e642a8f2d1ac7090ce3f3bb
@@ -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
- send output: @connection, content: message
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
- raw_messages = @input.gets
30
- @input.buffer.clear
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.each do |message|
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
@@ -1,5 +1,5 @@
1
1
  module Musa
2
- VERSION = '0.23.23'
2
+ VERSION = '0.24.0'
3
3
  end
4
4
 
5
5
  require_relative 'musa-dsl/core-ext'
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.23.23'
4
- s.date = '2021-10-27'
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.23.23
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-10-27 00:00:00.000000000 Z
11
+ date: 2021-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: citrus