nvda-addon-voicemeeter/addon/globalPlugins/voicemeeter/kinds.py

100 lines
1.8 KiB
Python
Raw Normal View History

2023-09-23 22:55:58 +01:00
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):
2025-01-23 20:04:48 +00:00
if kind_id == 'basic':
2023-09-23 22:55:58 +01:00
_kind_map = BasicMap
2025-01-23 20:04:48 +00:00
elif kind_id == 'banana':
2023-09-23 22:55:58 +01:00
_kind_map = BananaMap
2025-01-23 20:04:48 +00:00
elif kind_id == 'potato':
2023-09-23 22:55:58 +01:00
_kind_map = PotatoMap
else:
2025-01-23 20:04:48 +00:00
raise ValueError(f'Unknown Voicemeeter kind {kind_id}')
2023-09-23 22:55:58 +01:00
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