voicemeeter_api_ruby 3.0.0 → 4.0.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 +14 -7
- data/README.md +177 -72
- data/lib/base.rb +85 -27
- data/lib/bus.rb +14 -10
- data/lib/button.rb +8 -21
- data/lib/cbindings.rb +45 -26
- data/lib/command.rb +9 -14
- data/lib/configs.rb +79 -0
- data/lib/device.rb +24 -0
- data/lib/inst.rb +2 -11
- data/lib/{channel.rb → iremote.rb} +7 -11
- data/lib/meta.rb +1 -1
- data/lib/recorder.rb +3 -20
- data/lib/runvm.rb +4 -4
- data/lib/strip.rb +14 -8
- data/lib/vban.rb +35 -60
- data/lib/version.rb +1 -1
- data/lib/voicemeeter.rb +31 -18
- metadata +20 -5
- data/lib/profiles.rb +0 -28
data/lib/vban.rb
CHANGED
@@ -1,67 +1,13 @@
|
|
1
|
+
require_relative 'iremote'
|
1
2
|
require_relative 'meta'
|
2
3
|
require_relative 'errors'
|
3
4
|
|
4
|
-
class
|
5
|
+
class VbanStream < IRemote
|
5
6
|
'
|
6
|
-
|
7
|
+
A class representing a VBAN stream
|
7
8
|
'
|
8
9
|
include Vban_Meta_Functions
|
9
10
|
|
10
|
-
def initialize(remote, index)
|
11
|
-
@remote = remote
|
12
|
-
@index = index
|
13
|
-
end
|
14
|
-
|
15
|
-
def getter(param, is_string = false)
|
16
|
-
@remote.get_parameter("#{self.cmd}.#{param}", is_string)
|
17
|
-
end
|
18
|
-
|
19
|
-
def setter(param, value)
|
20
|
-
@remote.set_parameter("#{self.cmd}.#{param}", value)
|
21
|
-
end
|
22
|
-
|
23
|
-
def cmd
|
24
|
-
"#{self.identifier}.#{self.direction}stream[#{@index}]"
|
25
|
-
end
|
26
|
-
|
27
|
-
def direction
|
28
|
-
raise 'Called abstract mehod: direction'
|
29
|
-
end
|
30
|
-
|
31
|
-
def set_multi(param_hash)
|
32
|
-
param_hash.each { |(key, val)| self.send("#{key}=", val) }
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
class Vban < IVban
|
37
|
-
'
|
38
|
-
Concrete Vban class
|
39
|
-
'
|
40
|
-
def self.make(remote, vban_streams)
|
41
|
-
'
|
42
|
-
Factory function for Vban class.
|
43
|
-
|
44
|
-
Returns a mixin of instream/outstream subclasses
|
45
|
-
'
|
46
|
-
class << self
|
47
|
-
attr_accessor :instream, :outstream, :remote
|
48
|
-
|
49
|
-
def enable
|
50
|
-
@remote.set_parameter('vban.enable', 1)
|
51
|
-
end
|
52
|
-
def disable
|
53
|
-
@remote.set_parameter('vban.enable', 0)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
vban_in, vban_out = vban_streams.values
|
58
|
-
self.instream = (0...vban_in).map { |i| VbanInstream.new(remote, i) }
|
59
|
-
self.outstream = (0...vban_out).map { |i| VbanOutstream.new(remote, i) }
|
60
|
-
|
61
|
-
self.remote = remote
|
62
|
-
return self
|
63
|
-
end
|
64
|
-
|
65
11
|
def initialize(remote, i)
|
66
12
|
super
|
67
13
|
self.make_accessor_bool :on
|
@@ -70,11 +16,15 @@ class Vban < IVban
|
|
70
16
|
end
|
71
17
|
|
72
18
|
def identifier
|
73
|
-
|
19
|
+
"vban.#{self.direction}stream[#{@index}]"
|
20
|
+
end
|
21
|
+
|
22
|
+
def direction
|
23
|
+
raise 'Called abstract mehod: direction'
|
74
24
|
end
|
75
25
|
end
|
76
26
|
|
77
|
-
class VbanInstream <
|
27
|
+
class VbanInstream < VbanStream
|
78
28
|
'
|
79
29
|
A subclass representing a VBAN Instream
|
80
30
|
'
|
@@ -88,7 +38,7 @@ class VbanInstream < Vban
|
|
88
38
|
end
|
89
39
|
end
|
90
40
|
|
91
|
-
class VbanOutstream <
|
41
|
+
class VbanOutstream < VbanStream
|
92
42
|
'
|
93
43
|
A subclass representing a VBAN Outstream
|
94
44
|
'
|
@@ -101,3 +51,28 @@ class VbanOutstream < Vban
|
|
101
51
|
:out
|
102
52
|
end
|
103
53
|
end
|
54
|
+
|
55
|
+
class Vban
|
56
|
+
attr_accessor :instream, :outstream
|
57
|
+
|
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
|
69
|
+
end
|
70
|
+
|
71
|
+
def enable
|
72
|
+
@remote.set_parameter('vban.enable', 1)
|
73
|
+
end
|
74
|
+
|
75
|
+
def disable
|
76
|
+
@remote.set_parameter('vban.enable', 0)
|
77
|
+
end
|
78
|
+
end
|
data/lib/version.rb
CHANGED
data/lib/voicemeeter.rb
CHANGED
@@ -1,4 +1,11 @@
|
|
1
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'
|
2
9
|
|
3
10
|
module Voicemeeter
|
4
11
|
include RunVM
|
@@ -14,30 +21,29 @@ module Voicemeeter
|
|
14
21
|
|
15
22
|
Offers a run method for resource closure.
|
16
23
|
'
|
17
|
-
def
|
18
|
-
'
|
19
|
-
Factory function that generates a Remote class for each kind.
|
20
|
-
|
21
|
-
Returns a hash of Remote classes.
|
22
|
-
'
|
23
|
-
Kinds.kinds_all.to_h do |kind|
|
24
|
-
[kind.name, Remote.new(kind, **kwargs)]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def initialize(kind)
|
24
|
+
def initialize(kind, **kwargs)
|
29
25
|
super
|
30
26
|
self.strip = Strip.make(self, kind.layout[:strip])
|
31
27
|
self.bus = Bus.make(self, kind.layout[:bus])
|
32
28
|
self.button = MacroButton.make(self, kind.layout[:mb])
|
33
|
-
self.vban = Vban.
|
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
45
|
ensure
|
46
|
+
end_thread
|
41
47
|
logout
|
42
48
|
end
|
43
49
|
end
|
@@ -46,16 +52,23 @@ module Voicemeeter
|
|
46
52
|
|
47
53
|
def self.remote(kind_id, **kwargs)
|
48
54
|
'
|
49
|
-
|
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.
|
50
62
|
'
|
51
|
-
_remotes =
|
63
|
+
_remotes =
|
64
|
+
Kinds.kinds_all.to_h do |kind|
|
65
|
+
[kind.name.to_s, Remote.new(kind, **kwargs)]
|
66
|
+
end
|
52
67
|
|
53
68
|
unless _remotes.key? kind_id
|
54
69
|
raise VMRemoteErrors.new('Unknown Voicemeeter Kind.')
|
55
70
|
end
|
56
|
-
|
57
|
-
_remotes[kind_id].login
|
58
|
-
return _remotes[kind_id]
|
71
|
+
_remotes[kind_id]
|
59
72
|
end
|
60
73
|
|
61
74
|
def self.testing
|
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.0.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-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 0.3.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: observer
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: rspec
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,13 +88,14 @@ files:
|
|
74
88
|
- lib/bus.rb
|
75
89
|
- lib/button.rb
|
76
90
|
- lib/cbindings.rb
|
77
|
-
- lib/channel.rb
|
78
91
|
- lib/command.rb
|
92
|
+
- lib/configs.rb
|
93
|
+
- lib/device.rb
|
79
94
|
- lib/errors.rb
|
80
95
|
- lib/inst.rb
|
96
|
+
- lib/iremote.rb
|
81
97
|
- lib/kinds.rb
|
82
98
|
- lib/meta.rb
|
83
|
-
- lib/profiles.rb
|
84
99
|
- lib/recorder.rb
|
85
100
|
- lib/runvm.rb
|
86
101
|
- lib/strip.rb
|
@@ -107,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
122
|
- !ruby/object:Gem::Version
|
108
123
|
version: '0'
|
109
124
|
requirements: []
|
110
|
-
rubygems_version: 3.3.
|
125
|
+
rubygems_version: 3.3.12
|
111
126
|
signing_key:
|
112
127
|
specification_version: 4
|
113
128
|
summary: Voicemeeter API wrapper
|
data/lib/profiles.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'toml'
|
2
|
-
|
3
|
-
module Profiles
|
4
|
-
private
|
5
|
-
|
6
|
-
def get_profiles(kind)
|
7
|
-
filepath =
|
8
|
-
File.join(File.dirname(__dir__), "/profiles/#{kind.name}/*.toml")
|
9
|
-
|
10
|
-
Dir
|
11
|
-
.glob(filepath)
|
12
|
-
.to_h do |toml_file|
|
13
|
-
filename = File.basename(toml_file, '.toml')
|
14
|
-
puts "loading profile #{kind.name}/#{filename}"
|
15
|
-
[filename, TOML::Parser.new(File.read(toml_file)).parsed]
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
public
|
20
|
-
|
21
|
-
def set_profile(value)
|
22
|
-
unless @profiles.key? value
|
23
|
-
raise VMRemoteErrors.new("No profile with name #{value} was loaded")
|
24
|
-
end
|
25
|
-
self.send('set_multi', @profiles[value])
|
26
|
-
sleep(DELAY)
|
27
|
-
end
|
28
|
-
end
|