voicemeeter-rb/lib/voicemeeter/patch.rb

82 lines
1.7 KiB
Ruby
Raw Normal View History

2023-07-17 07:10:08 +01:00
require_relative "iremote"
module Voicemeeter
module Patch
2023-07-27 10:58:26 +01:00
class Base
# Base class for Patch types
include IRemote
2023-07-25 14:49:09 +01:00
attr_reader :asio, :A2, :A3, :A4, :A5, :composite, :insert
2023-07-17 07:10:08 +01:00
def initialize(remote)
super
make_accessor_bool :postfadercomposite, :postfxinsert
asio_in, asio_out = remote.kind.asio
@asio = (0...asio_in).map { PatchAsioIn.new(remote, _1) }
2023-07-25 14:49:09 +01:00
%i[A2 A3 A4 A5].each do |param|
instance_variable_set("@#{param}", (0...asio_out).map { PatchAsioOut.new(remote, _1, param) })
end
@composite = (0...8).map { PatchComposite.new(remote, _1) }
@insert = (0...remote.kind.insert).map { PatchInsert.new(remote, _1) }
2023-07-17 07:10:08 +01:00
end
end
2023-07-27 10:58:26 +01:00
class PatchAsio
include IRemote
2023-07-17 07:10:08 +01:00
def identifier
:patch
end
end
class PatchAsioIn < PatchAsio
def get
getter("asio[#{@index}]").to_i
end
def set(val)
setter("asio[#{@index}]", val)
end
end
class PatchAsioOut < PatchAsio
2023-07-25 14:49:09 +01:00
def initialize(remote, i, param)
super(remote, i)
@param = param
end
2023-07-17 07:10:08 +01:00
def get
2023-07-25 14:49:09 +01:00
getter("out#{@param}[#{@index}]").to_i
2023-07-17 07:10:08 +01:00
end
def set(val)
2023-07-25 14:49:09 +01:00
setter("out#{@param}[#{@index}]", val)
2023-07-17 07:10:08 +01:00
end
end
2023-07-27 10:58:26 +01:00
class PatchComposite
include IRemote
2023-07-17 07:10:08 +01:00
def get
getter("composite[#{@index}]").to_i
end
def set(val)
setter("composite[#{@index}]", val)
end
end
2023-07-27 10:58:26 +01:00
class PatchInsert
include IRemote
2023-07-17 07:10:08 +01:00
def get
getter("insert[#{@index}]").to_i == 1
end
def set(val)
setter("insert[#{@index}]", val && 1 || 0)
end
end
end
end