voicemeeter_api_ruby 4.2.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d897d4faf2ad7aac9c98689e7dc1b64dac891f610ba1153e46a7c7e97b273815
4
- data.tar.gz: 8f275deec8cec53be8fa49a1c8e8605c6cb06153237e99539938fc2511288c8b
3
+ metadata.gz: 4cc1526b0ea929bc7acecca20df4f497aeaacd1a7cca3549369304dec5599dc7
4
+ data.tar.gz: 8b4acc90968eff552c7b86194b45c513ca3d0fe6e9c1b29ca0a448f67f0fc877
5
5
  SHA512:
6
- metadata.gz: 80dc23b32bb5a398e96d249aac772246ac98b3f5b7b759018724fd0b07fc103a181e1e9caa3438dd62022252205ab21bdb0f5c652f7c686a6f9885e5cbd186f6
7
- data.tar.gz: 83dab1c59de3a07a3441f50de27e883db07be47a6ff5d3134ad0c6a2f49e00ca813d21c94d05b09d820beecbd29f8ef07e84735ede3b9b8bc122ebd267b61e79
6
+ metadata.gz: 8ca033d3cfefdfd1120044cf8a44b105ca29f3eb32ae623cdd91a6b9bad98e2ccf7add3dae67c0407b2ff647eebb070429dfe9b85472ae2daa146ff945f528e9
7
+ data.tar.gz: f2fae61b46e6596337bbb9915d86c9e653cd2e145a3405d4f2ba9a1ac96f6a0be472f8012610aca237911e5935aa22a29ccc41ec646e196d86296d3a0ae15177
data/CHANGELOG.md CHANGED
@@ -9,7 +9,24 @@ Before any major/minor/patch is released all unit tests will be run to verify th
9
9
 
10
10
  ## [Unreleased] - These changes have not been added to RubyGems yet
11
11
 
12
- - [ ] add xy parameters to strip/bus
12
+ - [ ]
13
+
14
+ ## [4.3.0] - 2022-07-29
15
+
16
+ ### Added
17
+
18
+ - Mixin module
19
+ - xy, fx parameters to strip/bus
20
+ - unit tests for xy, fx
21
+ - xy, fx to readme
22
+ - config tests added
23
+ - gemfile to obs example
24
+
25
+ ### Changed
26
+
27
+ - moved gem files into voicemeeter/ dir
28
+ - update obs example
29
+ - using require_relative in case using direct download.
13
30
 
14
31
  ## [4.1.0] - 2022-07-19
15
32
 
data/README.md CHANGED
@@ -98,6 +98,20 @@ The following properties are available.
98
98
  - `bass`: float, from -12.0 to 12.0
99
99
  - `mid`: float, from -12.0 to 12.0
100
100
  - `treble`: float, from -12.0 to 12.0
101
+ - `reverb`: float, from 0.0 to 10.0
102
+ - `delay`: float, from 0.0 to 10.0
103
+ - `fx1`: float, from 0.0 to 10.0
104
+ - `fx2`: float, from 0.0 to 10.0
105
+ - `pan_x`: float, from -0.5 to 0.5
106
+ - `pan_y`: float, from 0.0 to 1.0
107
+ - `color_x`: float, from -0.5 to 0.5
108
+ - `color_y`: float, from 0.0 to 1.0
109
+ - `fx_x`: float, from -0.5 to 0.5
110
+ - `fx_y`: float, from 0.0 to 1.0
111
+ - `postreverb`: boolean
112
+ - `postdelay`: boolean
113
+ - `postfx1`: boolean
114
+ - `postfx2`: boolean
101
115
 
102
116
  example:
103
117
 
@@ -164,6 +178,11 @@ The following properties are available.
164
178
  - `label`: string
165
179
  - `device`: string
166
180
  - `sr`: int
181
+ - `returnreverb`: float, from 0.0 to 10.0
182
+ - `returndelay`: float, from 0.0 to 10.0
183
+ - `returnfx1`: float, from 0.0 to 10.0
184
+ - `returnfx2`: float, from 0.0 to 10.0
185
+ - `monitor`: boolean
167
186
 
168
187
  example:
169
188
 
@@ -1,8 +1,8 @@
1
1
  require "observer"
2
2
 
3
- require "voicemeeter/runvm"
4
- require "voicemeeter/configs"
5
- require "voicemeeter/errors"
3
+ require_relative "runvm"
4
+ require_relative "configs"
5
+ require_relative "errors"
6
6
 
7
7
  module Voicemeeter
8
8
  class Base
@@ -1,4 +1,4 @@
1
- require "voicemeeter/iremote"
1
+ require_relative "iremote"
2
2
 
3
3
  module Voicemeeter
4
4
  class Bus < IRemote
@@ -6,6 +6,8 @@ module Voicemeeter
6
6
  Concrete Bus class
7
7
  "
8
8
  include Channel_Meta_Functions
9
+ include Mixin::Fades
10
+ include Mixin::Return
9
11
 
10
12
  attr_accessor :mode, :levels
11
13
 
@@ -21,7 +23,7 @@ module Voicemeeter
21
23
 
22
24
  def initialize(remote, i)
23
25
  super
24
- self.make_accessor_bool :mute, :mono, :eq, :sel
26
+ self.make_accessor_bool :mute, :mono, :eq, :eq_ab, :sel, :monitor
25
27
  self.make_accessor_float :gain
26
28
  self.make_accessor_string :label
27
29
 
@@ -32,16 +34,6 @@ module Voicemeeter
32
34
  def identifier
33
35
  "bus[#{@index}]"
34
36
  end
35
-
36
- def fadeto(target, time)
37
- self.setter("FadeTo", "(#{target}, #{time})")
38
- sleep(@remote.delay)
39
- end
40
-
41
- def fadeby(change, time)
42
- self.setter("FadeBy", "(#{change}, #{time})")
43
- sleep(@remote.delay)
44
- end
45
37
  end
46
38
 
47
39
  class PhysicalBus < Bus
@@ -1,5 +1,5 @@
1
- require "voicemeeter/iremote"
2
- require "voicemeeter/meta"
1
+ require_relative "iremote"
2
+ require_relative "meta"
3
3
 
4
4
  module Voicemeeter
5
5
  class MacroButton < IRemote
@@ -1,5 +1,5 @@
1
1
  require "ffi"
2
- require "voicemeeter/inst"
2
+ require_relative "inst"
3
3
 
4
4
  module Voicemeeter
5
5
  module CBindings
@@ -85,7 +85,7 @@ module Voicemeeter
85
85
  :long
86
86
 
87
87
  @@cdll =
88
- lambda { |func, *args| self.retval = [send("vm_#{func}", *args), func] }
88
+ lambda { |func, *args| retval = [send("vm_#{func}", *args), func] }
89
89
 
90
90
  def clear_polling = while pdirty? || mdirty?; end
91
91
 
@@ -1,5 +1,5 @@
1
- require "voicemeeter/iremote"
2
- require "voicemeeter/meta"
1
+ require_relative "iremote"
2
+ require_relative "meta"
3
3
 
4
4
  module Voicemeeter
5
5
  class Command < IRemote
@@ -1,5 +1,5 @@
1
- require "voicemeeter/kinds"
2
1
  require "toml"
2
+ require_relative "kinds"
3
3
 
4
4
  module Voicemeeter
5
5
  module Configs
@@ -1,5 +1,5 @@
1
- require "voicemeeter/iremote"
2
- require "voicemeeter/meta"
1
+ require_relative "iremote"
2
+ require_relative "meta"
3
3
 
4
4
  module Voicemeeter
5
5
  class Device
@@ -1,6 +1,6 @@
1
1
  require "win32/registry"
2
2
  require "pathname"
3
- require "voicemeeter/errors"
3
+ require_relative "errors"
4
4
 
5
5
  module Voicemeeter
6
6
  module InstallationFunctions
@@ -1,5 +1,5 @@
1
- require "voicemeeter/meta"
2
- require "voicemeeter/errors"
1
+ require_relative "meta"
2
+ require_relative "errors"
3
3
 
4
4
  module Voicemeeter
5
5
  class IRemote
@@ -1,77 +1,79 @@
1
- module Kinds
2
- "
3
- A Kind struct for each version of Voicemeeter
4
- "
5
- attr_reader :kind_map, :kinds_all
1
+ module Voicemeeter
2
+ module Kinds
3
+ "
4
+ A Kind struct for each version of Voicemeeter
5
+ "
6
+ attr_reader :kind_map, :kinds_all
6
7
 
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
- )
8
+ Kind = Struct.new(:name, :layout)
9
+ basic =
10
+ Kind.new(
11
+ "basic",
12
+ {
13
+ strip: {
14
+ p_in: 2,
15
+ v_in: 1
16
+ },
17
+ bus: {
18
+ p_out: 1,
19
+ v_out: 1
20
+ },
21
+ vban: {
22
+ instream: 4,
23
+ outstream: 4
24
+ },
25
+ mb: 80
26
+ }
27
+ )
27
28
 
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
- )
29
+ banana =
30
+ Kind.new(
31
+ "banana",
32
+ {
33
+ strip: {
34
+ p_in: 3,
35
+ v_in: 2
36
+ },
37
+ bus: {
38
+ p_out: 3,
39
+ v_out: 2
40
+ },
41
+ vban: {
42
+ instream: 8,
43
+ outstream: 8
44
+ },
45
+ mb: 80
46
+ }
47
+ )
47
48
 
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
- )
49
+ potato =
50
+ Kind.new(
51
+ "potato",
52
+ {
53
+ strip: {
54
+ p_in: 5,
55
+ v_in: 3
56
+ },
57
+ bus: {
58
+ p_out: 5,
59
+ v_out: 3
60
+ },
61
+ vban: {
62
+ instream: 8,
63
+ outstream: 8
64
+ },
65
+ mb: 80
66
+ }
67
+ )
67
68
 
68
- @kind_map = [basic, banana, potato].to_h { |kind| [kind.name, kind] }
69
+ @kind_map = [basic, banana, potato].to_h { |kind| [kind.name, kind] }
69
70
 
70
- def get_kind(kind_id)
71
- @kind_map[kind_id]
72
- end
71
+ def get_kind(kind_id)
72
+ @kind_map[kind_id]
73
+ end
73
74
 
74
- @kinds_all = @kind_map.values
75
+ @kinds_all = @kind_map.values
75
76
 
76
- module_function :get_kind
77
+ module_function :get_kind, :kind_map, :kinds_all
78
+ end
77
79
  end
@@ -1,252 +1,254 @@
1
- require "voicemeeter/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}\""
1
+ require_relative "errors"
2
+
3
+ module Voicemeeter
4
+ module Conversions
5
+ module_function
6
+
7
+ def Boolean(value)
8
+ case value
9
+ when true, 1
10
+ true
11
+ when false, nil, 0
12
+ false
13
+ else
14
+ raise ArgumentError, "invalid value for Boolean(): \"#{value.inspect}\""
15
+ end
14
16
  end
15
17
  end
16
- end
17
18
 
18
- module Meta_Functions
19
- private
19
+ module Meta_Functions
20
+ private
20
21
 
21
- include Conversions
22
+ include Conversions
22
23
 
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
24
+ def make_accessor_bool(*params)
25
+ params.each do |param|
26
+ define_singleton_method("#{param}") do
27
+ return !(self.getter("#{param}")).zero?
28
+ end
28
29
 
29
- define_singleton_method("#{param}=") do |value|
30
- self.setter("#{param}", Boolean(value) ? 1 : 0)
30
+ define_singleton_method("#{param}=") do |value|
31
+ self.setter("#{param}", Boolean(value) ? 1 : 0)
32
+ end
31
33
  end
32
34
  end
33
- end
34
35
 
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
36
+ def make_accessor_int(*params)
37
+ params.each do |param|
38
+ define_singleton_method("#{param}") do
39
+ return self.getter("#{param}").to_i
40
+ end
40
41
 
41
- define_singleton_method("#{param}=") do |value|
42
- self.setter("#{param}", value)
42
+ define_singleton_method("#{param}=") do |value|
43
+ self.setter("#{param}", value)
44
+ end
43
45
  end
44
46
  end
45
- end
46
47
 
47
- def make_accessor_float(*params)
48
- params.each do |param|
49
- define_singleton_method("#{param}") { return self.getter("#{param}") }
48
+ def make_accessor_float(*params)
49
+ params.each do |param|
50
+ define_singleton_method("#{param}") { return self.getter("#{param}") }
50
51
 
51
- define_singleton_method("#{param}=") do |value|
52
- self.setter("#{param}", value)
52
+ define_singleton_method("#{param}=") do |value|
53
+ self.setter("#{param}", value)
54
+ end
53
55
  end
54
56
  end
55
- end
56
57
 
57
- def make_accessor_string(*params)
58
- params.each do |param|
59
- define_singleton_method("#{param}") do
60
- return self.getter("#{param}", true)
61
- end
58
+ def make_accessor_string(*params)
59
+ params.each do |param|
60
+ define_singleton_method("#{param}") do
61
+ return self.getter("#{param}", true)
62
+ end
62
63
 
63
- define_singleton_method("#{param}=") do |value|
64
- self.setter("#{param}", value)
64
+ define_singleton_method("#{param}=") do |value|
65
+ self.setter("#{param}", value)
66
+ end
65
67
  end
66
68
  end
67
- end
68
69
 
69
- def make_reader_only(*params)
70
- params.each do |param|
71
- define_singleton_method("#{param}") { return self.getter("#{param}") }
70
+ def make_reader_only(*params)
71
+ params.each do |param|
72
+ define_singleton_method("#{param}") { return self.getter("#{param}") }
73
+ end
72
74
  end
73
- end
74
75
 
75
- def make_writer_only(*params)
76
- params.each do |param|
77
- define_singleton_method("#{param}=") do |value = 1|
78
- self.setter("#{param}", value)
76
+ def make_writer_only(*params)
77
+ params.each do |param|
78
+ define_singleton_method("#{param}=") do |value = 1|
79
+ self.setter("#{param}", value)
80
+ end
79
81
  end
80
82
  end
81
- end
82
83
 
83
- def make_channel_props(num_A, num_B)
84
- (1..(num_A + num_B)).map { |i| i <= num_A ? "A#{i}" : "B#{i - num_A}" }
85
- end
84
+ def make_channel_props(num_A, num_B)
85
+ (1..(num_A + num_B)).map { |i| i <= num_A ? "A#{i}" : "B#{i - num_A}" }
86
+ end
86
87
 
87
- def make_action_prop(*params)
88
- params.each do |param|
89
- define_singleton_method("#{param}") { self.setter("#{param}", 1) }
88
+ def make_action_prop(*params)
89
+ params.each do |param|
90
+ define_singleton_method("#{param}") { self.setter("#{param}", 1) }
91
+ end
90
92
  end
91
93
  end
92
- end
93
94
 
94
- module Channel_Meta_Functions
95
- private
95
+ module Channel_Meta_Functions
96
+ private
96
97
 
97
- include Meta_Functions
98
+ include Meta_Functions
98
99
 
99
- def make_accessor_bool(*params)
100
- params.each do |param|
101
- cmds = { eq: "EQ.on" }
102
- if cmds.key? param
103
- cmd = cmds[param]
104
- else
105
- cmd = param
106
- end
100
+ def make_accessor_bool(*params)
101
+ params.each do |param|
102
+ cmds = { eq: "EQ.on", eq_ab: "EQ.ab" }
103
+ if cmds.key? param
104
+ cmd = cmds[param]
105
+ else
106
+ cmd = param
107
+ end
107
108
 
108
- define_singleton_method("#{param}") do
109
- return !(self.getter("#{cmd}")).zero?
110
- end
109
+ define_singleton_method("#{param}") do
110
+ return !(self.getter("#{cmd}")).zero?
111
+ end
111
112
 
112
- define_singleton_method("#{param}=") do |value|
113
- self.setter("#{cmd}", Boolean(value) ? 1 : 0)
113
+ define_singleton_method("#{param}=") do |value|
114
+ self.setter("#{cmd}", Boolean(value) ? 1 : 0)
115
+ end
114
116
  end
115
117
  end
116
- end
117
118
 
118
- def make_reader_only(*params)
119
- params.each do |param|
120
- cmds = { device: "device.name", sr: "device.sr" }
121
- if cmds.key? param
122
- cmd = cmds[param]
123
- else
124
- cmd = param
125
- end
119
+ def make_reader_only(*params)
120
+ params.each do |param|
121
+ cmds = { device: "device.name", sr: "device.sr" }
122
+ if cmds.key? param
123
+ cmd = cmds[param]
124
+ else
125
+ cmd = param
126
+ end
126
127
 
127
- define_singleton_method("#{param}") do
128
- case param
129
- when :device
130
- return self.getter("#{cmd}", true)
131
- when :sr
132
- return self.getter("#{cmd}").to_i
128
+ define_singleton_method("#{param}") do
129
+ case param
130
+ when :device
131
+ return self.getter("#{cmd}", true)
132
+ when :sr
133
+ return self.getter("#{cmd}").to_i
134
+ end
133
135
  end
134
136
  end
135
137
  end
136
- end
137
138
 
138
- def make_bus_modes(*params)
139
- params.each do |param|
140
- define_singleton_method("#{param}") do
141
- @remote.clear_polling
142
- return !(self.getter("#{param}")).zero?
143
- end
139
+ def make_bus_modes(*params)
140
+ params.each do |param|
141
+ define_singleton_method("#{param}") do
142
+ @remote.clear_polling
143
+ return !(self.getter("#{param}")).zero?
144
+ end
144
145
 
145
- define_singleton_method("#{param}=") do |value|
146
- self.setter("#{param}", Boolean(value) ? 1 : 0)
146
+ define_singleton_method("#{param}=") do |value|
147
+ self.setter("#{param}", Boolean(value) ? 1 : 0)
148
+ end
147
149
  end
148
150
  end
149
151
  end
150
- end
151
152
 
152
- module Vban_Meta_Functions
153
- private
153
+ module Vban_Meta_Functions
154
+ private
154
155
 
155
- include Meta_Functions
156
+ include Meta_Functions
156
157
 
157
- def make_reader_int(*params)
158
- params.each do |param|
159
- define_singleton_method("#{param}") do
160
- case param
161
- when :bit
162
- return self.getter("#{param}").to_i == 1 ? 16 : 24
163
- else
164
- return self.getter("#{param}").to_i
158
+ def make_reader_int(*params)
159
+ params.each do |param|
160
+ define_singleton_method("#{param}") do
161
+ case param
162
+ when :bit
163
+ return self.getter("#{param}").to_i == 1 ? 16 : 24
164
+ else
165
+ return self.getter("#{param}").to_i
166
+ end
165
167
  end
166
168
  end
167
169
  end
168
- end
169
170
 
170
- def make_accessor_int(*params)
171
- params.each do |param|
172
- define_singleton_method("#{param}") do
173
- case param
174
- when :bit
175
- return self.getter("#{param}").to_i == 1 ? 16 : 24
176
- else
177
- return self.getter("#{param}").to_i
171
+ def make_accessor_int(*params)
172
+ params.each do |param|
173
+ define_singleton_method("#{param}") do
174
+ case param
175
+ when :bit
176
+ return self.getter("#{param}").to_i == 1 ? 16 : 24
177
+ else
178
+ return self.getter("#{param}").to_i
179
+ end
178
180
  end
179
- end
180
181
 
181
- opts = {
182
- sr: [
183
- 11_025,
184
- 16_000,
185
- 22_050,
186
- 24_000,
187
- 32_000,
188
- 44_100,
189
- 48_000,
190
- 64_000,
191
- 88_200,
192
- 96_000
193
- ],
194
- channel: (1..8),
195
- bit: [16, 24],
196
- quality: (0..4),
197
- route: (0..8)
198
- }
199
-
200
- define_singleton_method("#{param}=") do |value|
201
- unless opts[param].member? value
202
- raise OutOfBoundsErrors.new(opts[param])
203
- end
204
- case param
205
- when :bit
206
- self.setter("#{param}", value == 16 ? 1 : 2)
207
- else
208
- self.setter("#{param}", value)
182
+ opts = {
183
+ sr: [
184
+ 11_025,
185
+ 16_000,
186
+ 22_050,
187
+ 24_000,
188
+ 32_000,
189
+ 44_100,
190
+ 48_000,
191
+ 64_000,
192
+ 88_200,
193
+ 96_000
194
+ ],
195
+ channel: (1..8),
196
+ bit: [16, 24],
197
+ quality: (0..4),
198
+ route: (0..8)
199
+ }
200
+
201
+ define_singleton_method("#{param}=") do |value|
202
+ unless opts[param].member? value
203
+ raise OutOfBoundsErrors.new(opts[param])
204
+ end
205
+ case param
206
+ when :bit
207
+ self.setter("#{param}", value == 16 ? 1 : 2)
208
+ else
209
+ self.setter("#{param}", value)
210
+ end
209
211
  end
210
212
  end
211
213
  end
212
214
  end
213
- end
214
215
 
215
- module MacroButton_Meta_Functions
216
- private
216
+ module MacroButton_Meta_Functions
217
+ private
217
218
 
218
- include Conversions
219
+ include Conversions
219
220
 
220
- def make_accessor_macrobutton(*params)
221
- params.each do |param|
222
- mode = { state: 1, stateonly: 2, trigger: 3 }
221
+ def make_accessor_macrobutton(*params)
222
+ params.each do |param|
223
+ mode = { state: 1, stateonly: 2, trigger: 3 }
223
224
 
224
- define_singleton_method("#{param}") do
225
- return !(self.getter(mode[param])).zero?
226
- end
225
+ define_singleton_method("#{param}") do
226
+ return !(self.getter(mode[param])).zero?
227
+ end
227
228
 
228
- define_singleton_method("#{param}=") do |value|
229
- self.setter(Boolean(value) ? 1 : 0, mode[param])
229
+ define_singleton_method("#{param}=") do |value|
230
+ self.setter(Boolean(value) ? 1 : 0, mode[param])
231
+ end
230
232
  end
231
233
  end
232
234
  end
233
- end
234
235
 
235
- module Commands_Meta_Functions
236
- private
236
+ module Commands_Meta_Functions
237
+ private
237
238
 
238
- include Meta_Functions
239
- def make_writer_bool(*params)
240
- params.each do |param|
241
- cmds = { showvbanchat: "DialogShow.VBANCHAT" }
242
- if cmds.key? param
243
- cmd = cmds[param]
244
- else
245
- cmd = param
246
- end
239
+ include Meta_Functions
240
+ def make_writer_bool(*params)
241
+ params.each do |param|
242
+ cmds = { showvbanchat: "DialogShow.VBANCHAT" }
243
+ if cmds.key? param
244
+ cmd = cmds[param]
245
+ else
246
+ cmd = param
247
+ end
247
248
 
248
- define_singleton_method("#{param}=") do |value|
249
- self.setter("#{cmd}", Boolean(value) ? 1 : 0)
249
+ define_singleton_method("#{param}=") do |value|
250
+ self.setter("#{cmd}", Boolean(value) ? 1 : 0)
251
+ end
250
252
  end
251
253
  end
252
254
  end
@@ -0,0 +1,61 @@
1
+ module Voicemeeter
2
+ module Mixin
3
+ module Fades
4
+ def fadeto(target, time)
5
+ self.setter("FadeTo", "(#{target}, #{time})")
6
+ sleep(@remote.delay)
7
+ end
8
+
9
+ def fadeby(change, time)
10
+ self.setter("FadeBy", "(#{change}, #{time})")
11
+ sleep(@remote.delay)
12
+ end
13
+ end
14
+
15
+ module Apps
16
+ def appgain(name, gain)
17
+ self.setter("AppGain", "(\"#{name}\", #{gain})")
18
+ end
19
+
20
+ def appmute(name, mute)
21
+ self.setter("AppMute", "(\"#{name}\", #{mute ? 1 : 0})")
22
+ end
23
+ end
24
+
25
+ module Xy
26
+ include Channel_Meta_Functions
27
+
28
+ def initialize(remote, i)
29
+ super
30
+ self.make_accessor_float :pan_x,
31
+ :pan_y,
32
+ :color_x,
33
+ :color_y,
34
+ :fx_x,
35
+ :fx_y
36
+ end
37
+ end
38
+
39
+ module Fx
40
+ include Channel_Meta_Functions
41
+
42
+ def initialize(remote, i)
43
+ super
44
+ self.make_accessor_float :reverb, :delay, :fx1, :fx2
45
+ self.make_accessor_bool :postreverb, :postdelay, :postfx1, :postfx2
46
+ end
47
+ end
48
+
49
+ module Return
50
+ include Channel_Meta_Functions
51
+
52
+ def initialize(remote, i)
53
+ super
54
+ self.make_accessor_float :returnreverb,
55
+ :returndelay,
56
+ :returnfx1,
57
+ :returnfx2
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,5 +1,5 @@
1
- require "voicemeeter/iremote"
2
- require "voicemeeter/meta"
1
+ require_relative "iremote"
2
+ require_relative "meta"
3
3
 
4
4
  module Voicemeeter
5
5
  class Recorder < IRemote
@@ -1,29 +1,31 @@
1
- require "voicemeeter/cbindings"
2
- require "voicemeeter/kinds"
1
+ require_relative "cbindings"
2
+ require_relative "kinds"
3
3
 
4
- include Voicemeeter::CBindings
5
- include Kinds
4
+ module Voicemeeter
5
+ module RunVM
6
+ "
7
+ Starts Voicemeeter of the Kind requested.
8
+ "
9
+ include CBindings
10
+ include Kinds
6
11
 
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
12
+ def start(kind_id)
13
+ unless Kinds.kind_map.key? kind_id
14
+ raise VMRemoteErrors.new("Unknown Voicemeeter Kind.")
15
+ end
15
16
 
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]
17
+ enums =
18
+ Kinds.kinds_all.map.with_index do |kind, i|
19
+ if CBindings::OS_BITS == 64 && kind.name.to_s == "potato"
20
+ [kind.name.to_s, i + 4]
21
+ else
22
+ [kind.name.to_s, i + 1]
23
+ end
22
24
  end
23
- end
24
- exes = enums.to_h { |k, v| [k, v.to_i] }
25
+ exes = enums.to_h { |k, v| [k, v.to_i] }
25
26
 
26
- send(:vm_runvm, exes[kind_id])
27
- sleep(1)
27
+ CBindings.vm_runvm(exes[kind_id])
28
+ sleep(1)
29
+ end
28
30
  end
29
31
  end
@@ -1,4 +1,5 @@
1
- require "voicemeeter/iremote"
1
+ require_relative "iremote"
2
+ require_relative "mixin"
2
3
 
3
4
  module Voicemeeter
4
5
  class Strip < IRemote
@@ -6,6 +7,7 @@ module Voicemeeter
6
7
  Concrete Strip class
7
8
  "
8
9
  include Channel_Meta_Functions
10
+ include Mixin::Fades
9
11
 
10
12
  attr_accessor :gainlayer, :levels
11
13
 
@@ -36,19 +38,12 @@ module Voicemeeter
36
38
  def identifier
37
39
  "strip[#{@index}]"
38
40
  end
39
-
40
- def fadeto(target, time)
41
- self.setter("FadeTo", "(#{target}, #{time})")
42
- sleep(@remote.delay)
43
- end
44
-
45
- def fadeby(change, time)
46
- self.setter("FadeBy", "(#{change}, #{time})")
47
- sleep(@remote.delay)
48
- end
49
41
  end
50
42
 
51
43
  class PhysicalStrip < Strip
44
+ include Mixin::Xy
45
+ include Mixin::Fx
46
+
52
47
  def initialize(remote, i)
53
48
  super
54
49
  self.make_accessor_float :comp, :gate, :audibility
@@ -57,20 +52,14 @@ module Voicemeeter
57
52
  end
58
53
 
59
54
  class VirtualStrip < Strip
55
+ include Mixin::Apps
56
+
60
57
  def initialize(remote, i)
61
58
  super
62
59
  self.make_accessor_bool :mc
63
60
  self.make_accessor_int :k
64
61
  self.make_accessor_float :bass, :mid, :treble
65
62
  end
66
-
67
- def appgain(name, gain)
68
- self.setter("AppGain", "(\"#{name}\", #{gain})")
69
- end
70
-
71
- def appmute(name, mute)
72
- self.setter("AppMute", "(\"#{name}\", #{mute ? 1 : 0})")
73
- end
74
63
  end
75
64
 
76
65
  class GainLayer < IRemote
@@ -1,6 +1,6 @@
1
- require "voicemeeter/iremote"
2
- require "voicemeeter/meta"
3
- require "voicemeeter/errors"
1
+ require_relative "iremote"
2
+ require_relative "meta"
3
+ require_relative "errors"
4
4
 
5
5
  module Voicemeeter
6
6
  class VbanStream < IRemote
@@ -1,3 +1,25 @@
1
- module Voicemeeter_API_Ruby
2
- VERSION = "4.2.0"
1
+ module Voicemeeter
2
+ module Version
3
+ module_function
4
+
5
+ def major
6
+ 4
7
+ end
8
+
9
+ def minor
10
+ 3
11
+ end
12
+
13
+ def patch
14
+ 0
15
+ end
16
+
17
+ def to_a
18
+ [major, minor, patch]
19
+ end
20
+
21
+ def to_s
22
+ to_a.join(".")
23
+ end
24
+ end
3
25
  end
data/lib/voicemeeter.rb CHANGED
@@ -1,11 +1,11 @@
1
- require "voicemeeter/base"
2
- require "voicemeeter/strip"
3
- require "voicemeeter/bus"
4
- require "voicemeeter/button"
5
- require "voicemeeter/vban"
6
- require "voicemeeter/command"
7
- require "voicemeeter/recorder"
8
- require "voicemeeter/device"
1
+ require_relative "voicemeeter/base"
2
+ require_relative "voicemeeter/strip"
3
+ require_relative "voicemeeter/bus"
4
+ require_relative "voicemeeter/button"
5
+ require_relative "voicemeeter/vban"
6
+ require_relative "voicemeeter/command"
7
+ require_relative "voicemeeter/recorder"
8
+ require_relative "voicemeeter/device"
9
9
 
10
10
  module Voicemeeter
11
11
  include RunVM
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: voicemeeter_api_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - onyx_online
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-23 00:00:00.000000000 Z
11
+ date: 2022-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -97,6 +97,7 @@ files:
97
97
  - lib/voicemeeter/iremote.rb
98
98
  - lib/voicemeeter/kinds.rb
99
99
  - lib/voicemeeter/meta.rb
100
+ - lib/voicemeeter/mixin.rb
100
101
  - lib/voicemeeter/recorder.rb
101
102
  - lib/voicemeeter/runvm.rb
102
103
  - lib/voicemeeter/strip.rb