voicemeeter_api_ruby 2.0.4 → 3.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +271 -0
- data/LICENSE +21 -0
- data/README.md +308 -0
- data/lib/base.rb +151 -171
- data/lib/bus.rb +64 -33
- data/lib/button.rb +36 -42
- data/lib/cbindings.rb +103 -0
- data/lib/channel.rb +46 -34
- data/lib/command.rb +41 -41
- data/lib/errors.rb +39 -37
- data/lib/inst.rb +38 -36
- data/lib/kinds.rb +77 -0
- data/lib/meta.rb +274 -252
- data/lib/profiles.rb +28 -0
- data/lib/recorder.rb +37 -45
- data/lib/runvm.rb +29 -18
- data/lib/strip.rb +80 -49
- data/lib/vban.rb +103 -106
- data/lib/version.rb +3 -3
- data/lib/voicemeeter.rb +73 -60
- metadata +18 -36
- data/lib/routines.rb +0 -123
data/lib/channel.rb
CHANGED
@@ -1,34 +1,46 @@
|
|
1
|
-
require_relative 'meta'
|
2
|
-
require_relative 'errors'
|
3
|
-
|
4
|
-
class IChannel
|
5
|
-
|
6
|
-
Base class
|
7
|
-
|
8
|
-
include Channel_Meta_Functions
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
1
|
+
require_relative 'meta'
|
2
|
+
require_relative 'errors'
|
3
|
+
|
4
|
+
class IChannel
|
5
|
+
'
|
6
|
+
Base Channel class
|
7
|
+
'
|
8
|
+
include Channel_Meta_Functions
|
9
|
+
|
10
|
+
def initialize(remote, i)
|
11
|
+
@remote = remote
|
12
|
+
@index = i
|
13
|
+
end
|
14
|
+
|
15
|
+
def getter(param, is_string = false)
|
16
|
+
@remote.get_parameter("#{self.cmd}.#{param}", is_string)
|
17
|
+
end
|
18
|
+
|
19
|
+
def setter(param, value)
|
20
|
+
@remote.set_parameter("#{self.cmd}.#{param}", value)
|
21
|
+
end
|
22
|
+
|
23
|
+
def cmd
|
24
|
+
"#{self.identifier}[#{@index}]"
|
25
|
+
end
|
26
|
+
|
27
|
+
def identifier
|
28
|
+
raise 'Called abstract mehod: identifier'
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_multi(param_hash)
|
32
|
+
param_hash.each { |(key, val)| self.send("#{key}=", val) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module Fades
|
37
|
+
def fadeto(target, time)
|
38
|
+
self.setter('FadeTo', "(#{target}, #{time})")
|
39
|
+
sleep(@remote.delay)
|
40
|
+
end
|
41
|
+
|
42
|
+
def fadeby(change, time)
|
43
|
+
self.setter('FadeBy', "(#{change}, #{time})")
|
44
|
+
sleep(@remote.delay)
|
45
|
+
end
|
46
|
+
end
|
data/lib/command.rb
CHANGED
@@ -1,41 +1,41 @@
|
|
1
|
-
require_relative 'meta'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
self.
|
28
|
-
end
|
29
|
-
|
30
|
-
def load(value)
|
31
|
-
raise VMRemoteErrors.new(
|
32
|
-
self.setter(
|
33
|
-
sleep(0.2)
|
34
|
-
end
|
35
|
-
|
36
|
-
def save(value)
|
37
|
-
raise VMRemoteErrors.new(
|
38
|
-
self.setter(
|
39
|
-
sleep(0.2)
|
40
|
-
end
|
41
|
-
end
|
1
|
+
require_relative 'meta'
|
2
|
+
|
3
|
+
class ICommand
|
4
|
+
include Commands_Meta_Functions
|
5
|
+
|
6
|
+
def initialize(remote)
|
7
|
+
@remote = remote
|
8
|
+
end
|
9
|
+
|
10
|
+
def setter(param, value)
|
11
|
+
@remote.set_parameter("#{self.identifier}.#{param}", value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def identifier
|
15
|
+
:command
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Command < ICommand
|
20
|
+
def initialize(remote)
|
21
|
+
super
|
22
|
+
self.make_action_prop :show, :restart, :reset, :shutdown
|
23
|
+
self.make_writer_bool :showvbanchat, :lock
|
24
|
+
end
|
25
|
+
|
26
|
+
def hide
|
27
|
+
self.setter('show', 0)
|
28
|
+
end
|
29
|
+
|
30
|
+
def load(value)
|
31
|
+
raise VMRemoteErrors.new('Expected a string') unless value.is_a? String
|
32
|
+
self.setter('load', value)
|
33
|
+
sleep(0.2)
|
34
|
+
end
|
35
|
+
|
36
|
+
def save(value)
|
37
|
+
raise VMRemoteErrors.new('Expected a string') unless value.is_a? String
|
38
|
+
self.setter('save', value)
|
39
|
+
sleep(0.2)
|
40
|
+
end
|
41
|
+
end
|
data/lib/errors.rb
CHANGED
@@ -1,37 +1,39 @@
|
|
1
|
-
module Errors
|
2
|
-
class VMRemoteErrors < StandardError
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
"Value error, expected
|
32
|
-
|
33
|
-
"Value error, expected #{@range}"
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
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
|
+
"When attempting to run function #{@func} the
|
18
|
+
C API returned value #{@value}. See documentation for further info"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class OutOfBoundsErrors < VMRemoteErrors
|
23
|
+
attr_accessor :range
|
24
|
+
|
25
|
+
def initialize(range)
|
26
|
+
self.range = range
|
27
|
+
end
|
28
|
+
|
29
|
+
def message
|
30
|
+
if @range.kind_of?(Range)
|
31
|
+
"Value error, expected value in range (#{range.first}..#{range.last})"
|
32
|
+
elsif @range.kind_of?(Array)
|
33
|
+
"Value error, expected one of: #{@range}"
|
34
|
+
else
|
35
|
+
"Value error, expected #{@range}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/inst.rb
CHANGED
@@ -1,36 +1,38 @@
|
|
1
|
-
require 'win32/registry'
|
2
|
-
require 'pathname'
|
3
|
-
require_relative 'errors'
|
4
|
-
|
5
|
-
include Errors
|
6
|
-
|
7
|
-
module InstallationFunctions
|
8
|
-
private
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
Win32::Registry::HKEY_LOCAL_MACHINE.open(reg_key + vm_key) do |reg|
|
24
|
-
value = reg[
|
25
|
-
|
26
|
-
pn = Pathname.new(value)
|
27
|
-
return pn.dirname
|
28
|
-
end
|
29
|
-
raise InstallErrors.new('Could not get the Voicemeeter path')
|
30
|
-
end
|
31
|
-
|
32
|
-
def vmr_dll=(value)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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_arch
|
11
|
+
key = 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
|
12
|
+
Win32::Registry::HKEY_LOCAL_MACHINE.open(key) do |reg|
|
13
|
+
os_bits = reg['PROCESSOR_ARCHITECTURE']
|
14
|
+
return 64 if os_bits.include? '64'
|
15
|
+
return 32
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_vmpath(os_bits)
|
20
|
+
vm_key = 'VB:Voicemeeter {17359A74-1236-5467}'
|
21
|
+
reg_key =
|
22
|
+
"Software#{os_bits == 64 ? "\\WOW6432Node" : ''}\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"
|
23
|
+
Win32::Registry::HKEY_LOCAL_MACHINE.open(reg_key + vm_key) do |reg|
|
24
|
+
value = reg['UninstallString']
|
25
|
+
|
26
|
+
pn = Pathname.new(value)
|
27
|
+
return pn.dirname
|
28
|
+
end
|
29
|
+
raise InstallErrors.new('Could not get the Voicemeeter path')
|
30
|
+
end
|
31
|
+
|
32
|
+
def vmr_dll=(value)
|
33
|
+
unless value.file?
|
34
|
+
raise InstallErrors.new('Could not fetch the dll file')
|
35
|
+
end
|
36
|
+
@vmr_dll = value
|
37
|
+
end
|
38
|
+
end
|
data/lib/kinds.rb
ADDED
@@ -0,0 +1,77 @@
|
|
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
|