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/strip.rb CHANGED
@@ -1,131 +1,135 @@
1
- require_relative 'iremote'
2
- require_relative 'mixin'
1
+ require_relative "iremote"
3
2
 
4
3
  class Strip < IRemote
5
- '
6
- Concrete Strip class
7
- '
8
- include Channel_Meta_Functions
9
- include Fades
10
-
11
- attr_accessor :gainlayer, :levels
12
-
13
- def self.make(remote, layout_strip)
14
- '
15
- Factory function for Strip classes.
16
- '
17
- p_in, v_in = layout_strip.values
18
- (0...(p_in + v_in)).map do |i|
19
- if i < p_in
20
- PhysicalStrip.new(remote, i)
21
- else
22
- VirtualStrip.new(remote, i)
23
- end
24
- end
25
- end
26
-
27
- def initialize(remote, i)
28
- super
29
- self.make_accessor_bool :solo, :mute, :mono
30
- self.make_accessor_float :gain
31
- self.make_accessor_int :limit
32
- self.make_accessor_string :label
33
-
34
- num_A, num_B = remote.kind.layout[:bus].values
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)
39
- end
40
-
41
- def identifier
42
- "strip[#{@index}]"
43
- end
4
+ "
5
+ Concrete Strip class
6
+ "
7
+ include Channel_Meta_Functions
8
+
9
+ attr_accessor :gainlayer, :levels
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
+ i < p_in ? PhysicalStrip.new(remote, i) : VirtualStrip.new(remote, i)
18
+ end
19
+ end
20
+
21
+ def initialize(remote, i)
22
+ super
23
+ self.make_accessor_bool :solo, :mute, :mono
24
+ self.make_accessor_float :gain
25
+ self.make_accessor_int :limit
26
+ self.make_accessor_string :label
27
+
28
+ num_A, num_B = remote.kind.layout[:bus].values
29
+ self.make_accessor_bool *make_channel_props(num_A, num_B)
30
+
31
+ @gainlayer = (0...8).map { |j| GainLayer.new(remote, i, j) }
32
+ @levels = StripLevels.new(remote, i)
33
+ end
34
+
35
+ def identifier
36
+ "strip[#{@index}]"
37
+ end
38
+
39
+ def fadeto(target, time)
40
+ self.setter("FadeTo", "(#{target}, #{time})")
41
+ sleep(@remote.delay)
42
+ end
43
+
44
+ def fadeby(change, time)
45
+ self.setter("FadeBy", "(#{change}, #{time})")
46
+ sleep(@remote.delay)
47
+ end
44
48
  end
45
49
 
46
50
  class PhysicalStrip < Strip
47
- def initialize(remote, i)
48
- super
49
- self.make_accessor_float :comp, :gate, :audibility
50
- self.make_reader_only :device, :sr
51
- end
51
+ def initialize(remote, i)
52
+ super
53
+ self.make_accessor_float :comp, :gate, :audibility
54
+ self.make_reader_only :device, :sr
55
+ end
52
56
  end
53
57
 
54
58
  class VirtualStrip < Strip
55
- def initialize(remote, i)
56
- super
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
59
+ def initialize(remote, i)
60
+ super
61
+ self.make_accessor_bool :mc
62
+ self.make_accessor_int :k
63
+ self.make_accessor_float :bass, :mid, :treble
64
+ end
65
+
66
+ def appgain(name, gain)
67
+ self.setter("AppGain", "(\"#{name}\", #{gain})")
68
+ end
69
+
70
+ def appmute(name, mute)
71
+ self.setter("AppMute", "(\"#{name}\", #{mute ? 1 : 0})")
72
+ end
69
73
  end
70
74
 
71
75
  class GainLayer < IRemote
72
- def initialize(remote, i, j)
73
- super(remote, i)
74
- @j = j
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
76
+ def initialize(remote, i, j)
77
+ super(remote, i)
78
+ @j = j
79
+ end
80
+
81
+ def identifier
82
+ "strip[#{@index}]"
83
+ end
84
+
85
+ def gain
86
+ self.getter("gainlayer[#{@j}]")
87
+ end
88
+
89
+ def gain=(value)
90
+ self.setter("gainlayer[#{@j}]", value)
91
+ end
88
92
  end
89
93
 
90
94
  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?
95
+ def initialize(remote, i)
96
+ super
97
+ if i < @remote.p_in
98
+ @init = i * 2
99
+ @offset = 2
100
+ else
101
+ @init = (@remote.p_in * 2) + ((i - @remote.p_in) * 8)
102
+ @offset = 8
103
+ end
104
+ end
105
+
106
+ def identifier
107
+ "strip[#{@index}]"
108
+ end
109
+
110
+ def get_level(mode)
111
+ if @remote.running
112
+ vals = @remote.cache["strip_level"][@init, @offset]
113
+ else
114
+ vals = (@init...@offset).map { |i| get_level(mode, i) }
115
+ end
116
+ vals.map { |x| x > 0 ? (20 * Math.log(x, 10)).round(1) : -200.0 }
117
+ end
118
+
119
+ def prefader
120
+ @remote.strip_mode = 0
121
+ get_level(0)
122
+ end
123
+
124
+ def postfader
125
+ @remote.strip_mode = 1
126
+ get_level(1)
127
+ end
128
+
129
+ def postmute
130
+ @remote.strip_mode = 2
131
+ get_level(2)
132
+ end
133
+
134
+ def isdirty? = @remote._strip_comp[@init, @offset].any?
131
135
  end
data/lib/vban.rb CHANGED
@@ -1,78 +1,78 @@
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
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 = '4.1.2'
3
- end
1
+ module Voicemeeter_API_Ruby
2
+ VERSION = "4.1.5"
3
+ end
data/lib/voicemeeter.rb CHANGED
@@ -1,86 +1,86 @@
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
- Remote.new(Kinds.kinds_all.sample)
83
- end
84
-
85
- module_function :start
86
- 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
+ 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: 4.1.2
4
+ version: 4.1.5
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-07-20 00:00:00.000000000 Z
11
+ date: 2022-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -96,7 +96,6 @@ files:
96
96
  - lib/iremote.rb
97
97
  - lib/kinds.rb
98
98
  - lib/meta.rb
99
- - lib/mixin.rb
100
99
  - lib/recorder.rb
101
100
  - lib/runvm.rb
102
101
  - lib/strip.rb
data/lib/mixin.rb DELETED
@@ -1,11 +0,0 @@
1
- module Fades
2
- def fadeto(target, time)
3
- self.setter('FadeTo', "(#{target}, #{time})")
4
- sleep(@remote.DELAY)
5
- end
6
-
7
- def fadeby(change, time)
8
- self.setter('FadeBy', "(#{change}, #{time})")
9
- sleep(@remote.DELAY)
10
- end
11
- end