voicemeeter_api_ruby 4.4.0 → 4.4.1
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/README.md +3 -3
- data/lib/voicemeeter/base.rb +211 -255
- data/lib/voicemeeter/button.rb +25 -25
- data/lib/voicemeeter/command.rb +38 -38
- data/lib/voicemeeter/configs.rb +83 -83
- data/lib/voicemeeter/errors.rb +43 -43
- data/lib/voicemeeter/inst.rb +27 -27
- data/lib/voicemeeter/iremote.rb +34 -34
- data/lib/voicemeeter/kinds.rb +79 -79
- data/lib/voicemeeter/meta.rb +251 -251
- data/lib/voicemeeter/recorder.rb +20 -20
- data/lib/voicemeeter/remote.rb +77 -0
- data/lib/voicemeeter/runvm.rb +31 -31
- data/lib/voicemeeter/vban.rb +80 -80
- data/lib/voicemeeter/version.rb +25 -25
- data/lib/voicemeeter/worker.rb +43 -0
- data/lib/voicemeeter.rb +9 -86
- metadata +4 -2
data/lib/voicemeeter/meta.rb
CHANGED
@@ -1,251 +1,251 @@
|
|
1
|
-
require_relative "errors"
|
2
|
-
|
3
|
-
module Voicemeeter
|
4
|
-
module Conversions
|
5
|
-
module_function
|
6
|
-
|
7
|
-
def Boolean(value)
|
8
|
-
case value
|
9
|
-
when true, 1
|
10
|
-
true
|
11
|
-
when false, nil, 0
|
12
|
-
false
|
13
|
-
else
|
14
|
-
raise ArgumentError, "invalid value for Boolean(): \"#{value.inspect}\""
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
module Meta_Functions
|
20
|
-
private
|
21
|
-
|
22
|
-
include Conversions
|
23
|
-
|
24
|
-
def make_accessor_bool(*params)
|
25
|
-
params.each do |param|
|
26
|
-
define_singleton_method("#{param}") do
|
27
|
-
return !(self.getter("#{param}")).zero?
|
28
|
-
end
|
29
|
-
|
30
|
-
define_singleton_method("#{param}=") do |value|
|
31
|
-
self.setter("#{param}", Boolean(value) ? 1 : 0)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def make_accessor_int(*params)
|
37
|
-
params.each do |param|
|
38
|
-
define_singleton_method("#{param}") do
|
39
|
-
return self.getter("#{param}").to_i
|
40
|
-
end
|
41
|
-
|
42
|
-
define_singleton_method("#{param}=") do |value|
|
43
|
-
self.setter("#{param}", value)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def make_accessor_float(*params)
|
49
|
-
params.each do |param|
|
50
|
-
define_singleton_method("#{param}") { return self.getter("#{param}") }
|
51
|
-
|
52
|
-
define_singleton_method("#{param}=") do |value|
|
53
|
-
self.setter("#{param}", value)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def make_accessor_string(*params)
|
59
|
-
params.each do |param|
|
60
|
-
define_singleton_method("#{param}") do
|
61
|
-
return self.getter("#{param}", true)
|
62
|
-
end
|
63
|
-
|
64
|
-
define_singleton_method("#{param}=") do |value|
|
65
|
-
self.setter("#{param}", value)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def make_reader_only(*params)
|
71
|
-
params.each do |param|
|
72
|
-
define_singleton_method("#{param}") { return self.getter("#{param}") }
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def make_writer_only(*params)
|
77
|
-
params.each do |param|
|
78
|
-
define_singleton_method("#{param}=") do |value = 1|
|
79
|
-
self.setter("#{param}", value)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def make_action_prop(*params)
|
85
|
-
params.each do |param|
|
86
|
-
define_singleton_method("#{param}") { self.setter("#{param}", 1) }
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
module Channel_Meta_Functions
|
92
|
-
private
|
93
|
-
|
94
|
-
include Meta_Functions
|
95
|
-
|
96
|
-
def make_accessor_bool(*params)
|
97
|
-
params.each do |param|
|
98
|
-
cmds = { eq: "EQ.on", eq_ab: "EQ.ab" }
|
99
|
-
if cmds.key? param
|
100
|
-
cmd = cmds[param]
|
101
|
-
else
|
102
|
-
cmd = param
|
103
|
-
end
|
104
|
-
|
105
|
-
define_singleton_method("#{param}") do
|
106
|
-
return !(self.getter("#{cmd}")).zero?
|
107
|
-
end
|
108
|
-
|
109
|
-
define_singleton_method("#{param}=") do |value|
|
110
|
-
self.setter("#{cmd}", Boolean(value) ? 1 : 0)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def make_reader_only(*params)
|
116
|
-
params.each do |param|
|
117
|
-
cmds = { device: "device.name", sr: "device.sr" }
|
118
|
-
if cmds.key? param
|
119
|
-
cmd = cmds[param]
|
120
|
-
else
|
121
|
-
cmd = param
|
122
|
-
end
|
123
|
-
|
124
|
-
define_singleton_method("#{param}") do
|
125
|
-
case param
|
126
|
-
when :device
|
127
|
-
return self.getter("#{cmd}", true)
|
128
|
-
when :sr
|
129
|
-
return self.getter("#{cmd}").to_i
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def make_bus_modes(*params)
|
136
|
-
params.each do |param|
|
137
|
-
define_singleton_method("#{param}") do
|
138
|
-
@remote.clear_polling
|
139
|
-
return !(self.getter("#{param}")).zero?
|
140
|
-
end
|
141
|
-
|
142
|
-
define_singleton_method("#{param}=") do |value|
|
143
|
-
self.setter("#{param}", Boolean(value) ? 1 : 0)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
module Vban_Meta_Functions
|
150
|
-
private
|
151
|
-
|
152
|
-
include Meta_Functions
|
153
|
-
|
154
|
-
def make_reader_int(*params)
|
155
|
-
params.each do |param|
|
156
|
-
define_singleton_method("#{param}") do
|
157
|
-
case param
|
158
|
-
when :bit
|
159
|
-
return self.getter("#{param}").to_i == 1 ? 16 : 24
|
160
|
-
else
|
161
|
-
return self.getter("#{param}").to_i
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
def make_accessor_int(*params)
|
168
|
-
params.each do |param|
|
169
|
-
define_singleton_method("#{param}") do
|
170
|
-
case param
|
171
|
-
when :bit
|
172
|
-
return self.getter("#{param}").to_i == 1 ? 16 : 24
|
173
|
-
else
|
174
|
-
return self.getter("#{param}").to_i
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
opts = {
|
179
|
-
sr: [
|
180
|
-
11_025,
|
181
|
-
16_000,
|
182
|
-
22_050,
|
183
|
-
24_000,
|
184
|
-
32_000,
|
185
|
-
44_100,
|
186
|
-
48_000,
|
187
|
-
64_000,
|
188
|
-
88_200,
|
189
|
-
96_000
|
190
|
-
],
|
191
|
-
channel: (1..8),
|
192
|
-
bit: [16, 24],
|
193
|
-
quality: (0..4),
|
194
|
-
route: (0..8)
|
195
|
-
}
|
196
|
-
|
197
|
-
define_singleton_method("#{param}=") do |value|
|
198
|
-
unless opts[param].member? value
|
199
|
-
raise OutOfBoundsErrors.new(opts[param])
|
200
|
-
end
|
201
|
-
case param
|
202
|
-
when :bit
|
203
|
-
self.setter("#{param}", value == 16 ? 1 : 2)
|
204
|
-
else
|
205
|
-
self.setter("#{param}", value)
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
module MacroButton_Meta_Functions
|
213
|
-
private
|
214
|
-
|
215
|
-
include Conversions
|
216
|
-
|
217
|
-
def make_accessor_macrobutton(*params)
|
218
|
-
params.each do |param|
|
219
|
-
mode = { state: 1, stateonly: 2, trigger: 3 }
|
220
|
-
|
221
|
-
define_singleton_method("#{param}") do
|
222
|
-
return !(self.getter(mode[param])).zero?
|
223
|
-
end
|
224
|
-
|
225
|
-
define_singleton_method("#{param}=") do |value|
|
226
|
-
self.setter(Boolean(value) ? 1 : 0, mode[param])
|
227
|
-
end
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
module Commands_Meta_Functions
|
233
|
-
private
|
234
|
-
|
235
|
-
include Meta_Functions
|
236
|
-
def make_writer_bool(*params)
|
237
|
-
params.each do |param|
|
238
|
-
cmds = { showvbanchat: "DialogShow.VBANCHAT" }
|
239
|
-
if cmds.key? param
|
240
|
-
cmd = cmds[param]
|
241
|
-
else
|
242
|
-
cmd = param
|
243
|
-
end
|
244
|
-
|
245
|
-
define_singleton_method("#{param}=") do |value|
|
246
|
-
self.setter("#{cmd}", Boolean(value) ? 1 : 0)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
1
|
+
require_relative "errors"
|
2
|
+
|
3
|
+
module Voicemeeter
|
4
|
+
module Conversions
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def Boolean(value)
|
8
|
+
case value
|
9
|
+
when true, 1
|
10
|
+
true
|
11
|
+
when false, nil, 0
|
12
|
+
false
|
13
|
+
else
|
14
|
+
raise ArgumentError, "invalid value for Boolean(): \"#{value.inspect}\""
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Meta_Functions
|
20
|
+
private
|
21
|
+
|
22
|
+
include Conversions
|
23
|
+
|
24
|
+
def make_accessor_bool(*params)
|
25
|
+
params.each do |param|
|
26
|
+
define_singleton_method("#{param}") do
|
27
|
+
return !(self.getter("#{param}")).zero?
|
28
|
+
end
|
29
|
+
|
30
|
+
define_singleton_method("#{param}=") do |value|
|
31
|
+
self.setter("#{param}", Boolean(value) ? 1 : 0)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def make_accessor_int(*params)
|
37
|
+
params.each do |param|
|
38
|
+
define_singleton_method("#{param}") do
|
39
|
+
return self.getter("#{param}").to_i
|
40
|
+
end
|
41
|
+
|
42
|
+
define_singleton_method("#{param}=") do |value|
|
43
|
+
self.setter("#{param}", value)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def make_accessor_float(*params)
|
49
|
+
params.each do |param|
|
50
|
+
define_singleton_method("#{param}") { return self.getter("#{param}") }
|
51
|
+
|
52
|
+
define_singleton_method("#{param}=") do |value|
|
53
|
+
self.setter("#{param}", value)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def make_accessor_string(*params)
|
59
|
+
params.each do |param|
|
60
|
+
define_singleton_method("#{param}") do
|
61
|
+
return self.getter("#{param}", true)
|
62
|
+
end
|
63
|
+
|
64
|
+
define_singleton_method("#{param}=") do |value|
|
65
|
+
self.setter("#{param}", value)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def make_reader_only(*params)
|
71
|
+
params.each do |param|
|
72
|
+
define_singleton_method("#{param}") { return self.getter("#{param}") }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def make_writer_only(*params)
|
77
|
+
params.each do |param|
|
78
|
+
define_singleton_method("#{param}=") do |value = 1|
|
79
|
+
self.setter("#{param}", value)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def make_action_prop(*params)
|
85
|
+
params.each do |param|
|
86
|
+
define_singleton_method("#{param}") { self.setter("#{param}", 1) }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
module Channel_Meta_Functions
|
92
|
+
private
|
93
|
+
|
94
|
+
include Meta_Functions
|
95
|
+
|
96
|
+
def make_accessor_bool(*params)
|
97
|
+
params.each do |param|
|
98
|
+
cmds = { eq: "EQ.on", eq_ab: "EQ.ab" }
|
99
|
+
if cmds.key? param
|
100
|
+
cmd = cmds[param]
|
101
|
+
else
|
102
|
+
cmd = param
|
103
|
+
end
|
104
|
+
|
105
|
+
define_singleton_method("#{param}") do
|
106
|
+
return !(self.getter("#{cmd}")).zero?
|
107
|
+
end
|
108
|
+
|
109
|
+
define_singleton_method("#{param}=") do |value|
|
110
|
+
self.setter("#{cmd}", Boolean(value) ? 1 : 0)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def make_reader_only(*params)
|
116
|
+
params.each do |param|
|
117
|
+
cmds = { device: "device.name", sr: "device.sr" }
|
118
|
+
if cmds.key? param
|
119
|
+
cmd = cmds[param]
|
120
|
+
else
|
121
|
+
cmd = param
|
122
|
+
end
|
123
|
+
|
124
|
+
define_singleton_method("#{param}") do
|
125
|
+
case param
|
126
|
+
when :device
|
127
|
+
return self.getter("#{cmd}", true)
|
128
|
+
when :sr
|
129
|
+
return self.getter("#{cmd}").to_i
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def make_bus_modes(*params)
|
136
|
+
params.each do |param|
|
137
|
+
define_singleton_method("#{param}") do
|
138
|
+
@remote.clear_polling
|
139
|
+
return !(self.getter("#{param}")).zero?
|
140
|
+
end
|
141
|
+
|
142
|
+
define_singleton_method("#{param}=") do |value|
|
143
|
+
self.setter("#{param}", Boolean(value) ? 1 : 0)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
module Vban_Meta_Functions
|
150
|
+
private
|
151
|
+
|
152
|
+
include Meta_Functions
|
153
|
+
|
154
|
+
def make_reader_int(*params)
|
155
|
+
params.each do |param|
|
156
|
+
define_singleton_method("#{param}") do
|
157
|
+
case param
|
158
|
+
when :bit
|
159
|
+
return self.getter("#{param}").to_i == 1 ? 16 : 24
|
160
|
+
else
|
161
|
+
return self.getter("#{param}").to_i
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def make_accessor_int(*params)
|
168
|
+
params.each do |param|
|
169
|
+
define_singleton_method("#{param}") do
|
170
|
+
case param
|
171
|
+
when :bit
|
172
|
+
return self.getter("#{param}").to_i == 1 ? 16 : 24
|
173
|
+
else
|
174
|
+
return self.getter("#{param}").to_i
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
opts = {
|
179
|
+
sr: [
|
180
|
+
11_025,
|
181
|
+
16_000,
|
182
|
+
22_050,
|
183
|
+
24_000,
|
184
|
+
32_000,
|
185
|
+
44_100,
|
186
|
+
48_000,
|
187
|
+
64_000,
|
188
|
+
88_200,
|
189
|
+
96_000
|
190
|
+
],
|
191
|
+
channel: (1..8),
|
192
|
+
bit: [16, 24],
|
193
|
+
quality: (0..4),
|
194
|
+
route: (0..8)
|
195
|
+
}
|
196
|
+
|
197
|
+
define_singleton_method("#{param}=") do |value|
|
198
|
+
unless opts[param].member? value
|
199
|
+
raise OutOfBoundsErrors.new(opts[param])
|
200
|
+
end
|
201
|
+
case param
|
202
|
+
when :bit
|
203
|
+
self.setter("#{param}", value == 16 ? 1 : 2)
|
204
|
+
else
|
205
|
+
self.setter("#{param}", value)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
module MacroButton_Meta_Functions
|
213
|
+
private
|
214
|
+
|
215
|
+
include Conversions
|
216
|
+
|
217
|
+
def make_accessor_macrobutton(*params)
|
218
|
+
params.each do |param|
|
219
|
+
mode = { state: 1, stateonly: 2, trigger: 3 }
|
220
|
+
|
221
|
+
define_singleton_method("#{param}") do
|
222
|
+
return !(self.getter(mode[param])).zero?
|
223
|
+
end
|
224
|
+
|
225
|
+
define_singleton_method("#{param}=") do |value|
|
226
|
+
self.setter(Boolean(value) ? 1 : 0, mode[param])
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
module Commands_Meta_Functions
|
233
|
+
private
|
234
|
+
|
235
|
+
include Meta_Functions
|
236
|
+
def make_writer_bool(*params)
|
237
|
+
params.each do |param|
|
238
|
+
cmds = { showvbanchat: "DialogShow.VBANCHAT" }
|
239
|
+
if cmds.key? param
|
240
|
+
cmd = cmds[param]
|
241
|
+
else
|
242
|
+
cmd = param
|
243
|
+
end
|
244
|
+
|
245
|
+
define_singleton_method("#{param}=") do |value|
|
246
|
+
self.setter("#{cmd}", Boolean(value) ? 1 : 0)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
data/lib/voicemeeter/recorder.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
require_relative "iremote"
|
2
|
-
require_relative "meta"
|
3
|
-
|
4
|
-
module Voicemeeter
|
5
|
-
class Recorder < IRemote
|
6
|
-
"
|
7
|
-
Concrete Recorder class
|
8
|
-
"
|
9
|
-
include Mixin::Outputs
|
10
|
-
|
11
|
-
def initialize(remote)
|
12
|
-
super
|
13
|
-
self.make_action_prop :play, :stop, :record, :ff, :rew
|
14
|
-
end
|
15
|
-
|
16
|
-
def identifier
|
17
|
-
:recorder
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
1
|
+
require_relative "iremote"
|
2
|
+
require_relative "meta"
|
3
|
+
|
4
|
+
module Voicemeeter
|
5
|
+
class Recorder < IRemote
|
6
|
+
"
|
7
|
+
Concrete Recorder class
|
8
|
+
"
|
9
|
+
include Mixin::Outputs
|
10
|
+
|
11
|
+
def initialize(remote)
|
12
|
+
super
|
13
|
+
self.make_action_prop :play, :stop, :record, :ff, :rew
|
14
|
+
end
|
15
|
+
|
16
|
+
def identifier
|
17
|
+
:recorder
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Voicemeeter
|
2
|
+
include RunVM
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
class Remote < Base
|
7
|
+
include Kinds
|
8
|
+
"
|
9
|
+
Remote class, subclasses Base
|
10
|
+
|
11
|
+
Console layout built according to a kind
|
12
|
+
|
13
|
+
Offers a run method for resource closure.
|
14
|
+
"
|
15
|
+
def initialize(kind, **kwargs)
|
16
|
+
super
|
17
|
+
self.strip = Strip.make(self, kind.layout[:strip])
|
18
|
+
self.bus = Bus.make(self, kind.layout[:bus])
|
19
|
+
self.button = MacroButton.make(self, kind.layout[:mb])
|
20
|
+
self.vban = Vban.new(self, kind.layout[:vban])
|
21
|
+
self.command = Command.new(self)
|
22
|
+
self.recorder = Recorder.new(self)
|
23
|
+
self.device = Device.new(self)
|
24
|
+
end
|
25
|
+
|
26
|
+
def run
|
27
|
+
"
|
28
|
+
Handles login/logout
|
29
|
+
|
30
|
+
Starts/stops the observable thread.
|
31
|
+
"
|
32
|
+
login
|
33
|
+
init_worker
|
34
|
+
|
35
|
+
yield if block_given?
|
36
|
+
ensure
|
37
|
+
end_worker
|
38
|
+
logout
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
public
|
43
|
+
|
44
|
+
def self.remote(kind_id, **kwargs)
|
45
|
+
"
|
46
|
+
Factory method for remotes.
|
47
|
+
|
48
|
+
Creates a hash of remote classes, one for each kind.
|
49
|
+
|
50
|
+
Handles kind_id request errors.
|
51
|
+
|
52
|
+
Returns a remote class of the kind requested.
|
53
|
+
"
|
54
|
+
_remotes =
|
55
|
+
Kinds.kinds_all.to_h do |kind|
|
56
|
+
[kind.name.to_s, Remote.new(kind, **kwargs)]
|
57
|
+
end
|
58
|
+
|
59
|
+
unless _remotes.key? kind_id
|
60
|
+
raise VMRemoteErrors.new("Unknown Voicemeeter Kind.")
|
61
|
+
end
|
62
|
+
_remotes[kind_id]
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.testing
|
66
|
+
"
|
67
|
+
Returns a random Remote class
|
68
|
+
"
|
69
|
+
unless ENV["RACK_ENV"] == "dev"
|
70
|
+
raise VMRemoteErrors.new("Not in developer mode")
|
71
|
+
end
|
72
|
+
|
73
|
+
Remote.new(Kinds.kinds_all.sample)
|
74
|
+
end
|
75
|
+
|
76
|
+
module_function :start
|
77
|
+
end
|
data/lib/voicemeeter/runvm.rb
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
require_relative "cbindings"
|
2
|
-
require_relative "kinds"
|
3
|
-
|
4
|
-
module Voicemeeter
|
5
|
-
module RunVM
|
6
|
-
"
|
7
|
-
Starts Voicemeeter of the Kind requested.
|
8
|
-
"
|
9
|
-
include CBindings
|
10
|
-
include Kinds
|
11
|
-
|
12
|
-
def start(kind_id)
|
13
|
-
unless Kinds.kind_map.key? kind_id
|
14
|
-
raise VMRemoteErrors.new("Unknown Voicemeeter Kind.")
|
15
|
-
end
|
16
|
-
|
17
|
-
enums =
|
18
|
-
Kinds.kinds_all.map.with_index do |kind, i|
|
19
|
-
if CBindings::OS_BITS == 64 && kind.name.to_s == "potato"
|
20
|
-
[kind.name.to_s, i + 4]
|
21
|
-
else
|
22
|
-
[kind.name.to_s, i + 1]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
exes = enums.to_h { |k, v| [k, v.to_i] }
|
26
|
-
|
27
|
-
CBindings.vm_runvm(exes[kind_id])
|
28
|
-
sleep(1)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
1
|
+
require_relative "cbindings"
|
2
|
+
require_relative "kinds"
|
3
|
+
|
4
|
+
module Voicemeeter
|
5
|
+
module RunVM
|
6
|
+
"
|
7
|
+
Starts Voicemeeter of the Kind requested.
|
8
|
+
"
|
9
|
+
include CBindings
|
10
|
+
include Kinds
|
11
|
+
|
12
|
+
def start(kind_id)
|
13
|
+
unless Kinds.kind_map.key? kind_id
|
14
|
+
raise VMRemoteErrors.new("Unknown Voicemeeter Kind.")
|
15
|
+
end
|
16
|
+
|
17
|
+
enums =
|
18
|
+
Kinds.kinds_all.map.with_index do |kind, i|
|
19
|
+
if CBindings::OS_BITS == 64 && kind.name.to_s == "potato"
|
20
|
+
[kind.name.to_s, i + 4]
|
21
|
+
else
|
22
|
+
[kind.name.to_s, i + 1]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
exes = enums.to_h { |k, v| [k, v.to_i] }
|
26
|
+
|
27
|
+
CBindings.vm_runvm(exes[kind_id])
|
28
|
+
sleep(1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|