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