voicemeeter_api_ruby 4.1.2 → 4.1.5

Sign up to get free protection for your applications and to get access to all the features.
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