voicemeeter_api_ruby 2.0.4 → 3.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.
data/lib/runvm.rb CHANGED
@@ -1,18 +1,29 @@
1
- require_relative 'base'
2
-
3
- include Base
4
-
5
- module RunVM
6
- """
7
- Starts Voicemeeter of the Kind requested.
8
- """
9
- def start(kind)
10
- enums = $kinds_all.map.with_index do |val, i|
11
- get_arch == 64 && val == "potato" ? [val, i+4] : [val, i+1]
12
- end
13
- exes = enums.to_h { |k, v| [k, v.to_i] }
14
-
15
- run_as('runvm', exes[kind])
16
- sleep(1)
17
- end
18
- end
1
+ require_relative 'cbindings'
2
+ require_relative 'kinds'
3
+
4
+ include CBindings
5
+ include Kinds
6
+
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
15
+
16
+ enums =
17
+ Kinds.kinds_all.map.with_index do |kind, i|
18
+ if OS_BITS == 64 && kind.name == 'potato'
19
+ [kind.name, i + 4]
20
+ else
21
+ [kind.name, i + 1]
22
+ end
23
+ end
24
+ exes = enums.to_h { |k, v| [k, v.to_i] }
25
+
26
+ send('vmr_runvm', exes[kind_id])
27
+ sleep(1)
28
+ end
29
+ end
data/lib/strip.rb CHANGED
@@ -1,49 +1,80 @@
1
- require_relative 'channel'
2
-
3
-
4
- class Strip < IChannel
5
- """
6
- Concrete class for Strip objects
7
- """
8
- def self.make(remote, layout_strip)
9
- "
10
- Factory function for Strip classes.
11
- "
12
- p_in, v_in = layout_strip.map { |k, v| v }
13
- (0...(p_in + v_in)).map do |i|
14
- i < p_in ? \
15
- PhysicalStrip.new(remote, i) : \
16
- VirtualStrip.new(remote, i)
17
- end
18
- end
19
-
20
- def initialize(remote, i)
21
- super
22
- self.make_accessor_bool :solo, :mute, :mono
23
- self.make_accessor_float :gain
24
- self.make_accessor_string :label
25
-
26
- num_A, num_B = remote.layout[:bus].map { |k, v| v }
27
- self.make_accessor_bool *make_channel_props(num_A, num_B)
28
- end
29
-
30
- def cmd
31
- return "Strip[#{@index}]"
32
- end
33
- end
34
-
35
- class PhysicalStrip < Strip
36
- def initialize(remote, i)
37
- super
38
- self.make_accessor_float :comp, :gate
39
- self.make_accessor_int :limit
40
- self.make_reader_only :device, :sr
41
- end
42
- end
43
-
44
- class VirtualStrip < Strip
45
- def initialize(remote, i)
46
- super
47
- self.make_accessor_bool :mc, :k
48
- end
49
- end
1
+ require_relative 'channel'
2
+
3
+ class Strip < IChannel
4
+ '
5
+ Concrete Strip class
6
+ '
7
+ include Fades
8
+
9
+ attr_accessor :gainlayer
10
+
11
+ def self.make(remote, layout_strip)
12
+ '
13
+ Factory function for Strip classes.
14
+ '
15
+ p_in, v_in = layout_strip.values
16
+ (0...(p_in + v_in)).map do |i|
17
+ if i < p_in
18
+ PhysicalStrip.new(remote, i)
19
+ else
20
+ VirtualStrip.new(remote, i)
21
+ end
22
+ end
23
+ end
24
+
25
+ def initialize(remote, i)
26
+ super
27
+ self.make_accessor_bool :solo, :mute, :mono
28
+ self.make_accessor_float :gain
29
+ self.make_accessor_int :limit
30
+ self.make_accessor_string :label
31
+
32
+ num_A, num_B = remote.kind.layout[:bus].values
33
+ self.make_accessor_bool *make_channel_props(num_A, num_B)
34
+
35
+ @gainlayer = (0...8).map { |j| GainLayer.new(remote, i, j) }
36
+ end
37
+
38
+ def identifier
39
+ :strip
40
+ end
41
+ end
42
+
43
+ class PhysicalStrip < Strip
44
+ def initialize(remote, i)
45
+ super
46
+ self.make_accessor_float :comp, :gate
47
+ self.make_reader_only :device, :sr
48
+ end
49
+ end
50
+
51
+ class VirtualStrip < Strip
52
+ def initialize(remote, i)
53
+ super
54
+ self.make_accessor_bool :mc
55
+ self.make_accessor_int :k
56
+ end
57
+
58
+ def appgain(name, gain) = self.setter("AppGain", "(\"#{name}\", #{gain})")
59
+
60
+ def appmute(name, mute) = self.setter("AppMute", "(\"#{name}\", #{mute ? 1 : 0})")
61
+ end
62
+
63
+ class GainLayer < IChannel
64
+ def initialize(remote, i, j)
65
+ super(remote, i)
66
+ @j = j
67
+ end
68
+
69
+ def identifier
70
+ :strip
71
+ end
72
+
73
+ def gain
74
+ self.getter("gainlayer[#{@j}]")
75
+ end
76
+
77
+ def gain=(value)
78
+ self.setter("gainlayer[#{@j}]", value)
79
+ end
80
+ end
data/lib/vban.rb CHANGED
@@ -1,106 +1,103 @@
1
- require_relative 'meta'
2
- require_relative 'errors'
3
-
4
-
5
- class IVban
6
- """
7
- Base class for Vban objects
8
- """
9
- include Vban_Meta_Functions
10
-
11
- attr_accessor :remote, :index
12
-
13
- def initialize(remote, index)
14
- self.remote = remote
15
- self.index = index
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)
24
- end
25
-
26
- def cmd
27
- return "vban.#{self.direction}stream[#{@index}]"
28
- end
29
-
30
- def direction
31
- raise NotImplementedError
32
- end
33
-
34
- def set_multi(param_hash)
35
- param_hash.each do |(key,val)|
36
- self.send("#{key}=", val)
37
- end
38
- end
39
- end
40
-
41
-
42
- class Vban < IVban
43
- """
44
- Concrete class for Vban objects
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
-
76
- def initialize(remote, i)
77
- super
78
- self.make_accessor_bool :on
79
- self.make_accessor_string :name, :ip
80
- self.make_accessor_int :quality, :route
81
- end
82
- end
83
-
84
-
85
- class VbanInstream < Vban
86
- def initialize(remote, i)
87
- super
88
- self.make_reader_int :sr, :channel, :bit
89
- end
90
-
91
- def direction
92
- return "in"
93
- end
94
- end
95
-
96
-
97
- class VbanOutstream < Vban
98
- def initialize(remote, i)
99
- super
100
- self.make_accessor_int :sr, :channel, :bit
101
- end
102
-
103
- def direction
104
- return "out"
105
- end
106
- end
1
+ require_relative 'meta'
2
+ require_relative 'errors'
3
+
4
+ class IVban
5
+ '
6
+ Base Vban class
7
+ '
8
+ include Vban_Meta_Functions
9
+
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
+ def initialize(remote, i)
66
+ super
67
+ self.make_accessor_bool :on
68
+ self.make_accessor_string :name, :ip
69
+ self.make_accessor_int :quality, :route
70
+ end
71
+
72
+ def identifier
73
+ :vban
74
+ end
75
+ end
76
+
77
+ class VbanInstream < Vban
78
+ '
79
+ A subclass representing a VBAN Instream
80
+ '
81
+ def initialize(remote, i)
82
+ super
83
+ self.make_reader_int :sr, :channel, :bit
84
+ end
85
+
86
+ def direction
87
+ :in
88
+ end
89
+ end
90
+
91
+ class VbanOutstream < Vban
92
+ '
93
+ A subclass representing a VBAN Outstream
94
+ '
95
+ def initialize(remote, i)
96
+ super
97
+ self.make_accessor_int :sr, :channel, :bit
98
+ end
99
+
100
+ def direction
101
+ :out
102
+ end
103
+ end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module Voicemeeter_API_Ruby
2
- VERSION = '2.0.4'
3
- end
1
+ module Voicemeeter_API_Ruby
2
+ VERSION = '3.0.0'
3
+ end
data/lib/voicemeeter.rb CHANGED
@@ -1,60 +1,73 @@
1
- require_relative 'routines'
2
- require_relative 'errors'
3
-
4
-
5
- module Voicemeeter
6
- include RunVM
7
-
8
- private
9
- class Remote < Routines
10
- """
11
- Remote class, subclasses Routines
12
-
13
- Console layout built according to version definition.
14
-
15
- Offers a run method for resource closure.
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
27
-
28
- def initialize(kind)
29
- super
30
- self.strip = Strip.make(self, @layout[:strip])
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)
36
- end
37
-
38
- def run
39
- yield if block_given?
40
-
41
- ensure
42
- logout
43
- end
44
- end
45
-
46
- 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
-
53
- raise VMRemoteErrors.new("Unknown Voicemeeter Kind.") unless _remotes.key? kind
54
-
55
- _remotes[kind].login
56
- return _remotes[kind]
57
- end
58
-
59
- module_function :remote, :start
60
- end
1
+ require_relative 'base'
2
+
3
+ module Voicemeeter
4
+ include RunVM
5
+
6
+ private
7
+
8
+ class Remote < Base
9
+ include Kinds
10
+ '
11
+ Remote class, subclasses Base
12
+
13
+ Console layout built according to a kind
14
+
15
+ Offers a run method for resource closure.
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.kinds_all.to_h do |kind|
24
+ [kind.name, Remote.new(kind, **kwargs)]
25
+ end
26
+ end
27
+
28
+ def initialize(kind)
29
+ super
30
+ self.strip = Strip.make(self, kind.layout[:strip])
31
+ self.bus = Bus.make(self, kind.layout[:bus])
32
+ self.button = MacroButton.make(self, kind.layout[:mb])
33
+ self.vban = Vban.make(self, kind.layout[:vban])
34
+ self.command = Command.new(self)
35
+ self.recorder = Recorder.new(self)
36
+ end
37
+
38
+ def run
39
+ yield if block_given?
40
+ ensure
41
+ logout
42
+ end
43
+ end
44
+
45
+ public
46
+
47
+ def self.remote(kind_id, **kwargs)
48
+ '
49
+ Request a Remote class of a kind and login to the API
50
+ '
51
+ _remotes = Remote.make(**kwargs)
52
+
53
+ unless _remotes.key? kind_id
54
+ raise VMRemoteErrors.new('Unknown Voicemeeter Kind.')
55
+ end
56
+
57
+ _remotes[kind_id].login
58
+ return _remotes[kind_id]
59
+ end
60
+
61
+ def self.testing
62
+ '
63
+ Returns a random Remote class
64
+ '
65
+ unless ENV['RACK_ENV'] == 'dev'
66
+ raise VMRemoteErrors.new('Not in developer mode')
67
+ end
68
+
69
+ return Remote.new(Kinds.kinds_all.sample)
70
+ end
71
+
72
+ module_function :start
73
+ 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: 2.0.4
4
+ version: 3.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-01-24 00:00:00.000000000 Z
11
+ date: 2022-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -45,61 +45,43 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: 0.3.0
47
47
  - !ruby/object:Gem::Dependency
48
- name: rake
48
+ name: rspec
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '13.0'
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 13.0.3
53
+ version: '3.4'
57
54
  type: :development
58
55
  prerelease: false
59
56
  version_requirements: !ruby/object:Gem::Requirement
60
57
  requirements:
61
58
  - - "~>"
62
59
  - !ruby/object:Gem::Version
63
- version: '13.0'
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 13.0.3
67
- - !ruby/object:Gem::Dependency
68
- name: minitest
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '5.14'
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: 5.14.4
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '5.14'
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- version: 5.14.4
60
+ version: '3.4'
87
61
  description: A wrapper for Voicemeeter virtual mixer API in Ruby
88
62
  email: code@onyxandiris.online
89
63
  executables: []
90
64
  extensions: []
91
- extra_rdoc_files: []
65
+ extra_rdoc_files:
66
+ - README.md
67
+ - CHANGELOG.md
68
+ - LICENSE
92
69
  files:
70
+ - CHANGELOG.md
71
+ - LICENSE
72
+ - README.md
93
73
  - lib/base.rb
94
74
  - lib/bus.rb
95
75
  - lib/button.rb
76
+ - lib/cbindings.rb
96
77
  - lib/channel.rb
97
78
  - lib/command.rb
98
79
  - lib/errors.rb
99
80
  - lib/inst.rb
81
+ - lib/kinds.rb
100
82
  - lib/meta.rb
83
+ - lib/profiles.rb
101
84
  - lib/recorder.rb
102
- - lib/routines.rb
103
85
  - lib/runvm.rb
104
86
  - lib/strip.rb
105
87
  - lib/vban.rb
@@ -107,7 +89,7 @@ files:
107
89
  - lib/voicemeeter.rb
108
90
  homepage: https://rubygems.org/gems/voicemeeter_api_ruby
109
91
  licenses:
110
- - NGPL
92
+ - MIT
111
93
  metadata:
112
94
  source_code_uri: https://github.com/onyx-and-iris/voicemeeter-api-ruby.git
113
95
  post_install_message:
@@ -118,14 +100,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
100
  requirements:
119
101
  - - ">="
120
102
  - !ruby/object:Gem::Version
121
- version: '2.7'
103
+ version: '3.0'
122
104
  required_rubygems_version: !ruby/object:Gem::Requirement
123
105
  requirements:
124
106
  - - ">="
125
107
  - !ruby/object:Gem::Version
126
108
  version: '0'
127
109
  requirements: []
128
- rubygems_version: 3.1.4
110
+ rubygems_version: 3.3.7
129
111
  signing_key:
130
112
  specification_version: 4
131
113
  summary: Voicemeeter API wrapper