import toml from . import kinds from .util import project_path from pathlib import Path profiles = {} def _make_blank_profile(kind): phys_in, virt_in = kind.ins phys_out, virt_out = kind.outs all_input_strip_config = { "gain": 0.0, "solo": False, "mute": False, "mono": False, **{f"A{i}": False for i in range(1, phys_out + 1)}, **{f"B{i}": False for i in range(1, virt_out + 1)}, } phys_input_strip_config = { "comp": 0.0, "gate": 0.0, } output_bus_config = { "gain": 0.0, "eq": False, "mute": False, "mono": False, } all_ = {f"strip-{i}": all_input_strip_config for i in range(phys_in + virt_in)} phys = {f"strip-{i}": phys_input_strip_config for i in range(phys_in)} abc = all_ for i in phys.keys(): abc[i] = all_[i] | phys[i] return { **abc, **{f"bus-{i}": output_bus_config for i in range(phys_out + virt_out)}, } def _make_base_profile(kind): phys_in, virt_in = kind.ins blank = _make_blank_profile(kind) overrides = { **{f"strip-{i}": dict(B1=True) for i in range(phys_in)}, **{f"strip-{i}": dict(A1=True) for i in range(phys_in, phys_in + virt_in)}, } base = blank for i in overrides.keys(): base[i] = blank[i] | overrides[i] return base for kind in kinds.all: profiles[kind.id] = { "blank": _make_blank_profile(kind), "base": _make_base_profile(kind), } # Load profiles from config files in profiles//.toml for kind in kinds.all: profiles_paths = [ Path(project_path()) / "profiles" / kind.id, Path.cwd() / "profiles" / kind.id, Path.home() / "Documents/Voicemeeter" / "profiles" / kind.id, ] for path in profiles_paths: if path.is_dir(): filenames = list(path.glob("*.toml")) configs = {} for filename in filenames: name = filename.with_suffix("").stem try: configs[name] = toml.load(filename) except toml.TomlDecodeError: print(f"Invalid TOML profile: {kind.id}/{filename.stem}") for name, cfg in configs.items(): print(f"Loaded profile {kind.id}/{name}") profiles[kind.id][name] = cfg