musalce-server 0.4.10
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 +7 -0
- data/.gitignore +10 -0
- data/Gemfile +3 -0
- data/LICENSE +674 -0
- data/README.md +22 -0
- data/bin/musalce-server +5 -0
- data/lib/bitwig/bitwig.rb +57 -0
- data/lib/bitwig/controllers.rb +129 -0
- data/lib/bitwig/handler.rb +82 -0
- data/lib/bitwig/tracks.rb +58 -0
- data/lib/daw.rb +114 -0
- data/lib/live/handler.rb +55 -0
- data/lib/live/live.rb +40 -0
- data/lib/live/tracks.rb +142 -0
- data/lib/midi-devices.rb +76 -0
- data/lib/musalce-server.rb +57 -0
- data/musalce-server.gemspec +32 -0
- metadata +181 -0
data/lib/midi-devices.rb
ADDED
@@ -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: []
|