voicemeeter_api_ruby 4.1.4 → 4.3.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.
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,30 +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
- 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