musalce-server 0.4.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,76 @@
1
+ require 'midi-communications'
2
+
3
+ require 'musa-dsl/midi/midi-voices'
4
+
5
+ module MusaLCEServer
6
+ class MIDIDevices
7
+ include Enumerable
8
+
9
+ def initialize(sequencer)
10
+ @sequencer = sequencer
11
+ @low_level_devices = {}
12
+
13
+ sync
14
+ end
15
+
16
+ def sync
17
+ names = @low_level_devices.keys
18
+
19
+ MIDICommunications::Output.all.each do |low_level_device|
20
+ next if @low_level_devices.key?(low_level_device.name)
21
+
22
+ @low_level_devices[low_level_device.name] = MIDIDevice.new(@sequencer, low_level_device)
23
+ names.delete low_level_device.name
24
+ end
25
+
26
+ # remove disconnected devices
27
+ #
28
+ names.each do |name|
29
+ @low_level_devices.delete name
30
+ end
31
+ end
32
+
33
+ def [](name)
34
+ @low_level_devices[name]
35
+ end
36
+
37
+ def find(name)
38
+ full_name = @low_level_devices.keys.find { |_| _.end_with?(name) }
39
+ @low_level_devices[full_name]
40
+ end
41
+
42
+ def each(&block)
43
+ if block_given?
44
+ @low_level_devices.values.each(&block)
45
+ else
46
+ @low_level_devices.values.each
47
+ end
48
+ end
49
+ end
50
+
51
+ class MIDIDevice
52
+ def initialize(sequencer, low_level_device)
53
+ @low_level_device = low_level_device
54
+ @voices = Musa::MIDIVoices::MIDIVoices.new(sequencer: sequencer, output: low_level_device, channels: 0..15, do_log: true)
55
+ end
56
+
57
+ attr_reader :low_level_device
58
+
59
+ def name
60
+ @low_level_device.name
61
+ end
62
+
63
+ def panic!
64
+ @voices.panic reset: true
65
+ end
66
+
67
+ def channels
68
+ @voices.voices
69
+ end
70
+
71
+ def to_s
72
+ @low_level_device.display_name
73
+ end
74
+ end
75
+ end
76
+
@@ -0,0 +1,57 @@
1
+ require 'musa-dsl'
2
+
3
+ require 'osc-ruby'
4
+ require 'osc-ruby/em_server'
5
+
6
+ require_relative 'live/live'
7
+ require_relative 'bitwig/bitwig'
8
+
9
+ module MusaLCEServer
10
+ VERSION = '0.4.10'.freeze
11
+
12
+ def self.run(daw_name)
13
+ raise ArgumentError, 'A daw must be specified. Options: \'bitwig\' or \'live\'' unless daw_name
14
+ raise ArgumentError, "Incompatible DAW '#{daw_name}'. Options: 'bitwig' or 'live'" unless %w[bitwig live].include?(daw_name)
15
+
16
+ main_thread = Thread.current
17
+
18
+ daw = Daw.daw_controller_for(daw_name.to_sym)
19
+
20
+ daw.sequencer.with(main_thread: main_thread, daw: daw, keep_block_context: false) do |main_thread:, daw:|
21
+ @__main_thread = main_thread
22
+ @__daw = daw
23
+
24
+ alias __puts puts
25
+ alias __require_relative require_relative
26
+
27
+ def puts(...)
28
+ @__repl.puts(...)
29
+ end
30
+
31
+ def require_relative(filename, from_server: false)
32
+ if from_server
33
+ require_relative filename
34
+ else
35
+ # @user_pathname is injected from REPL
36
+ require @user_pathname.dirname + filename
37
+ end
38
+ end
39
+
40
+ def daw
41
+ @__daw
42
+ end
43
+
44
+ def reload
45
+ @__daw.reload
46
+ end
47
+
48
+ def shutdown
49
+ @__main_thread.wakeup
50
+ end
51
+
52
+ @__repl = Musa::REPL::REPL.new(binding, highlight_exception: false)
53
+ end
54
+
55
+ sleep
56
+ end
57
+ end
@@ -0,0 +1,32 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'musalce-server'
3
+ s.version = '0.4.10'
4
+ s.date = '2023-10-28'
5
+ s.summary = 'A Musa DSL live coding environment for Ableton Live 11 and Bitwig Studio 5'
6
+ s.description = 'This package implements the Server part of the Musa DSL Live Coding Environment for Ableton Live and Bitwig Studio'
7
+ s.authors = ['Javier Sánchez Yeste']
8
+ s.email = 'javier.sy@gmail.com'
9
+ s.executables = ['musalce-server']
10
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|samples)/}) }
11
+ s.homepage = 'https://github.com/javier-sy/musalce-server'
12
+ s.license = 'GPL-3.0'
13
+
14
+ s.required_ruby_version = '~> 2.7'
15
+
16
+ # TODO
17
+ #s.metadata = {
18
+ # "source_code_uri" => "https://",
19
+ # "homepage_uri" => "",
20
+ # "documentation_uri" => "",
21
+ # "changelog_uri" => ""
22
+ #}
23
+
24
+ s.add_runtime_dependency 'musa-dsl', '~> 0.26', '>= 0.26.9'
25
+
26
+ s.add_runtime_dependency 'midi-communications', '~> 0.5', '>= 0.5.4'
27
+ s.add_runtime_dependency 'midi-events', '~> 0.5', '>= 0.5.0'
28
+ s.add_runtime_dependency 'midi-parser', '~> 0.3', '>= 0.3.0'
29
+
30
+ s.add_runtime_dependency 'eventmachine', '~> 1.2', '>= 1.2.7'
31
+ s.add_runtime_dependency 'osc-ruby', '~> 1.1', '>= 1.1.4'
32
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: musalce-server
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.10
5
+ platform: ruby
6
+ authors:
7
+ - Javier Sánchez Yeste
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-10-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: musa-dsl
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.26'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.26.9
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.26'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.26.9
33
+ - !ruby/object:Gem::Dependency
34
+ name: midi-communications
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.5'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.5.4
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.5'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.5.4
53
+ - !ruby/object:Gem::Dependency
54
+ name: midi-events
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.5'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.5.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.5'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.5.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: midi-parser
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.3'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.3.0
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.3'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.3.0
93
+ - !ruby/object:Gem::Dependency
94
+ name: eventmachine
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.2'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.2.7
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.2'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 1.2.7
113
+ - !ruby/object:Gem::Dependency
114
+ name: osc-ruby
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '1.1'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 1.1.4
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.1'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 1.1.4
133
+ description: This package implements the Server part of the Musa DSL Live Coding Environment
134
+ for Ableton Live and Bitwig Studio
135
+ email: javier.sy@gmail.com
136
+ executables:
137
+ - musalce-server
138
+ extensions: []
139
+ extra_rdoc_files: []
140
+ files:
141
+ - ".gitignore"
142
+ - Gemfile
143
+ - LICENSE
144
+ - README.md
145
+ - bin/musalce-server
146
+ - lib/bitwig/bitwig.rb
147
+ - lib/bitwig/controllers.rb
148
+ - lib/bitwig/handler.rb
149
+ - lib/bitwig/tracks.rb
150
+ - lib/daw.rb
151
+ - lib/live/handler.rb
152
+ - lib/live/live.rb
153
+ - lib/live/tracks.rb
154
+ - lib/midi-devices.rb
155
+ - lib/musalce-server.rb
156
+ - musalce-server.gemspec
157
+ homepage: https://github.com/javier-sy/musalce-server
158
+ licenses:
159
+ - GPL-3.0
160
+ metadata: {}
161
+ post_install_message:
162
+ rdoc_options: []
163
+ require_paths:
164
+ - lib
165
+ required_ruby_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '2.7'
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ requirements: []
176
+ rubygems_version: 3.1.6
177
+ signing_key:
178
+ specification_version: 4
179
+ summary: A Musa DSL live coding environment for Ableton Live 11 and Bitwig Studio
180
+ 5
181
+ test_files: []