voicemeeter_api_ruby 2.0.2 → 2.0.3

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: 5bef8ab40208452163296fb8d4c40654a2a28b98e897d3fc27fc848b78f8ba11
4
- data.tar.gz: 5362e5f27306ba5c311e5dd934ca01dd153747528727e4437e605e5c32063949
3
+ metadata.gz: b3a0e9817ffa5ec8ae524a4af3fe6a64f9f85277a83cb6e39c64f7746006a564
4
+ data.tar.gz: eecdc15368fb025b6632961ab3df850ac505e79de105f472569e6b0678dd96d9
5
5
  SHA512:
6
- metadata.gz: 620076c47a8cad5c8698949369a92d9dede2b498b921f1b4ad3e55fa08cbed66f20190356fa818124521e1f1580348938a241e8bc77a12c0016da3f84a105170
7
- data.tar.gz: 150032337a426731a12f0e012cc9bc7a24572bfe0caaceaee3f89e8fed77a42129e16d5883066f776003c307258fc01c4c925259190e82a6911339a842b81f3e
6
+ metadata.gz: 390dda38c9597c3996d913b3c5c0462307ffd7df102ca5fad2879e76b682104b373ecb5c9b0879911cee20622decfece3f0756082d7d1c85e3ad349ace1a547f
7
+ data.tar.gz: fd2bf7bfb8bd6157f4dc54e22e1636629ae7a934c466752ddc2f3fda23b9abebef31f5002435dcc4d75075fe792e34aad78295296c5910b107a72adad261750b
data/lib/base.rb CHANGED
@@ -65,27 +65,38 @@ module Base
65
65
  end
66
66
  end
67
67
 
68
- def polling(func)
69
- MAX_POLLS.times do
70
- return true if func.include?('param') && self.pdirty
71
- return true if func.include?('macro') && self.mdirty
72
- sleep(DELAY)
68
+ def polling(func, name=nil, id=nil, mode=nil)
69
+ params = {
70
+ "get_parameter" => name,
71
+ "macro_getstatus" => "mb_#{id}_#{mode}"
72
+ }
73
+ MAX_POLLS.times do |i|
74
+ if @cache.key? params[func]
75
+ if func.include?('param') && self.pdirty ||
76
+ func.include?('macro') && self.mdirty
77
+ return @cache.delete(params[func])[0]
78
+ end
79
+ sleep(DELAY)
80
+ break if @cache[params[func]][1] == false && i == 1
81
+ end
73
82
  end
74
- false
83
+
84
+ val = yield
85
+ self.cache.store(params[func], [val, false])
86
+ val
75
87
  end
76
88
 
77
89
  def retval=(values)
78
90
  """ Writer validation for CAPI calls """
79
91
  retval, func = *values
80
92
  raise CAPIErrors.new(retval, func) if retval&.nonzero?
81
-
82
93
  @retval = retval
83
94
  end
84
95
 
85
96
  def run_as(func, *args)
86
97
  val = send('vmr_' + func, *args)
87
98
  self.retval = [val, func]
88
- sleep(DELAY)
99
+ sleep(DELAY) if func.include?('set') && @wait
89
100
  end
90
101
  end
91
102
 
data/lib/button.rb CHANGED
@@ -18,6 +18,12 @@ class IMacroButton
18
18
  def setter(set, mode)
19
19
  @remote.macro_setstatus(@index, set, mode)
20
20
  end
21
+
22
+ def set_multi(param_hash)
23
+ param_hash.each do |(key,val)|
24
+ self.send("#{key}=", val)
25
+ end
26
+ end
21
27
  end
22
28
 
23
29
 
data/lib/channel.rb CHANGED
@@ -22,4 +22,10 @@ class IChannel
22
22
  def cmd
23
23
  raise NotImplementedError
24
24
  end
25
+
26
+ def set_multi(param_hash)
27
+ param_hash.each do |(key,val)|
28
+ self.send("#{key}=", val)
29
+ end
30
+ end
25
31
  end
data/lib/command.rb CHANGED
@@ -23,7 +23,7 @@ end
23
23
  class Command < ICommand
24
24
  def initialize(remote)
25
25
  super
26
- self.make_writer_only :show, :restart, :reset, :shutdown
26
+ self.make_action_prop :show, :restart, :reset, :shutdown
27
27
  self.make_writer_bool :showvbanchat, :lock
28
28
  end
29
29
 
data/lib/meta.rb CHANGED
@@ -225,17 +225,25 @@ end
225
225
 
226
226
  module Commands_Meta_Functions
227
227
  include Meta_Functions
228
+ def make_action_prop(*params)
229
+ params.each do |param|
230
+ define_singleton_method("#{param}") do
231
+ self.setter("#{param}", 1)
232
+ end
233
+ end
234
+ end
235
+
228
236
  def make_writer_bool(*params)
229
237
  params.each do |param|
230
238
  cmds = {
231
239
  :showvbanchat => 'DialogShow.VBANCHAT',
232
240
  }
233
241
  if cmds[param] then val = cmds[param] else val = param end
234
-
242
+
235
243
  opts = [false, true]
236
244
  define_singleton_method("#{param}=") do |value|
237
- raise OutOfBoundsErrors.new(opts[param]) unless opts.include? value
238
- self.setter("#{val}", value ? 1 : 0)
245
+ raise OutOfBoundsErrors.new(opts) unless opts.include? value
246
+ self.setter("#{param}", value ? 1 : 0)
239
247
  end
240
248
  end
241
249
  end
data/lib/routines.rb CHANGED
@@ -19,7 +19,7 @@ class Routines
19
19
  attr_accessor :properties, :layout, :strip, :bus, :button, :vban, :command,
20
20
  :recorder
21
21
 
22
- attr_reader :retval, :cache
22
+ attr_reader :retval, :cache, :wait
23
23
 
24
24
  SIZE = 1
25
25
  BUFF = 512
@@ -27,14 +27,8 @@ class Routines
27
27
  def initialize(kind)
28
28
  define_version(kind)
29
29
 
30
- self.strip = Strip.make(self, @layout[:strip], @layout[:bus])
31
- self.bus = Bus.make(self, @layout[:bus])
32
- self.button = MacroButton.make(self, @layout[:mb])
33
- self.vban = Vban.make(self, @layout[:vban])
34
- self.command = Command.new(self)
35
- self.recorder = Recorder.new(self, @layout[:bus])
36
-
37
30
  self.cache = Hash.new
31
+ @wait = true
38
32
  end
39
33
 
40
34
  def login
@@ -56,19 +50,16 @@ class Routines
56
50
  end
57
51
 
58
52
  def get_parameter(name, is_string=false)
59
- if self.polling(__method__.to_s)
60
- val = @cache.delete(name)
61
- return val
62
- end
63
-
64
- if is_string
65
- c_get = FFI::MemoryPointer.new(:string, BUFF, true)
66
- run_as("get_parameter_string", name, c_get)
67
- c_get.read_string
68
- else
69
- c_get = FFI::MemoryPointer.new(:float, SIZE)
70
- run_as("get_parameter_float", name, c_get)
71
- c_get.read_float.round(1)
53
+ self.polling("get_parameter", name) do
54
+ if is_string
55
+ c_get = FFI::MemoryPointer.new(:string, BUFF, true)
56
+ run_as("get_parameter_string", name, c_get)
57
+ c_get.read_string
58
+ else
59
+ c_get = FFI::MemoryPointer.new(:float, SIZE)
60
+ run_as("get_parameter_float", name, c_get)
61
+ c_get.read_float.round(1)
62
+ end
72
63
  end
73
64
  end
74
65
 
@@ -78,51 +69,47 @@ class Routines
78
69
  else
79
70
  run_as("set_parameter_float", name, value.to_f)
80
71
  end
81
- self.cache.store(name, value)
72
+ self.cache.store(name, [value, true])
82
73
  end
83
74
 
84
75
  def macro_getstatus(id, mode)
85
- if self.polling(__method__.to_s)
86
- val = @cache.delete("mb_#{id}_#{mode}")
87
- return val
76
+ self.polling("macro_getstatus", name=nil, id, mode) do
77
+ c_get = FFI::MemoryPointer.new(:float, SIZE)
78
+ run_as("macro_getstatus", id, c_get, mode)
79
+ c_get.read_float.to_i
88
80
  end
89
-
90
- c_get = FFI::MemoryPointer.new(:float, SIZE)
91
- run_as("macro_getstatus", id, c_get, mode)
92
- c_get.read_float.to_i
93
81
  end
94
82
 
95
83
  def macro_setstatus(id, state, mode)
96
84
  run_as("macro_setstatus", id, state, mode)
97
- self.cache.store("mb_#{id}_#{mode}", state)
85
+ self.cache.store("mb_#{id}_#{mode}", [state, true])
98
86
  end
99
87
 
100
88
  def set_parameter_multi(param_hash)
89
+ @wait = false
101
90
  param_hash.each do |(key,val)|
102
- prop, m2, m3, *remaining = key.to_s.split('_')
103
- if m2.to_i.to_s == m2 then m2 = m2.to_i end
104
- if m3.to_i.to_s == m3 then m3 = m3.to_i end
105
-
106
- param_hash[key].each do |(k,v)|
107
- param = k
108
- value = v
109
-
110
- case prop
111
- when "strip"
112
- self.strip[m2].send("#{param}=", value)
113
- when "bus"
114
- self.bus[m2].send("#{param}=", value)
115
- when "button"
116
- self.button[m2].send("#{param}=", value)
117
- when "vban"
118
- if m2 == "instream"
119
- self.vban.instream[m3].send("#{param}=", value)
120
- else
121
- self.vban.outstream[m3].send("#{param}=", value)
122
- end
91
+ prop, m2, m3, *rem = key.to_s.split('_')
92
+ if m2.to_i.to_s == m2 then m2 = m2.to_i
93
+ elsif m3.to_i.to_s == m3 then m3 = m3.to_i end
94
+
95
+ case prop
96
+ when "strip"
97
+ self.strip[m2].set_multi(val)
98
+ when "bus"
99
+ self.bus[m2].set_multi(val)
100
+ when "button", "mb"
101
+ self.button[m2].set_multi(val)
102
+ when "vban"
103
+ if ["instream", "in"].include? m2
104
+ self.vban.instream[m3].set_multi(val)
105
+ elsif ["outstream", "out"].include? m2
106
+ self.vban.outstream[m3].set_multi(val)
123
107
  end
124
108
  end
125
109
  end
110
+ @wait = true
126
111
  end
127
112
  alias_method "set_multi", :set_parameter_multi
113
+ alias_method "set", :set_parameter
114
+ alias_method "get", :get_parameter
128
115
  end
data/lib/strip.rb CHANGED
@@ -24,6 +24,7 @@ class Strip < IChannel
24
24
  super(remote, i)
25
25
  self.make_accessor_bool :solo, :mute, :mono
26
26
  self.make_accessor_float :gain
27
+ self.make_accessor_string :label
27
28
  self._make_channel_props(num_A, num_B)
28
29
  end
29
30
 
data/lib/vban.rb CHANGED
@@ -27,6 +27,12 @@ class IVban
27
27
  def direction
28
28
  raise NotImplementedError
29
29
  end
30
+
31
+ def set_multi(param_hash)
32
+ param_hash.each do |(key,val)|
33
+ self.send("#{key}=", val)
34
+ end
35
+ end
30
36
  end
31
37
 
32
38
 
@@ -69,6 +75,7 @@ class Vban < IVban
69
75
  end
70
76
  end
71
77
 
78
+
72
79
  class VbanInstream < Vban
73
80
  def initialize(remote, i)
74
81
  super
@@ -80,6 +87,7 @@ class VbanInstream < Vban
80
87
  end
81
88
  end
82
89
 
90
+
83
91
  class VbanOutstream < Vban
84
92
  def initialize(remote, i)
85
93
  super
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Voicemeeter_API_Ruby
2
- VERSION = '2.0.2'
2
+ VERSION = '2.0.3'
3
3
  end
data/lib/voicemeeter.rb CHANGED
@@ -9,12 +9,21 @@ module Voicemeeter
9
9
  end
10
10
  end
11
11
 
12
+ def initialize(kind)
13
+ super
14
+ self.strip = Strip.make(self, @layout[:strip], @layout[:bus])
15
+ self.bus = Bus.make(self, @layout[:bus])
16
+ self.button = MacroButton.make(self, @layout[:mb])
17
+ self.vban = Vban.make(self, @layout[:vban])
18
+ self.command = Command.new(self)
19
+ self.recorder = Recorder.new(self, @layout[:bus])
20
+ end
21
+
12
22
  def run
13
- if block_given?
14
- yield
15
-
16
- logout
17
- end
23
+ yield if block_given?
24
+
25
+ ensure
26
+ logout
18
27
  end
19
28
  end
20
29
 
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: 2.0.2
4
+ version: 2.0.3
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-01-18 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi