voicemeeter-rb/lib/voicemeeter/remote.rb

108 lines
2.7 KiB
Ruby
Raw Normal View History

require_relative "base"
require_relative "kinds"
require_relative "errors"
require_relative "strip"
require_relative "bus"
require_relative "button"
require_relative "vban"
2023-07-14 17:07:56 +01:00
require_relative "command"
2023-07-14 16:12:18 +01:00
require_relative "recorder"
2023-07-15 00:16:54 +01:00
require_relative "device"
2023-07-16 23:30:24 +01:00
require_relative "fx"
2023-07-17 07:10:08 +01:00
require_relative "patch"
2023-07-17 06:30:09 +01:00
require_relative "option"
2023-07-09 05:50:57 +01:00
require_relative "configs"
module Voicemeeter
2023-07-20 09:50:16 +01:00
module Builder
private
2023-07-20 09:50:16 +01:00
def steps
{
strip: -> { (0...kind.num_strip).map { |i| Strip::Strip.make(self, i) } },
bus: -> { (0...kind.num_bus).map { |i| Bus::Bus.make(self, i) } },
button: -> { (0...kind.num_buttons).map { |i| Button::Button.new(self, i) } },
vban: -> { Vban::Vban.new(self) },
command: -> { Command.new(self) },
recorder: -> { Recorder::Recorder.new(self) },
device: -> { Device.new(self) },
fx: -> { Fx.new(self) },
patch: -> { Patch::Patch.new(self) },
option: -> { Option::Option.new(self) }
}
end
def build
steps.select { |k, v| director.include? k }.each do |k, v|
send("#{k}=", v.call)
end
end
def director
[:strip, :bus, :button, :vban, :command, :device, :option]
end
end
module Remote
class Remote < Base
2023-07-20 09:50:16 +01:00
include Builder
def initialize(kind, **kwargs)
super
2023-07-20 09:50:16 +01:00
build
end
2023-07-09 05:50:57 +01:00
def configs
Configs.get(kind.name)
end
def run
login
2023-07-14 17:07:56 +01:00
yield(self) if block_given?
logout
2023-07-09 05:50:57 +01:00
end
end
class RemoteBasic < Remote
2023-07-20 09:50:16 +01:00
public attr_reader :strip, :bus, :button, :vban, :command, :device, :option
private attr_writer :strip, :bus, :button, :vban, :command, :device, :option
end
class RemoteBanana < Remote
2023-07-20 09:50:16 +01:00
public attr_reader :strip, :bus, :button, :vban, :command, :device, :option, :recorder, :patch
private attr_writer :strip, :bus, :button, :vban, :command, :device, :option, :recorder, :patch
private def director
super.append(:recorder, :patch)
end
end
class RemotePotato < Remote
2023-07-20 09:50:16 +01:00
public attr_reader :strip, :bus, :button, :vban, :command, :device, :option, :recorder, :patch, :fx
private attr_writer :strip, :bus, :button, :vban, :command, :device, :option, :recorder, :patch, :fx
private def director
super.append(:recorder, :patch, :fx)
end
end
public
def self.new(kind_id, **kwargs)
kind = Kinds.get(kind_id)
rescue KeyError
raise Errors::VMError.new "unknown Voicemeeter kind #{kind_id}"
else
if kind_id == :basic
RemoteBasic.new(kind, **kwargs)
elsif kind_id == :banana
RemoteBanana.new(kind, **kwargs)
elsif kind_id == :potato
RemotePotato.new(kind, **kwargs)
end
end
end
end