From 2f93fc14f993a5f4e2ece120e658dd1e58a1b708 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Fri, 14 Jul 2023 17:07:56 +0100 Subject: [PATCH] command class implemented --- lib/voicemeeter/command.rb | 36 ++++++++++++++++++++++++++++++++++++ lib/voicemeeter/meta.rb | 8 ++++++++ lib/voicemeeter/remote.rb | 6 ++++-- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 lib/voicemeeter/command.rb diff --git a/lib/voicemeeter/command.rb b/lib/voicemeeter/command.rb new file mode 100644 index 0000000..adee6db --- /dev/null +++ b/lib/voicemeeter/command.rb @@ -0,0 +1,36 @@ +require_relative "iremote" +require_relative "meta" + +module Voicemeeter + class Command < IRemote + def initialize(remote) + super + make_action_method :show, :restart, :shutdown + make_writer_bool :showvbanchat, :lock + end + + def identifier + :command + end + + def hide + setter("show", 0) + end + + def load(value) + raise VMError.new("load got: #{value}, but expected a string") unless value.is_a? String + setter("load", value) + sleep(0.2) + end + + def save(value) + raise VMError.new("save got: #{value}, but expected a string") unless value.is_a? String + setter("save", value) + sleep(0.2) + end + + def reset + @remote.apply_config(:reset) + end + end +end diff --git a/lib/voicemeeter/meta.rb b/lib/voicemeeter/meta.rb index 398378a..a08fea1 100644 --- a/lib/voicemeeter/meta.rb +++ b/lib/voicemeeter/meta.rb @@ -49,6 +49,14 @@ module Voicemeeter end # writer methods + def make_writer_bool(*params) + params.each do |param| + define_singleton_method("#{param}=") do |value| + setter(param, value && 1 || 0) + end + end + end + def make_writer_string(*params) params.each do |param| define_singleton_method("#{param}=") { |value| setter(param, value) } diff --git a/lib/voicemeeter/remote.rb b/lib/voicemeeter/remote.rb index 0dfcbca..149a34b 100644 --- a/lib/voicemeeter/remote.rb +++ b/lib/voicemeeter/remote.rb @@ -5,6 +5,7 @@ require_relative "strip" require_relative "bus" require_relative "button" require_relative "vban" +require_relative "command" require_relative "recorder" require_relative "configs" @@ -13,7 +14,7 @@ module Voicemeeter private class Remote < Base - attr_reader :strip, :bus, :button, :vban, :recorder + attr_reader :strip, :bus, :button, :vban, :command, :recorder def initialize(kind, **kwargs) super @@ -21,6 +22,7 @@ module Voicemeeter @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) end @@ -31,7 +33,7 @@ module Voicemeeter def run login - yield if block_given? + yield(self) if block_given? logout end