voicemeeter_api_ruby 4.1.2 → 4.1.5

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 CHANGED
@@ -1,81 +1,80 @@
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 =
29
- (@p_in...(@p_in + @v_in)).map do |i|
30
- ["[strip_#{i}]"] + @vs_params
31
- end
32
- @vs.map! { |a| a.map { |s| s.gsub('A1 = false', 'A1 = true') } }
33
-
34
- @b =
35
- (0...(@p_out + @v_out)).map { |i| ["[bus_#{i}]"] + @bus_params }
36
-
37
- [@ps + @vs + @b].join("\n")
38
- end
39
- end
40
-
41
- def parser(data)
42
- TOML::Parser.new(data).parsed
43
- end
44
-
45
- def get_configs(kind_id)
46
- file_pattern =
47
- File.join(File.dirname(__dir__), 'configs', "#{kind_id}", '*.toml')
48
-
49
- Dir
50
- .glob(file_pattern)
51
- .to_h do |toml_file|
52
- filename = File.basename(toml_file, '.toml')
53
- puts "loading config #{kind_id}/#{filename} into memory"
54
- [filename, parser(File.read(toml_file))]
55
- end
56
- end
57
-
58
- def loader
59
- if @@configs.empty?
60
- builder = TOMLStrBuilder.new(@kind)
61
- puts 'loading config reset into memory'
62
- @@configs['reset'] = parser(builder.build)
63
- @@configs.merge!(get_configs(@kind.name.to_s))
64
- end
65
- end
66
-
67
- public
68
-
69
- def set_config(value)
70
- loader
71
- unless @@configs.key? value
72
- raise VMRemoteErrors.new("No profile with name #{value} was loaded")
73
- end
74
-
75
- self.send('set_multi', @@configs[value])
76
- puts "config #{@kind.name}/#{value} applied!"
77
- sleep(@delay)
78
- end
79
-
80
- alias_method 'apply_config', :set_config
81
- end
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 CHANGED
@@ -1,24 +1,24 @@
1
- require_relative 'iremote'
2
- require_relative 'meta'
1
+ require_relative "iremote"
2
+ require_relative "meta"
3
3
 
4
4
  class Device
5
- def initialize(remote)
6
- @remote = remote
7
- end
5
+ def initialize(remote)
6
+ @remote = remote
7
+ end
8
8
 
9
- def getter(**kwargs)
10
- return @remote.get_num_devices(kwargs[:direction]) if kwargs[:index].nil?
9
+ def getter(**kwargs)
10
+ return @remote.get_num_devices(kwargs[:direction]) if kwargs[:index].nil?
11
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
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
16
 
17
- def ins() = getter(direction: 'in')
17
+ def ins = getter(direction: "in")
18
18
 
19
- def outs() = getter(direction: 'out')
19
+ def outs = getter(direction: "out")
20
20
 
21
- def input(i) = getter(index: i, direction: 'in')
21
+ def input(i) = getter(index: i, direction: "in")
22
22
 
23
- def output(i) = getter(index: i, direction: 'out')
23
+ def output(i) = getter(index: i, direction: "out")
24
24
  end
data/lib/errors.rb CHANGED
@@ -1,39 +1,41 @@
1
1
  module Errors
2
- class VMRemoteErrors < StandardError
3
- end
2
+ class VMRemoteErrors < StandardError
3
+ end
4
4
 
5
- class InstallErrors < VMRemoteErrors
6
- end
5
+ class InstallErrors < VMRemoteErrors
6
+ end
7
7
 
8
- class CAPIErrors < VMRemoteErrors
9
- attr_accessor :value, :func
8
+ class CAPIErrors < VMRemoteErrors
9
+ attr_accessor :value, :func
10
10
 
11
- def initialize(value, func)
12
- self.value = value
13
- self.func = func
14
- end
11
+ def initialize(value, func)
12
+ self.value = value
13
+ self.func = func
14
+ end
15
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
16
+ def message
17
+ "
18
+ When attempting to run function #{@func} the
19
+ C API returned value #{@value}. See documentation for further info
20
+ "
20
21
  end
22
+ end
21
23
 
22
- class OutOfBoundsErrors < VMRemoteErrors
23
- attr_accessor :range
24
+ class OutOfBoundsErrors < VMRemoteErrors
25
+ attr_accessor :range
24
26
 
25
- def initialize(range)
26
- self.range = range
27
- end
27
+ def initialize(range)
28
+ self.range = range
29
+ end
28
30
 
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
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
38
39
  end
40
+ end
39
41
  end
data/lib/inst.rb CHANGED
@@ -1,29 +1,27 @@
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
- unless value.file?
25
- raise InstallErrors.new('Could not fetch the dll file')
26
- end
27
- @vm_dll = value
28
- end
29
- end
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 CHANGED
@@ -1,30 +1,32 @@
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
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 CHANGED
@@ -1,77 +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
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