mirror of
https://github.com/onyx-and-iris/voicemeeter-api-python.git
synced 2026-04-18 12:33:34 +00:00
initial commit
initial commit
This commit is contained in:
72
voicemeeterlib/device.py
Normal file
72
voicemeeterlib/device.py
Normal file
@@ -0,0 +1,72 @@
|
||||
from abc import abstractmethod
|
||||
from typing import Union
|
||||
|
||||
from .iremote import IRemote
|
||||
|
||||
|
||||
class Adapter(IRemote):
|
||||
"""Adapter to the common interface."""
|
||||
|
||||
@abstractmethod
|
||||
def ins(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def outs(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def input(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def output(self):
|
||||
pass
|
||||
|
||||
def identifier(self):
|
||||
pass
|
||||
|
||||
def getter(self, index: int = None, direction: str = None) -> Union[int, dict]:
|
||||
if index is None:
|
||||
return self._remote.get_num_devices(direction)
|
||||
|
||||
vals = self._remote.get_device_description(index, direction)
|
||||
types = {1: "mme", 3: "wdm", 4: "ks", 5: "asio"}
|
||||
return {"name": vals[0], "type": types[vals[1]], "id": vals[2]}
|
||||
|
||||
|
||||
class Device(Adapter):
|
||||
"""Defines concrete implementation for device"""
|
||||
|
||||
@classmethod
|
||||
def make(cls, remote):
|
||||
"""
|
||||
Factory function for device.
|
||||
|
||||
Returns a Device class of a kind.
|
||||
"""
|
||||
|
||||
def num_ins(cls) -> int:
|
||||
return cls.getter(direction="in")
|
||||
|
||||
def num_outs(cls) -> int:
|
||||
return cls.getter(direction="out")
|
||||
|
||||
DEVICE_cls = type(
|
||||
f"Device{remote.kind}",
|
||||
(cls,),
|
||||
{
|
||||
"ins": property(num_ins),
|
||||
"outs": property(num_outs),
|
||||
},
|
||||
)
|
||||
return DEVICE_cls(remote)
|
||||
|
||||
def __str__(self):
|
||||
return f"{type(self).__name__}"
|
||||
|
||||
def input(self, index: int) -> dict:
|
||||
return self.getter(index=index, direction="in")
|
||||
|
||||
def output(self, index: int) -> dict:
|
||||
return self.getter(index=index, direction="out")
|
||||
Reference in New Issue
Block a user