voicemeeter_api_ruby 4.1.5 → 4.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/configs.rb DELETED
@@ -1,80 +0,0 @@
1
- require "kinds"
2
- require "toml"
3
-
4
- module Configs
5
- private
6
-
7
- @@configs = Hash.new
8
-
9
- class TOMLStrBuilder
10
- def initialize(kind)
11
- @p_in, @v_in = kind[:layout][:strip].values
12
- @p_out, @v_out = kind[:layout][:bus].values
13
- @vs_params =
14
- ["mute = false", "mono = false", "solo = false", "gain = 0.0"] +
15
- (1..@p_out).map { |i| "A#{i} = false" } +
16
- (1..@v_out).map { |i| "B#{i} = false" }
17
-
18
- @ps_params = @vs_params + ["comp = 0.0", "gate = 0.0"]
19
- @bus_params = ["mono = false", "eq = false", "mute = false"]
20
- end
21
-
22
- def build
23
- "
24
- Builds a TOML script for the parser
25
- "
26
- @ps = (0...@p_in).map { |i| ["[strip_#{i}]"] + @ps_params }
27
- @ps.map! { |a| a.map { |s| s.gsub("B1 = false", "B1 = true") } }
28
- @vs = (@p_in...(@p_in + @v_in)).map { |i| ["[strip_#{i}]"] + @vs_params }
29
- @vs.map! { |a| a.map { |s| s.gsub("A1 = false", "A1 = true") } }
30
-
31
- @b = (0...(@p_out + @v_out)).map { |i| ["[bus_#{i}]"] + @bus_params }
32
-
33
- [@ps + @vs + @b].join("\n")
34
- end
35
- end
36
-
37
- def parser(data)
38
- TOML::Parser.new(data).parsed
39
- end
40
-
41
- def get_configs(kind_id)
42
- file_path = File.join(Dir.pwd, "configs", "#{kind_id}")
43
-
44
- if Dir.exist?(file_path)
45
- Dir
46
- .glob(File.join(file_path, "*.toml"))
47
- .to_h do |toml_file|
48
- filename = File.basename(toml_file, ".toml")
49
- puts "loading config #{kind_id}/#{filename} into memory"
50
- [filename, parser(File.read(toml_file))]
51
- end
52
- end
53
- end
54
-
55
- def loader
56
- if @@configs.empty?
57
- builder = TOMLStrBuilder.new(@kind)
58
- puts "loading config reset into memory"
59
- @@configs["reset"] = parser(builder.build)
60
- configs = get_configs(@kind.name.to_s)
61
-
62
- @@configs.merge!(configs) unless configs.nil?
63
- end
64
- end
65
-
66
- public
67
-
68
- def set_config(value)
69
- loader
70
- unless @@configs.key? value
71
- raise VMRemoteErrors.new("No profile with name #{value} was loaded")
72
- end
73
-
74
- self.send("set_multi", @@configs[value])
75
- puts "config #{@kind.name}/#{value} applied!"
76
- sleep(@delay)
77
- end
78
-
79
- alias_method "apply_config", :set_config
80
- end
data/lib/device.rb DELETED
@@ -1,24 +0,0 @@
1
- require_relative "iremote"
2
- require_relative "meta"
3
-
4
- class Device
5
- def initialize(remote)
6
- @remote = remote
7
- end
8
-
9
- def getter(**kwargs)
10
- return @remote.get_num_devices(kwargs[:direction]) if kwargs[:index].nil?
11
-
12
- vals = @remote.get_device_description(kwargs[:index], kwargs[:direction])
13
- types = { 1 => "mme", 3 => "wdm", 4 => "ks", 5 => "asio" }
14
- { name: vals[0], type: types[vals[1]], id: vals[2] }
15
- end
16
-
17
- def ins = getter(direction: "in")
18
-
19
- def outs = getter(direction: "out")
20
-
21
- def input(i) = getter(index: i, direction: "in")
22
-
23
- def output(i) = getter(index: i, direction: "out")
24
- end
data/lib/errors.rb DELETED
@@ -1,41 +0,0 @@
1
- module Errors
2
- class VMRemoteErrors < StandardError
3
- end
4
-
5
- class InstallErrors < VMRemoteErrors
6
- end
7
-
8
- class CAPIErrors < VMRemoteErrors
9
- attr_accessor :value, :func
10
-
11
- def initialize(value, func)
12
- self.value = value
13
- self.func = func
14
- end
15
-
16
- def message
17
- "
18
- When attempting to run function #{@func} the
19
- C API returned value #{@value}. See documentation for further info
20
- "
21
- end
22
- end
23
-
24
- class OutOfBoundsErrors < VMRemoteErrors
25
- attr_accessor :range
26
-
27
- def initialize(range)
28
- self.range = range
29
- end
30
-
31
- def message
32
- if @range.kind_of?(Range)
33
- "Value error, expected value in range (#{range.first}..#{range.last})"
34
- elsif @range.kind_of?(Array)
35
- "Value error, expected one of: #{@range}"
36
- else
37
- "Value error, expected #{@range}"
38
- end
39
- end
40
- end
41
- end
data/lib/inst.rb DELETED
@@ -1,27 +0,0 @@
1
- require "win32/registry"
2
- require "pathname"
3
- require_relative "errors"
4
-
5
- include Errors
6
-
7
- module InstallationFunctions
8
- private
9
-
10
- def get_vmpath(os_bits)
11
- vm_key = "VB:Voicemeeter {17359A74-1236-5467}"
12
- reg_key =
13
- "Software#{os_bits == 64 ? "\\WOW6432Node" : ""}\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"
14
- Win32::Registry::HKEY_LOCAL_MACHINE.open(reg_key + vm_key) do |reg|
15
- value = reg["UninstallString"]
16
-
17
- pn = Pathname.new(value)
18
- return pn.dirname
19
- end
20
- raise InstallErrors.new("Could not get the Voicemeeter path")
21
- end
22
-
23
- def vm_dll=(value)
24
- raise InstallErrors.new("Could not fetch the dll file") unless value.file?
25
- @vm_dll = value
26
- end
27
- end
data/lib/iremote.rb DELETED
@@ -1,32 +0,0 @@
1
- require_relative "meta"
2
- require_relative "errors"
3
-
4
- class IRemote
5
- "
6
- Common interface between base class and higher classes.
7
- "
8
- include Meta_Functions
9
-
10
- def initialize(remote, i = nil)
11
- @remote = remote
12
- @index = i
13
- end
14
-
15
- def getter(param, is_string = false)
16
- @remote.get_parameter("#{self.identifier}.#{param}", is_string)
17
- end
18
-
19
- def setter(param, value)
20
- @remote.set_parameter("#{self.identifier}.#{param}", value)
21
- end
22
-
23
- def identifier
24
- raise "Called abstract method: identifier"
25
- end
26
-
27
- def set_multi(param_hash)
28
- param_hash.each { |(key, val)| self.send("#{key}=", val) }
29
- end
30
-
31
- alias_method "apply", :set_multi
32
- end
data/lib/kinds.rb DELETED
@@ -1,77 +0,0 @@
1
- module Kinds
2
- "
3
- A Kind struct for each version of Voicemeeter
4
- "
5
- attr_reader :kind_map, :kinds_all
6
-
7
- Kind = Struct.new(:name, :layout)
8
- basic =
9
- Kind.new(
10
- "basic",
11
- {
12
- strip: {
13
- p_in: 2,
14
- v_in: 1
15
- },
16
- bus: {
17
- p_out: 1,
18
- v_out: 1
19
- },
20
- vban: {
21
- instream: 4,
22
- outstream: 4
23
- },
24
- mb: 80
25
- }
26
- )
27
-
28
- banana =
29
- Kind.new(
30
- "banana",
31
- {
32
- strip: {
33
- p_in: 3,
34
- v_in: 2
35
- },
36
- bus: {
37
- p_out: 3,
38
- v_out: 2
39
- },
40
- vban: {
41
- instream: 8,
42
- outstream: 8
43
- },
44
- mb: 80
45
- }
46
- )
47
-
48
- potato =
49
- Kind.new(
50
- "potato",
51
- {
52
- strip: {
53
- p_in: 5,
54
- v_in: 3
55
- },
56
- bus: {
57
- p_out: 5,
58
- v_out: 3
59
- },
60
- vban: {
61
- instream: 8,
62
- outstream: 8
63
- },
64
- mb: 80
65
- }
66
- )
67
-
68
- @kind_map = [basic, banana, potato].to_h { |kind| [kind.name, kind] }
69
-
70
- def get_kind(kind_id)
71
- @kind_map[kind_id]
72
- end
73
-
74
- @kinds_all = @kind_map.values
75
-
76
- module_function :get_kind
77
- end
data/lib/meta.rb DELETED
@@ -1,275 +0,0 @@
1
- require_relative "errors"
2
-
3
- module Conversions
4
- module_function
5
-
6
- def Boolean(value)
7
- case value
8
- when true, 1
9
- true
10
- when false, nil, 0
11
- false
12
- else
13
- raise ArgumentError, "invalid value for Boolean(): \"#{value.inspect}\""
14
- end
15
- end
16
- end
17
-
18
- module Meta_Functions
19
- private
20
-
21
- include Conversions
22
-
23
- def make_accessor_bool(*params)
24
- params.each do |param|
25
- define_singleton_method("#{param}") do
26
- return !(self.getter("#{param}")).zero?
27
- end
28
-
29
- define_singleton_method("#{param}=") do |value|
30
- self.setter("#{param}", Boolean(value) ? 1 : 0)
31
- end
32
- end
33
- end
34
-
35
- def make_accessor_int(*params)
36
- params.each do |param|
37
- define_singleton_method("#{param}") do
38
- return self.getter("#{param}").to_i
39
- end
40
- define_singleton_method("#{param}=") do |value|
41
- self.setter("#{param}", value)
42
- end
43
- end
44
- end
45
-
46
- def make_accessor_float(*params)
47
- params.each do |param|
48
- define_singleton_method("#{param}") { return self.getter("#{param}") }
49
- define_singleton_method("#{param}=") do |value|
50
- self.setter("#{param}", value)
51
- end
52
- end
53
- end
54
-
55
- def make_accessor_string(*params)
56
- params.each do |param|
57
- define_singleton_method("#{param}") do
58
- return self.getter("#{param}", true)
59
- end
60
- define_singleton_method("#{param}=") do |value|
61
- self.setter("#{param}", value)
62
- end
63
- end
64
- end
65
-
66
- def make_reader_only(*params)
67
- params.each do |param|
68
- define_singleton_method("#{param}") { return self.getter("#{param}") }
69
- end
70
- end
71
-
72
- def make_writer_only(*params)
73
- params.each do |param|
74
- define_singleton_method("#{param}=") do |value = 1|
75
- self.setter("#{param}", value)
76
- end
77
- end
78
- end
79
-
80
- def make_channel_props(num_A, num_B)
81
- (1..(num_A + num_B)).map { |i| i <= num_A ? "A#{i}" : "B#{i - num_A}" }
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 Conversions
95
- include Meta_Functions
96
-
97
- def make_accessor_bool(*params)
98
- params.each do |param|
99
- cmds = { eq: "EQ.on" }
100
- if cmds.key? param
101
- cmd = cmds[param]
102
- else
103
- cmd = param
104
- end
105
-
106
- define_singleton_method("#{param}") do
107
- return !(self.getter("#{cmd}")).zero?
108
- end
109
-
110
- define_singleton_method("#{param}=") do |value|
111
- self.setter("#{cmd}", Boolean(value) ? 1 : 0)
112
- end
113
- end
114
- end
115
-
116
- def make_accessor_float(*params)
117
- params.each do |param|
118
- define_singleton_method("#{param}") { return self.getter("#{param}") }
119
-
120
- define_singleton_method("#{param}=") do |value|
121
- self.setter("#{param}", value)
122
- end
123
- end
124
- end
125
-
126
- def make_accessor_int(*params)
127
- params.each do |param|
128
- define_singleton_method("#{param}") do
129
- return self.getter("#{param}").to_i
130
- end
131
-
132
- define_singleton_method("#{param}=") do |value|
133
- self.setter("#{param}", value)
134
- end
135
- end
136
- end
137
-
138
- def make_reader_only(*params)
139
- params.each do |param|
140
- cmds = { device: "device.name", sr: "device.sr" }
141
- if cmds.key? param
142
- cmd = cmds[param]
143
- else
144
- cmd = param
145
- end
146
-
147
- define_singleton_method("#{param}") do
148
- case param
149
- when :device
150
- return self.getter("#{cmd}", true)
151
- when :sr
152
- return self.getter("#{cmd}").to_i
153
- end
154
- end
155
- end
156
- end
157
-
158
- def make_bus_modes(*params)
159
- params.each do |param|
160
- define_singleton_method("#{param}") do
161
- @remote.clear_polling
162
- return !(self.getter("#{param}")).zero?
163
- end
164
-
165
- define_singleton_method("#{param}=") do |value|
166
- self.setter("#{param}", Boolean(value) ? 1 : 0)
167
- end
168
- end
169
- end
170
- end
171
-
172
- module Vban_Meta_Functions
173
- private
174
-
175
- include Conversions
176
- include Meta_Functions
177
-
178
- def make_reader_int(*params)
179
- params.each do |param|
180
- define_singleton_method("#{param}") do
181
- case param
182
- when :bit
183
- return self.getter("#{param}").to_i == 1 ? 16 : 24
184
- else
185
- return self.getter("#{param}").to_i
186
- end
187
- end
188
- end
189
- end
190
-
191
- def make_accessor_int(*params)
192
- params.each do |param|
193
- define_singleton_method("#{param}") do
194
- case param
195
- when :bit
196
- return self.getter("#{param}").to_i == 1 ? 16 : 24
197
- else
198
- return self.getter("#{param}").to_i
199
- end
200
- end
201
-
202
- opts = {
203
- sr: [
204
- 11_025,
205
- 16_000,
206
- 22_050,
207
- 24_000,
208
- 32_000,
209
- 44_100,
210
- 48_000,
211
- 64_000,
212
- 88_200,
213
- 96_000
214
- ],
215
- channel: (1..8),
216
- bit: [16, 24],
217
- quality: (0..4),
218
- route: (0..8)
219
- }
220
-
221
- define_singleton_method("#{param}=") do |value|
222
- unless opts[param].member? value
223
- raise OutOfBoundsErrors.new(opts[param])
224
- end
225
- case param
226
- when :bit
227
- self.setter("#{param}", value == 16 ? 1 : 2)
228
- else
229
- self.setter("#{param}", value)
230
- end
231
- end
232
- end
233
- end
234
- end
235
-
236
- module MacroButton_Meta_Functions
237
- private
238
-
239
- include Conversions
240
-
241
- def make_accessor_macrobutton(*params)
242
- params.each do |param|
243
- mode = { state: 1, stateonly: 2, trigger: 3 }
244
-
245
- define_singleton_method("#{param}") do
246
- return !(self.getter(mode[param])).zero?
247
- end
248
-
249
- define_singleton_method("#{param}=") do |value|
250
- self.setter(Boolean(value) ? 1 : 0, mode[param])
251
- end
252
- end
253
- end
254
- end
255
-
256
- module Commands_Meta_Functions
257
- private
258
-
259
- include Conversions
260
- include Meta_Functions
261
- def make_writer_bool(*params)
262
- params.each do |param|
263
- cmds = { showvbanchat: "DialogShow.VBANCHAT" }
264
- if cmds.key? param
265
- cmd = cmds[param]
266
- else
267
- cmd = param
268
- end
269
-
270
- define_singleton_method("#{param}=") do |value|
271
- self.setter("#{cmd}", Boolean(value) ? 1 : 0)
272
- end
273
- end
274
- end
275
- end
data/lib/recorder.rb DELETED
@@ -1,20 +0,0 @@
1
- require_relative "iremote"
2
- require_relative "meta"
3
-
4
- class Recorder < IRemote
5
- "
6
- Concrete Recorder class
7
- "
8
-
9
- def initialize(remote)
10
- super
11
- self.make_action_prop :play, :stop, :record, :ff, :rew
12
-
13
- num_A, num_B = remote.kind.layout[:bus].values
14
- self.make_accessor_bool *make_channel_props(num_A, num_B)
15
- end
16
-
17
- def identifier
18
- :recorder
19
- end
20
- end
data/lib/runvm.rb DELETED
@@ -1,29 +0,0 @@
1
- require_relative "cbindings"
2
- require_relative "kinds"
3
-
4
- include CBindings
5
- include Kinds
6
-
7
- module RunVM
8
- "
9
- Starts Voicemeeter of the Kind requested.
10
- "
11
- def start(kind_id)
12
- unless Kinds.kind_map.key? kind_id
13
- raise VMRemoteErrors.new("Unknown Voicemeeter Kind.")
14
- end
15
-
16
- enums =
17
- Kinds.kinds_all.map.with_index do |kind, i|
18
- if OS_BITS == 64 && kind.name.to_s == "potato"
19
- [kind.name.to_s, i + 4]
20
- else
21
- [kind.name.to_s, i + 1]
22
- end
23
- end
24
- exes = enums.to_h { |k, v| [k, v.to_i] }
25
-
26
- send(:vm_runvm, exes[kind_id])
27
- sleep(1)
28
- end
29
- end