From e91d8dbd377549200bb8f085f53c3e874bda5ac3 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Sun, 9 Jul 2023 19:44:43 +0100 Subject: [PATCH] read_from_yaml implemented --- lib/voicemeeter/configs.rb | 69 +++++++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 12 deletions(-) diff --git a/lib/voicemeeter/configs.rb b/lib/voicemeeter/configs.rb index 7c13414..e4ae261 100644 --- a/lib/voicemeeter/configs.rb +++ b/lib/voicemeeter/configs.rb @@ -1,6 +1,8 @@ require "yaml" -require_relative "kinds" require "easy_logging" +require "pathname" + +require_relative "kinds" module Voicemeeter module Configs @@ -22,49 +24,92 @@ module Voicemeeter def build_reset_profile(overrides = {}) aouts = (0...@kind.phys_out).to_h { |i| ["A#{i + 1}", false] } bouts = (0...@kind.virt_out).to_h { |i| ["B#{i + 1}", false] } - bools = %w[mute mono solo].to_h { |param| [param, false] } - floats = ["gain"].to_h { |param| [param, 0.0] } + strip_bools = %w[mute mono solo].to_h { |param| [param, false] } + gain = ["gain"].to_h { |param| [param, 0.0] } phys_float = %w[comp gate denoiser].to_h { |param| [param, { knob: 0.0 }] } - phys_bool = ["eq"].to_h { |param| [param, { on: false }] } + eq = ["eq"].to_h { |param| [param, { on: false }] } + + overrides = { "B1" => true } # physical strip params phys_strip = (0...@kind.phys_in).to_h do |i| [ "strip-#{i}", - { **aouts, **bouts, **bools, **floats, **phys_float, **phys_bool } + { + **aouts, + **bouts, + **strip_bools, + **gain, + **phys_float, + **eq, + **overrides + } ] end + + overrides = { "A1" => true } # virtual strip params virt_strip = (@kind.phys_in...@kind.phys_in + @kind.virt_in).to_h do |i| - ["strip-#{i}", { **aouts, **bouts, **bools, **floats }] + [ + "strip-#{i}", + { **aouts, **bouts, **strip_bools, **gain, **overrides } + ] end - { **phys_strip, **virt_strip } + + bus_bools = %w[mute mono].to_h { |param| [param, false] } + bus = + (0...@kind.num_bus).to_h do |i| + ["bus-#{i}", { **bus_bools, **gain, **eq }] + end + { **phys_strip, **virt_strip, **bus } + end + + def read_from_yml + filepaths = [ + Pathname.getwd.join("configs", @kind.name.to_s), + Pathname.new(Dir.home).join( + ".config", + "voicemeeter-rb", + @kind.name.to_s + ), + Pathname.new(Dir.home).join( + "Documents", + "Voicemeeter", + "configs", + @kind.name.to_s + ) + ] + filepaths.each do |pn| + configs = pn.glob("*.yml") + configs.each do |config| + filename = config.basename.sub_ext "" + @configs[filename.to_s.to_sym] = YAML.load_file(config) + end + end end public def build @configs[:reset] = build_reset_profile + read_from_yml end end public - def load + def get(kind_id) if @loaders.nil? @loaders = Kinds::ALL.to_h { |kind| [kind.name, Loader.new(kind)] } @loaders.each { |name, loader| loader.build } end - end - - def get(kind_id) @loaders[kind_id].configs end - module_function :get, :load + module_function :get end end