nvda-addon-voicemeeter/addon/globalPlugins/voicemeeter/kinds.py
2023-09-23 22:55:58 +01:00

100 lines
1.8 KiB
Python

from dataclasses import dataclass
from enum import Enum, unique
from .error import VMError
@unique
class KindId(Enum):
BASIC = 1
BANANA = 2
POTATO = 3
@dataclass
class KindMapClass:
name: str
ins: tuple
outs: tuple
vban: tuple
asio: tuple
insert: int
@property
def phys_in(self) -> int:
return self.ins[0]
@property
def virt_in(self) -> int:
return self.ins[-1]
@property
def phys_out(self) -> int:
return self.outs[0]
@property
def virt_out(self) -> int:
return self.outs[-1]
@property
def num_strip(self) -> int:
return sum(self.ins)
@property
def num_bus(self) -> int:
return sum(self.outs)
def __str__(self) -> str:
return self.name.capitalize()
@dataclass
class BasicMap(KindMapClass):
name: str
ins: tuple = (2, 1)
outs: tuple = (1, 1)
vban: tuple = (4, 4, 1, 1)
asio: tuple = (0, 0)
insert: int = 0
@dataclass
class BananaMap(KindMapClass):
name: str
ins: tuple = (3, 2)
outs: tuple = (3, 2)
vban: tuple = (8, 8, 1, 1)
asio: tuple = (6, 8)
insert: int = 22
@dataclass
class PotatoMap(KindMapClass):
name: str
ins: tuple = (5, 3)
outs: tuple = (5, 3)
vban: tuple = (8, 8, 1, 1)
asio: tuple = (10, 8)
insert: int = 34
def kind_factory(kind_id):
if kind_id == "basic":
_kind_map = BasicMap
elif kind_id == "banana":
_kind_map = BananaMap
elif kind_id == "potato":
_kind_map = PotatoMap
else:
raise ValueError(f"Unknown Voicemeeter kind {kind_id}")
return _kind_map(name=kind_id)
def request_kind_map(kind_id):
KIND_obj = None
try:
KIND_obj = kind_factory(kind_id)
except ValueError as e:
raise VMError(str(e)) from e
return KIND_obj