voicemeeter_api_ruby 2.0.4 → 4.1.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 +4 -4
- data/CHANGELOG.md +309 -0
- data/LICENSE +21 -0
- data/README.md +439 -0
- data/lib/base.rb +182 -135
- data/lib/bus.rb +80 -16
- data/lib/button.rb +10 -29
- data/lib/cbindings.rb +128 -0
- data/lib/command.rb +17 -22
- data/lib/configs.rb +79 -0
- data/lib/device.rb +24 -0
- data/lib/errors.rb +39 -37
- data/lib/inst.rb +10 -17
- data/lib/iremote.rb +30 -0
- data/lib/kinds.rb +77 -0
- data/lib/meta.rb +96 -66
- data/lib/mixin.rb +11 -0
- data/lib/recorder.rb +10 -35
- data/lib/runvm.rb +19 -8
- data/lib/strip.rb +99 -17
- data/lib/vban.rb +47 -75
- data/lib/version.rb +1 -1
- data/lib/voicemeeter.rb +60 -34
- metadata +25 -27
- data/lib/channel.rb +0 -34
- data/lib/routines.rb +0 -123
data/lib/recorder.rb
CHANGED
@@ -1,45 +1,20 @@
|
|
1
|
+
require_relative 'iremote'
|
1
2
|
require_relative 'meta'
|
2
3
|
|
4
|
+
class Recorder < IRemote
|
5
|
+
'
|
6
|
+
Concrete Recorder class
|
7
|
+
'
|
3
8
|
|
4
|
-
class IRecorder
|
5
|
-
"""
|
6
|
-
Base class for Recorder object
|
7
|
-
"""
|
8
|
-
include Meta_Functions
|
9
|
-
|
10
|
-
attr_accessor :remote
|
11
|
-
|
12
|
-
def initialize(remote)
|
13
|
-
self.remote = remote
|
14
|
-
end
|
15
|
-
|
16
|
-
def getter(param)
|
17
|
-
@remote.get_parameter("#{self.cmd}.#{param}")
|
18
|
-
end
|
19
|
-
|
20
|
-
def setter(param, value)
|
21
|
-
@remote.set_parameter("#{self.cmd}.#{param}", value)
|
22
|
-
end
|
23
|
-
|
24
|
-
def cmd
|
25
|
-
raise NotImplementedError
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
class Recorder < IRecorder
|
31
|
-
"""
|
32
|
-
Concrete class for recorder
|
33
|
-
"""
|
34
9
|
def initialize(remote)
|
35
|
-
super
|
36
|
-
self.
|
10
|
+
super
|
11
|
+
self.make_action_prop :play, :stop, :record, :ff, :rew
|
37
12
|
|
38
|
-
num_A, num_B = remote.layout[:bus].
|
13
|
+
num_A, num_B = remote.kind.layout[:bus].values
|
39
14
|
self.make_accessor_bool *make_channel_props(num_A, num_B)
|
40
15
|
end
|
41
16
|
|
42
|
-
def
|
43
|
-
|
17
|
+
def identifier
|
18
|
+
:recorder
|
44
19
|
end
|
45
20
|
end
|
data/lib/runvm.rb
CHANGED
@@ -1,18 +1,29 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'cbindings'
|
2
|
+
require_relative 'kinds'
|
2
3
|
|
3
|
-
include
|
4
|
+
include CBindings
|
5
|
+
include Kinds
|
4
6
|
|
5
7
|
module RunVM
|
6
|
-
|
8
|
+
'
|
7
9
|
Starts Voicemeeter of the Kind requested.
|
8
|
-
|
9
|
-
def start(
|
10
|
-
|
11
|
-
|
10
|
+
'
|
11
|
+
def start(kind_id)
|
12
|
+
unless Kinds.kind_map.key? kind_id
|
13
|
+
raise VMRemoteErrors.new('Unknown Voicemeeter Kind.')
|
12
14
|
end
|
15
|
+
|
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]
|
22
|
+
end
|
23
|
+
end
|
13
24
|
exes = enums.to_h { |k, v| [k, v.to_i] }
|
14
25
|
|
15
|
-
|
26
|
+
send(:vm_runvm, exes[kind_id])
|
16
27
|
sleep(1)
|
17
28
|
end
|
18
29
|
end
|
data/lib/strip.rb
CHANGED
@@ -1,19 +1,26 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'iremote'
|
2
|
+
require_relative 'mixin'
|
2
3
|
|
4
|
+
class Strip < IRemote
|
5
|
+
'
|
6
|
+
Concrete Strip class
|
7
|
+
'
|
8
|
+
include Channel_Meta_Functions
|
9
|
+
include Fades
|
10
|
+
|
11
|
+
attr_accessor :gainlayer, :levels
|
3
12
|
|
4
|
-
class Strip < IChannel
|
5
|
-
"""
|
6
|
-
Concrete class for Strip objects
|
7
|
-
"""
|
8
13
|
def self.make(remote, layout_strip)
|
9
|
-
|
14
|
+
'
|
10
15
|
Factory function for Strip classes.
|
11
|
-
|
12
|
-
p_in, v_in = layout_strip.
|
16
|
+
'
|
17
|
+
p_in, v_in = layout_strip.values
|
13
18
|
(0...(p_in + v_in)).map do |i|
|
14
|
-
i < p_in
|
15
|
-
|
16
|
-
|
19
|
+
if i < p_in
|
20
|
+
PhysicalStrip.new(remote, i)
|
21
|
+
else
|
22
|
+
VirtualStrip.new(remote, i)
|
23
|
+
end
|
17
24
|
end
|
18
25
|
end
|
19
26
|
|
@@ -21,22 +28,25 @@ class Strip < IChannel
|
|
21
28
|
super
|
22
29
|
self.make_accessor_bool :solo, :mute, :mono
|
23
30
|
self.make_accessor_float :gain
|
31
|
+
self.make_accessor_int :limit
|
24
32
|
self.make_accessor_string :label
|
25
33
|
|
26
|
-
num_A, num_B = remote.layout[:bus].
|
34
|
+
num_A, num_B = remote.kind.layout[:bus].values
|
27
35
|
self.make_accessor_bool *make_channel_props(num_A, num_B)
|
36
|
+
|
37
|
+
@gainlayer = (0...8).map { |j| GainLayer.new(remote, i, j) }
|
38
|
+
@levels = StripLevels.new(remote, i)
|
28
39
|
end
|
29
40
|
|
30
|
-
def
|
31
|
-
|
41
|
+
def identifier
|
42
|
+
"strip[#{@index}]"
|
32
43
|
end
|
33
44
|
end
|
34
45
|
|
35
46
|
class PhysicalStrip < Strip
|
36
47
|
def initialize(remote, i)
|
37
48
|
super
|
38
|
-
self.make_accessor_float :comp, :gate
|
39
|
-
self.make_accessor_int :limit
|
49
|
+
self.make_accessor_float :comp, :gate, :audibility
|
40
50
|
self.make_reader_only :device, :sr
|
41
51
|
end
|
42
52
|
end
|
@@ -44,6 +54,78 @@ end
|
|
44
54
|
class VirtualStrip < Strip
|
45
55
|
def initialize(remote, i)
|
46
56
|
super
|
47
|
-
self.make_accessor_bool :mc
|
57
|
+
self.make_accessor_bool :mc
|
58
|
+
self.make_accessor_int :k
|
59
|
+
self.make_accessor_float :bass, :mid, :treble
|
60
|
+
end
|
61
|
+
|
62
|
+
def appgain(name, gain)
|
63
|
+
self.setter('AppGain', "(\"#{name}\", #{gain})")
|
64
|
+
end
|
65
|
+
|
66
|
+
def appmute(name, mute)
|
67
|
+
self.setter('AppMute', "(\"#{name}\", #{mute ? 1 : 0})")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class GainLayer < IRemote
|
72
|
+
def initialize(remote, i, j)
|
73
|
+
super(remote, i)
|
74
|
+
@j = j
|
48
75
|
end
|
76
|
+
|
77
|
+
def identifier
|
78
|
+
"strip[#{@index}]"
|
79
|
+
end
|
80
|
+
|
81
|
+
def gain
|
82
|
+
self.getter("gainlayer[#{@j}]")
|
83
|
+
end
|
84
|
+
|
85
|
+
def gain=(value)
|
86
|
+
self.setter("gainlayer[#{@j}]", value)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class StripLevels < IRemote
|
91
|
+
def initialize(remote, i)
|
92
|
+
super
|
93
|
+
if i < @remote.p_in
|
94
|
+
@init = i * 2
|
95
|
+
@offset = 2
|
96
|
+
else
|
97
|
+
@init = (@remote.p_in * 2) + ((i - @remote.p_in) * 8)
|
98
|
+
@offset = 8
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def identifier
|
103
|
+
"strip[#{@index}]"
|
104
|
+
end
|
105
|
+
|
106
|
+
def get_level(mode)
|
107
|
+
if @remote.running
|
108
|
+
vals = @remote.cache['strip_level'][@init, @offset]
|
109
|
+
else
|
110
|
+
vals = (@init...@offset).map { |i| get_level(mode, i) }
|
111
|
+
end
|
112
|
+
vals.map { |x| x > 0 ? (20 * Math.log(x, 10)).round(1) : -200.0 }
|
113
|
+
end
|
114
|
+
|
115
|
+
def prefader
|
116
|
+
@remote.strip_mode = 0
|
117
|
+
get_level(0)
|
118
|
+
end
|
119
|
+
|
120
|
+
def postfader
|
121
|
+
@remote.strip_mode = 1
|
122
|
+
get_level(1)
|
123
|
+
end
|
124
|
+
|
125
|
+
def postmute
|
126
|
+
@remote.strip_mode = 2
|
127
|
+
get_level(2)
|
128
|
+
end
|
129
|
+
|
130
|
+
def isdirty?() = @remote._strip_comp[@init, @offset].any?
|
49
131
|
end
|
data/lib/vban.rb
CHANGED
@@ -1,106 +1,78 @@
|
|
1
|
+
require_relative 'iremote'
|
1
2
|
require_relative 'meta'
|
2
3
|
require_relative 'errors'
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
"""
|
5
|
+
class VbanStream < IRemote
|
6
|
+
'
|
7
|
+
A class representing a VBAN stream
|
8
|
+
'
|
9
9
|
include Vban_Meta_Functions
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
self.
|
15
|
-
self.
|
16
|
-
end
|
17
|
-
|
18
|
-
def getter(param, is_string=false)
|
19
|
-
@remote.get_parameter("#{self.cmd}.#{param}", is_string)
|
20
|
-
end
|
21
|
-
|
22
|
-
def setter(param, value)
|
23
|
-
@remote.set_parameter("#{self.cmd}.#{param}", value)
|
11
|
+
def initialize(remote, i)
|
12
|
+
super
|
13
|
+
self.make_accessor_bool :on
|
14
|
+
self.make_accessor_string :name, :ip
|
15
|
+
self.make_accessor_int :quality, :route
|
24
16
|
end
|
25
17
|
|
26
|
-
def
|
27
|
-
|
18
|
+
def identifier
|
19
|
+
"vban.#{self.direction}stream[#{@index}]"
|
28
20
|
end
|
29
21
|
|
30
22
|
def direction
|
31
|
-
raise
|
32
|
-
end
|
33
|
-
|
34
|
-
def set_multi(param_hash)
|
35
|
-
param_hash.each do |(key,val)|
|
36
|
-
self.send("#{key}=", val)
|
37
|
-
end
|
23
|
+
raise 'Called abstract mehod: direction'
|
38
24
|
end
|
39
25
|
end
|
40
26
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
"""
|
46
|
-
def self.make(remote, vban_streams)
|
47
|
-
"
|
48
|
-
Factory function for Vban class.
|
49
|
-
|
50
|
-
Returns a mixin of instream/outstream subclasses
|
51
|
-
"
|
52
|
-
class << self
|
53
|
-
attr_accessor :instream, :outstream, :remote
|
54
|
-
|
55
|
-
def enable
|
56
|
-
@remote.set_parameter("vban.enable", 1)
|
57
|
-
end
|
58
|
-
def disable
|
59
|
-
@remote.set_parameter("vban.enable", 0)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
self.instream =
|
64
|
-
(0...vban_streams[:instream]).map do |i|
|
65
|
-
VbanInstream.new(remote, i)
|
66
|
-
end
|
67
|
-
self.outstream =
|
68
|
-
(0...vban_streams[:outstream]).map do |i|
|
69
|
-
VbanOutstream.new(remote, i)
|
70
|
-
end
|
71
|
-
|
72
|
-
self.remote = remote
|
73
|
-
return self
|
74
|
-
end
|
75
|
-
|
27
|
+
class VbanInstream < VbanStream
|
28
|
+
'
|
29
|
+
A subclass representing a VBAN Instream
|
30
|
+
'
|
76
31
|
def initialize(remote, i)
|
77
32
|
super
|
78
|
-
self.
|
79
|
-
self.make_accessor_string :name, :ip
|
80
|
-
self.make_accessor_int :quality, :route
|
33
|
+
self.make_reader_int :sr, :channel, :bit
|
81
34
|
end
|
82
|
-
end
|
83
35
|
|
36
|
+
def direction
|
37
|
+
:in
|
38
|
+
end
|
39
|
+
end
|
84
40
|
|
85
|
-
class
|
41
|
+
class VbanOutstream < VbanStream
|
42
|
+
'
|
43
|
+
A subclass representing a VBAN Outstream
|
44
|
+
'
|
86
45
|
def initialize(remote, i)
|
87
46
|
super
|
88
|
-
self.
|
47
|
+
self.make_accessor_int :sr, :channel, :bit
|
89
48
|
end
|
90
49
|
|
91
50
|
def direction
|
92
|
-
|
51
|
+
:out
|
93
52
|
end
|
94
53
|
end
|
95
54
|
|
55
|
+
class Vban
|
56
|
+
attr_accessor :instream, :outstream
|
96
57
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
58
|
+
def initialize(remote, vban_streams)
|
59
|
+
'
|
60
|
+
Initializes a Vban class
|
61
|
+
|
62
|
+
Creates an array for each in/out stream
|
63
|
+
'
|
64
|
+
vban_in, vban_out = vban_streams.values
|
65
|
+
self.instream = (0...vban_in).map { |i| VbanInstream.new(remote, i) }
|
66
|
+
self.outstream = (0...vban_out).map { |i| VbanOutstream.new(remote, i) }
|
67
|
+
|
68
|
+
@remote = remote
|
101
69
|
end
|
102
70
|
|
103
|
-
def
|
104
|
-
|
71
|
+
def enable
|
72
|
+
@remote.set_parameter('vban.enable', 1)
|
73
|
+
end
|
74
|
+
|
75
|
+
def disable
|
76
|
+
@remote.set_parameter('vban.enable', 0)
|
105
77
|
end
|
106
78
|
end
|
data/lib/version.rb
CHANGED
data/lib/voicemeeter.rb
CHANGED
@@ -1,60 +1,86 @@
|
|
1
|
-
require_relative '
|
2
|
-
require_relative '
|
3
|
-
|
1
|
+
require_relative 'base'
|
2
|
+
require_relative 'strip'
|
3
|
+
require_relative 'bus'
|
4
|
+
require_relative 'button'
|
5
|
+
require_relative 'vban'
|
6
|
+
require_relative 'command'
|
7
|
+
require_relative 'recorder'
|
8
|
+
require_relative 'device'
|
4
9
|
|
5
10
|
module Voicemeeter
|
6
11
|
include RunVM
|
7
12
|
|
8
13
|
private
|
9
|
-
class Remote < Routines
|
10
|
-
"""
|
11
|
-
Remote class, subclasses Routines
|
12
14
|
|
13
|
-
|
15
|
+
class Remote < Base
|
16
|
+
include Kinds
|
17
|
+
'
|
18
|
+
Remote class, subclasses Base
|
14
19
|
|
15
|
-
|
16
|
-
"""
|
17
|
-
def self.make(**kwargs)
|
18
|
-
"""
|
19
|
-
Factory function that generates a remote class for each kind.
|
20
|
-
|
21
|
-
Returns a hash of Remote classes.
|
22
|
-
"""
|
23
|
-
$kinds_all.to_h do |kind|
|
24
|
-
[kind, Remote.new(kind, **kwargs)]
|
25
|
-
end
|
26
|
-
end
|
20
|
+
Console layout built according to a kind
|
27
21
|
|
28
|
-
|
22
|
+
Offers a run method for resource closure.
|
23
|
+
'
|
24
|
+
def initialize(kind, **kwargs)
|
29
25
|
super
|
30
|
-
self.strip = Strip.make(self,
|
31
|
-
self.bus = Bus.make(self,
|
32
|
-
self.button = MacroButton.make(self,
|
33
|
-
self.vban = Vban.
|
26
|
+
self.strip = Strip.make(self, kind.layout[:strip])
|
27
|
+
self.bus = Bus.make(self, kind.layout[:bus])
|
28
|
+
self.button = MacroButton.make(self, kind.layout[:mb])
|
29
|
+
self.vban = Vban.new(self, kind.layout[:vban])
|
34
30
|
self.command = Command.new(self)
|
35
31
|
self.recorder = Recorder.new(self)
|
32
|
+
self.device = Device.new(self)
|
36
33
|
end
|
37
34
|
|
38
35
|
def run
|
36
|
+
'
|
37
|
+
Handles login/logout
|
38
|
+
|
39
|
+
Starts/stops the observable thread.
|
40
|
+
'
|
41
|
+
login
|
42
|
+
init_thread
|
43
|
+
|
39
44
|
yield if block_given?
|
40
|
-
|
41
45
|
ensure
|
46
|
+
end_thread
|
42
47
|
logout
|
43
48
|
end
|
44
49
|
end
|
45
50
|
|
46
51
|
public
|
47
|
-
def remote(kind, **kwargs)
|
48
|
-
"""
|
49
|
-
Request a Remote for a specific kind and login to the API
|
50
|
-
"""
|
51
|
-
_remotes = Remote.make(**kwargs)
|
52
52
|
|
53
|
-
|
53
|
+
def self.remote(kind_id, **kwargs)
|
54
|
+
'
|
55
|
+
Factory method for remotes.
|
56
|
+
|
57
|
+
Creates a hash of remote classes, one for each kind.
|
58
|
+
|
59
|
+
Handles kind_id request errors.
|
60
|
+
|
61
|
+
Returns a remote class of the kind requested.
|
62
|
+
'
|
63
|
+
_remotes =
|
64
|
+
Kinds.kinds_all.to_h do |kind|
|
65
|
+
[kind.name.to_s, Remote.new(kind, **kwargs)]
|
66
|
+
end
|
67
|
+
|
68
|
+
unless _remotes.key? kind_id
|
69
|
+
raise VMRemoteErrors.new('Unknown Voicemeeter Kind.')
|
70
|
+
end
|
71
|
+
_remotes[kind_id]
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.testing
|
75
|
+
'
|
76
|
+
Returns a random Remote class
|
77
|
+
'
|
78
|
+
unless ENV['RACK_ENV'] == 'dev'
|
79
|
+
raise VMRemoteErrors.new('Not in developer mode')
|
80
|
+
end
|
54
81
|
|
55
|
-
|
56
|
-
return _remotes[kind]
|
82
|
+
Remote.new(Kinds.kinds_all.sample)
|
57
83
|
end
|
58
84
|
|
59
|
-
module_function :
|
85
|
+
module_function :start
|
60
86
|
end
|
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
|
+
version: 4.1.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-
|
11
|
+
date: 2022-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -45,61 +45,59 @@ dependencies:
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 0.3.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
48
|
+
name: observer
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '13.0'
|
54
51
|
- - ">="
|
55
52
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
57
|
-
type: :
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
58
55
|
prerelease: false
|
59
56
|
version_requirements: !ruby/object:Gem::Requirement
|
60
57
|
requirements:
|
61
|
-
- - "~>"
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '13.0'
|
64
58
|
- - ">="
|
65
59
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
60
|
+
version: '0'
|
67
61
|
- !ruby/object:Gem::Dependency
|
68
|
-
name:
|
62
|
+
name: rspec
|
69
63
|
requirement: !ruby/object:Gem::Requirement
|
70
64
|
requirements:
|
71
65
|
- - "~>"
|
72
66
|
- !ruby/object:Gem::Version
|
73
|
-
version: '
|
74
|
-
- - ">="
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: 5.14.4
|
67
|
+
version: '3.4'
|
77
68
|
type: :development
|
78
69
|
prerelease: false
|
79
70
|
version_requirements: !ruby/object:Gem::Requirement
|
80
71
|
requirements:
|
81
72
|
- - "~>"
|
82
73
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
84
|
-
- - ">="
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: 5.14.4
|
74
|
+
version: '3.4'
|
87
75
|
description: A wrapper for Voicemeeter virtual mixer API in Ruby
|
88
76
|
email: code@onyxandiris.online
|
89
77
|
executables: []
|
90
78
|
extensions: []
|
91
|
-
extra_rdoc_files:
|
79
|
+
extra_rdoc_files:
|
80
|
+
- README.md
|
81
|
+
- CHANGELOG.md
|
82
|
+
- LICENSE
|
92
83
|
files:
|
84
|
+
- CHANGELOG.md
|
85
|
+
- LICENSE
|
86
|
+
- README.md
|
93
87
|
- lib/base.rb
|
94
88
|
- lib/bus.rb
|
95
89
|
- lib/button.rb
|
96
|
-
- lib/
|
90
|
+
- lib/cbindings.rb
|
97
91
|
- lib/command.rb
|
92
|
+
- lib/configs.rb
|
93
|
+
- lib/device.rb
|
98
94
|
- lib/errors.rb
|
99
95
|
- lib/inst.rb
|
96
|
+
- lib/iremote.rb
|
97
|
+
- lib/kinds.rb
|
100
98
|
- lib/meta.rb
|
99
|
+
- lib/mixin.rb
|
101
100
|
- lib/recorder.rb
|
102
|
-
- lib/routines.rb
|
103
101
|
- lib/runvm.rb
|
104
102
|
- lib/strip.rb
|
105
103
|
- lib/vban.rb
|
@@ -107,7 +105,7 @@ files:
|
|
107
105
|
- lib/voicemeeter.rb
|
108
106
|
homepage: https://rubygems.org/gems/voicemeeter_api_ruby
|
109
107
|
licenses:
|
110
|
-
-
|
108
|
+
- MIT
|
111
109
|
metadata:
|
112
110
|
source_code_uri: https://github.com/onyx-and-iris/voicemeeter-api-ruby.git
|
113
111
|
post_install_message:
|
@@ -118,14 +116,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
116
|
requirements:
|
119
117
|
- - ">="
|
120
118
|
- !ruby/object:Gem::Version
|
121
|
-
version: '
|
119
|
+
version: '3.0'
|
122
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
121
|
requirements:
|
124
122
|
- - ">="
|
125
123
|
- !ruby/object:Gem::Version
|
126
124
|
version: '0'
|
127
125
|
requirements: []
|
128
|
-
rubygems_version: 3.
|
126
|
+
rubygems_version: 3.3.12
|
129
127
|
signing_key:
|
130
128
|
specification_version: 4
|
131
129
|
summary: Voicemeeter API wrapper
|
data/lib/channel.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require_relative 'meta'
|
2
|
-
require_relative 'errors'
|
3
|
-
|
4
|
-
class IChannel
|
5
|
-
"""
|
6
|
-
Base class for audio channels
|
7
|
-
"""
|
8
|
-
include Channel_Meta_Functions
|
9
|
-
|
10
|
-
attr_accessor :remote, :index
|
11
|
-
|
12
|
-
def initialize(remote, i)
|
13
|
-
self.remote = remote
|
14
|
-
self.index = i
|
15
|
-
end
|
16
|
-
|
17
|
-
def getter(param, is_string=false)
|
18
|
-
@remote.get_parameter("#{self.cmd}.#{param}", is_string)
|
19
|
-
end
|
20
|
-
|
21
|
-
def setter(param, value)
|
22
|
-
@remote.set_parameter("#{self.cmd}.#{param}", value)
|
23
|
-
end
|
24
|
-
|
25
|
-
def cmd
|
26
|
-
raise NotImplementedError
|
27
|
-
end
|
28
|
-
|
29
|
-
def set_multi(param_hash)
|
30
|
-
param_hash.each do |(key,val)|
|
31
|
-
self.send("#{key}=", val)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|