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/bus.rb CHANGED
@@ -1,97 +1,105 @@
1
- require_relative 'iremote'
2
- require_relative 'mixin'
1
+ require_relative "iremote"
3
2
 
4
3
  class Bus < IRemote
5
- '
6
- Concrete Bus class
7
- '
8
- include Channel_Meta_Functions
9
- include Fades
10
-
11
- attr_accessor :mode, :levels
12
-
13
- def self.make(remote, layout_bus)
14
- '
15
- Factory function for Bus classes.
16
- '
17
- p_out, v_out = layout_bus.values
18
- (0...(p_out + v_out)).map do |i|
19
- i < p_out ? PhysicalBus.new(remote, i) : VirtualBus.new(remote, i)
20
- end
21
- end
22
-
23
- def initialize(remote, i)
24
- super
25
- self.make_accessor_bool :mute, :mono, :eq, :sel
26
- self.make_accessor_float :gain
27
- self.make_accessor_string :label
28
-
29
- @mode = BusModes.new(remote, i)
30
- @levels = BusLevels.new(remote, i)
31
- end
32
-
33
- def identifier
34
- "bus[#{@index}]"
4
+ "
5
+ Concrete Bus class
6
+ "
7
+ include Channel_Meta_Functions
8
+
9
+ attr_accessor :mode, :levels
10
+
11
+ def self.make(remote, layout_bus)
12
+ "
13
+ Factory function for Bus classes.
14
+ "
15
+ p_out, v_out = layout_bus.values
16
+ (0...(p_out + v_out)).map do |i|
17
+ i < p_out ? PhysicalBus.new(remote, i) : VirtualBus.new(remote, i)
35
18
  end
19
+ end
20
+
21
+ def initialize(remote, i)
22
+ super
23
+ self.make_accessor_bool :mute, :mono, :eq, :sel
24
+ self.make_accessor_float :gain
25
+ self.make_accessor_string :label
26
+
27
+ @mode = BusModes.new(remote, i)
28
+ @levels = BusLevels.new(remote, i)
29
+ end
30
+
31
+ def identifier
32
+ "bus[#{@index}]"
33
+ end
34
+
35
+ def fadeto(target, time)
36
+ self.setter("FadeTo", "(#{target}, #{time})")
37
+ sleep(@remote.delay)
38
+ end
39
+
40
+ def fadeby(change, time)
41
+ self.setter("FadeBy", "(#{change}, #{time})")
42
+ sleep(@remote.delay)
43
+ end
36
44
  end
37
45
 
38
46
  class PhysicalBus < Bus
39
- def initialize(remote, i)
40
- super
41
- self.make_reader_only :device, :sr
42
- end
47
+ def initialize(remote, i)
48
+ super
49
+ self.make_reader_only :device, :sr
50
+ end
43
51
  end
44
52
 
45
53
  class VirtualBus < Bus
46
54
  end
47
55
 
48
56
  class BusModes < IRemote
49
- include Channel_Meta_Functions
50
-
51
- def initialize(remote, i)
52
- super
53
- self.make_bus_modes :normal,
54
- :amix,
55
- :bmix,
56
- :repeat,
57
- :composite,
58
- :tvmix,
59
- :upmix21,
60
- :upmix41,
61
- :upmix61,
62
- :centeronly,
63
- :lfeonly,
64
- :rearonly
65
- end
66
-
67
- def identifier
68
- "bus[#{@index}].mode"
69
- end
57
+ include Channel_Meta_Functions
58
+
59
+ def initialize(remote, i)
60
+ super
61
+ self.make_bus_modes :normal,
62
+ :amix,
63
+ :bmix,
64
+ :repeat,
65
+ :composite,
66
+ :tvmix,
67
+ :upmix21,
68
+ :upmix41,
69
+ :upmix61,
70
+ :centeronly,
71
+ :lfeonly,
72
+ :rearonly
73
+ end
74
+
75
+ def identifier
76
+ "bus[#{@index}].mode"
77
+ end
70
78
  end
71
79
 
72
80
  class BusLevels < IRemote
73
- def initialize(remote, i)
74
- super
75
- @init = i * 8
76
- @offset = 8
77
- end
78
-
79
- def identifier
80
- "bus[#{@index}]"
81
+ def initialize(remote, i)
82
+ super
83
+ @init = i * 8
84
+ @offset = 8
85
+ end
86
+
87
+ def identifier
88
+ "bus[#{@index}]"
89
+ end
90
+
91
+ def getter(mode)
92
+ if @remote.running
93
+ vals = @remote.cache["bus_level"][@init, @offset]
94
+ else
95
+ vals = (@init...@offset).map { |i| @remote.get_level(mode, i) }
81
96
  end
97
+ vals.map { |x| x > 0 ? (20 * Math.log(x, 10)).round(1) : -200.0 }
98
+ end
82
99
 
83
- def getter(mode)
84
- if @remote.running
85
- vals = @remote.cache['bus_level'][@init, @offset]
86
- else
87
- vals = (@init...@offset).map { |i| @remote.get_level(mode, i) }
88
- end
89
- vals.map { |x| x > 0 ? (20 * Math.log(x, 10)).round(1) : -200.0 }
90
- end
91
-
92
- def all
93
- getter(3)
94
- end
100
+ def all
101
+ getter(3)
102
+ end
95
103
 
96
- def isdirty?() = @remote._bus_comp[@init, @offset].any?
104
+ def isdirty? = @remote._bus_comp[@init, @offset].any?
97
105
  end
data/lib/button.rb CHANGED
@@ -1,23 +1,23 @@
1
- require_relative 'iremote'
2
- require_relative 'meta'
3
-
4
- class MacroButton < IRemote
5
- include MacroButton_Meta_Functions
6
-
7
- def self.make(remote, num_buttons)
8
- (0...num_buttons).map { |i| MacroButton.new(remote, i) }
9
- end
10
-
11
- def initialize(remote, i)
12
- super
13
- self.make_accessor_macrobutton :state, :stateonly, :trigger
14
- end
15
-
16
- def getter(mode)
17
- @remote.get_buttonstatus(@index, mode)
18
- end
19
-
20
- def setter(set, mode)
21
- @remote.set_buttonstatus(@index, set, mode)
22
- end
23
- end
1
+ require_relative "iremote"
2
+ require_relative "meta"
3
+
4
+ class MacroButton < IRemote
5
+ include MacroButton_Meta_Functions
6
+
7
+ def self.make(remote, num_buttons)
8
+ (0...num_buttons).map { |i| MacroButton.new(remote, i) }
9
+ end
10
+
11
+ def initialize(remote, i)
12
+ super
13
+ self.make_accessor_macrobutton :state, :stateonly, :trigger
14
+ end
15
+
16
+ def getter(mode)
17
+ @remote.get_buttonstatus(@index, mode)
18
+ end
19
+
20
+ def setter(set, mode)
21
+ @remote.set_buttonstatus(@index, set, mode)
22
+ end
23
+ end
data/lib/cbindings.rb CHANGED
@@ -1,128 +1,125 @@
1
- require 'ffi'
2
- require_relative 'inst'
1
+ require "ffi"
2
+ require_relative "inst"
3
3
 
4
4
  include InstallationFunctions
5
5
 
6
6
  module CBindings
7
- '
8
- Creates Ruby bindings to the C DLL
9
-
10
- Performs other low level tasks
11
- '
12
- extend FFI::Library
13
-
14
- private
15
-
16
- begin
17
- OS_BITS = FFI::Platform::CPU.downcase == 'x64' ? 64 : 32
18
- VM_PATH = get_vmpath(OS_BITS)
19
- DLL_NAME = "VoicemeeterRemote#{OS_BITS == 64 ? '64' : ''}.dll"
20
-
21
- self.vm_dll = VM_PATH.join(DLL_NAME)
22
- rescue InstallErrors => error
23
- puts "ERROR: #{error.message}"
24
- raise
7
+ "
8
+ Creates Ruby bindings to the C DLL
9
+
10
+ Performs other low level tasks
11
+ "
12
+ extend FFI::Library
13
+
14
+ private
15
+
16
+ begin
17
+ OS_BITS = FFI::Platform::CPU.downcase == "x64" ? 64 : 32
18
+ VM_PATH = get_vmpath(OS_BITS)
19
+ DLL_NAME = "VoicemeeterRemote#{OS_BITS == 64 ? "64" : ""}.dll"
20
+
21
+ self.vm_dll = VM_PATH.join(DLL_NAME)
22
+ rescue InstallErrors => error
23
+ puts "ERROR: #{error.message}"
24
+ raise
25
+ end
26
+
27
+ ffi_lib @vm_dll
28
+ ffi_convention :stdcall
29
+
30
+ attach_function :vm_login, :VBVMR_Login, [], :long
31
+ attach_function :vm_logout, :VBVMR_Logout, [], :long
32
+ attach_function :vm_runvm, :VBVMR_RunVoicemeeter, [:long], :long
33
+ attach_function :vm_vmtype, :VBVMR_GetVoicemeeterType, [:pointer], :long
34
+ attach_function :vm_vmversion, :VBVMR_GetVoicemeeterVersion, [:pointer], :long
35
+
36
+ attach_function :vm_mdirty, :VBVMR_MacroButton_IsDirty, [], :long
37
+ attach_function :vm_get_buttonstatus,
38
+ :VBVMR_MacroButton_GetStatus,
39
+ %i[long pointer long],
40
+ :long
41
+ attach_function :vm_set_buttonstatus,
42
+ :VBVMR_MacroButton_SetStatus,
43
+ %i[long float long],
44
+ :long
45
+
46
+ attach_function :vm_pdirty, :VBVMR_IsParametersDirty, [], :long
47
+ attach_function :vm_get_parameter_float,
48
+ :VBVMR_GetParameterFloat,
49
+ %i[string pointer],
50
+ :long
51
+ attach_function :vm_set_parameter_float,
52
+ :VBVMR_SetParameterFloat,
53
+ %i[string float],
54
+ :long
55
+
56
+ attach_function :vm_get_parameter_string,
57
+ :VBVMR_GetParameterStringA,
58
+ %i[string pointer],
59
+ :long
60
+ attach_function :vm_set_parameter_string,
61
+ :VBVMR_SetParameterStringA,
62
+ %i[string string],
63
+ :long
64
+
65
+ attach_function :vm_set_parameter_multi,
66
+ :VBVMR_SetParameters,
67
+ [:string],
68
+ :long
69
+
70
+ attach_function :vm_get_level, :VBVMR_GetLevel, %i[long long pointer], :long
71
+
72
+ attach_function :vm_get_num_indevices, :VBVMR_Input_GetDeviceNumber, [], :long
73
+ attach_function :vm_get_desc_indevices,
74
+ :VBVMR_Input_GetDeviceDescA,
75
+ %i[long pointer pointer pointer],
76
+ :long
77
+
78
+ attach_function :vm_get_num_outdevices,
79
+ :VBVMR_Output_GetDeviceNumber,
80
+ [],
81
+ :long
82
+ attach_function :vm_get_desc_outdevices,
83
+ :VBVMR_Output_GetDeviceDescA,
84
+ %i[long pointer pointer pointer],
85
+ :long
86
+
87
+ @@cdll =
88
+ lambda { |func, *args| self.retval = [send("vm_#{func}", *args), func] }
89
+
90
+ def clear_polling = while pdirty? || mdirty?; end
91
+
92
+ def polling(func, **kwargs)
93
+ params = {
94
+ "get_parameter" => kwargs[:name],
95
+ "get_buttonstatus" => "mb_#{kwargs[:id]}_#{kwargs[:mode]}"
96
+ }
97
+ return @cache.delete(params[func]) if @cache.key? params[func]
98
+
99
+ clear_polling if @sync
100
+
101
+ yield
102
+ end
103
+
104
+ def retval=(values)
105
+ " Writer validation for CAPI calls "
106
+ retval, func = *values
107
+ unless %i[get_num_indevices get_num_outdevices].include? func
108
+ raise CAPIErrors.new(retval, func) if retval&.nonzero?
25
109
  end
110
+ @retval = retval
111
+ end
26
112
 
27
- ffi_lib @vm_dll
28
- ffi_convention :stdcall
29
-
30
- attach_function :vm_login, :VBVMR_Login, [], :long
31
- attach_function :vm_logout, :VBVMR_Logout, [], :long
32
- attach_function :vm_runvm, :VBVMR_RunVoicemeeter, [:long], :long
33
- attach_function :vm_vmtype, :VBVMR_GetVoicemeeterType, [:pointer], :long
34
- attach_function :vm_vmversion, :VBVMR_GetVoicemeeterVersion, [:pointer], :long
35
-
36
- attach_function :vm_mdirty, :VBVMR_MacroButton_IsDirty, [], :long
37
- attach_function :vm_get_buttonstatus,
38
- :VBVMR_MacroButton_GetStatus,
39
- %i[long pointer long],
40
- :long
41
- attach_function :vm_set_buttonstatus,
42
- :VBVMR_MacroButton_SetStatus,
43
- %i[long float long],
44
- :long
45
-
46
- attach_function :vm_pdirty, :VBVMR_IsParametersDirty, [], :long
47
- attach_function :vm_get_parameter_float,
48
- :VBVMR_GetParameterFloat,
49
- %i[string pointer],
50
- :long
51
- attach_function :vm_set_parameter_float,
52
- :VBVMR_SetParameterFloat,
53
- %i[string float],
54
- :long
55
-
56
- attach_function :vm_get_parameter_string,
57
- :VBVMR_GetParameterStringA,
58
- %i[string pointer],
59
- :long
60
- attach_function :vm_set_parameter_string,
61
- :VBVMR_SetParameterStringA,
62
- %i[string string],
63
- :long
64
-
65
- attach_function :vm_set_parameter_multi,
66
- :VBVMR_SetParameters,
67
- [:string],
68
- :long
69
-
70
- attach_function :vm_get_level,
71
- :VBVMR_GetLevel,
72
- %i[long long pointer],
73
- :long
74
-
75
- attach_function :vm_get_num_indevices,
76
- :VBVMR_Input_GetDeviceNumber, [], :long
77
- attach_function :vm_get_desc_indevices,
78
- :VBVMR_Input_GetDeviceDescA, %i[long pointer pointer pointer],
79
- :long
80
-
81
- attach_function :vm_get_num_outdevices,
82
- :VBVMR_Output_GetDeviceNumber, [], :long
83
- attach_function :vm_get_desc_outdevices,
84
- :VBVMR_Output_GetDeviceDescA, %i[long pointer pointer pointer],
85
- :long
86
-
87
-
88
- @@cdll =
89
- lambda do |func, *args|
90
- self.retval = [send("vm_#{func}", *args), func]
91
- end
92
-
93
- def clear_polling() = while pdirty? || mdirty?; end
94
-
95
- def polling(func, **kwargs)
96
- params = {
97
- 'get_parameter' => kwargs[:name],
98
- 'get_buttonstatus' => "mb_#{kwargs[:id]}_#{kwargs[:mode]}",
99
- }
100
- return @cache.delete(params[func]) if @cache.key? params[func]
101
-
102
- clear_polling if @sync
103
-
104
- yield
105
- end
113
+ public
106
114
 
107
- def retval=(values)
108
- ' Writer validation for CAPI calls '
109
- retval, func = *values
110
- unless [:get_num_indevices, :get_num_outdevices].include? func
111
- raise CAPIErrors.new(retval, func) if retval&.nonzero?
112
- end
113
- @retval = retval
114
- end
115
-
116
- public
115
+ def pdirty? = vm_pdirty&.nonzero?
117
116
 
118
- def pdirty?() = vm_pdirty&.nonzero?
117
+ def mdirty? = vm_mdirty&.nonzero?
119
118
 
120
- def mdirty?() = vm_mdirty&.nonzero?
121
-
122
- def ldirty?
123
- @strip_buf, @bus_buf = _get_levels
124
- return !(
125
- @cache['strip_level'] == @strip_buf && @cache['bus_level'] == @bus_buf
126
- )
127
- end
119
+ def ldirty?
120
+ @strip_buf, @bus_buf = _get_levels
121
+ return(
122
+ !(@cache["strip_level"] == @strip_buf && @cache["bus_level"] == @bus_buf)
123
+ )
124
+ end
128
125
  end
data/lib/command.rb CHANGED
@@ -1,36 +1,36 @@
1
- require_relative 'iremote'
2
- require_relative 'meta'
3
-
4
- class Command < IRemote
5
- include Commands_Meta_Functions
6
-
7
- def initialize(remote)
8
- super
9
- self.make_action_prop :show, :restart, :shutdown
10
- self.make_writer_bool :showvbanchat, :lock
11
- end
12
-
13
- def identifier
14
- :command
15
- end
16
-
17
- def hide
18
- self.setter('show', 0)
19
- end
20
-
21
- def load(value)
22
- raise VMRemoteErrors.new('Expected a string') unless value.is_a? String
23
- self.setter('load', value)
24
- sleep(0.2)
25
- end
26
-
27
- def save(value)
28
- raise VMRemoteErrors.new('Expected a string') unless value.is_a? String
29
- self.setter('save', value)
30
- sleep(0.2)
31
- end
32
-
33
- def reset
34
- @remote.set_config('reset')
35
- end
36
- end
1
+ require_relative "iremote"
2
+ require_relative "meta"
3
+
4
+ class Command < IRemote
5
+ include Commands_Meta_Functions
6
+
7
+ def initialize(remote)
8
+ super
9
+ self.make_action_prop :show, :restart, :shutdown
10
+ self.make_writer_bool :showvbanchat, :lock
11
+ end
12
+
13
+ def identifier
14
+ :command
15
+ end
16
+
17
+ def hide
18
+ self.setter("show", 0)
19
+ end
20
+
21
+ def load(value)
22
+ raise VMRemoteErrors.new("Expected a string") unless value.is_a? String
23
+ self.setter("load", value)
24
+ sleep(0.2)
25
+ end
26
+
27
+ def save(value)
28
+ raise VMRemoteErrors.new("Expected a string") unless value.is_a? String
29
+ self.setter("save", value)
30
+ sleep(0.2)
31
+ end
32
+
33
+ def reset
34
+ @remote.set_config("reset")
35
+ end
36
+ end