mirror of
https://github.com/onyx-and-iris/voicemeeter-api-python.git
synced 2024-11-15 16:40:46 +00:00
78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
from .error import VMError
|
|
from .iremote import IRemote
|
|
from .kinds import kinds_all
|
|
from .meta import action_prop, bool_prop
|
|
|
|
|
|
class Recorder(IRemote):
|
|
"""
|
|
Implements the common interface
|
|
|
|
Defines concrete implementation for recorder
|
|
"""
|
|
|
|
@classmethod
|
|
def make(cls, remote):
|
|
"""
|
|
Factory function for recorder.
|
|
|
|
Returns a Recorder class of a kind.
|
|
"""
|
|
CHANNELOUTMIXIN_cls = _make_channelout_mixins[remote.kind.name]
|
|
REC_cls = type(
|
|
f"Recorder{remote.kind}",
|
|
(cls, CHANNELOUTMIXIN_cls),
|
|
{
|
|
**{
|
|
param: action_prop(param)
|
|
for param in [
|
|
"play",
|
|
"stop",
|
|
"pause",
|
|
"replay",
|
|
"record",
|
|
"ff",
|
|
"rew",
|
|
]
|
|
},
|
|
},
|
|
)
|
|
return REC_cls(remote)
|
|
|
|
def __str__(self):
|
|
return f"{type(self).__name__}"
|
|
|
|
@property
|
|
def identifier(self) -> str:
|
|
return "recorder"
|
|
|
|
def load(self, file: str):
|
|
try:
|
|
self.setter("load", file)
|
|
except UnicodeError:
|
|
raise VMError("File full directory must be a raw string")
|
|
|
|
def set_loop(self, val: bool):
|
|
if not isinstance(val, bool) and val not in (0, 1):
|
|
raise VMError("Error True or False expected")
|
|
self.setter("mode.loop", 1 if val else 0)
|
|
|
|
loop = property(fset=set_loop)
|
|
|
|
|
|
def _make_channelout_mixin(kind):
|
|
"""Creates a channel out property mixin"""
|
|
return type(
|
|
f"ChannelOutMixin{kind}",
|
|
(),
|
|
{
|
|
**{f"A{i}": bool_prop(f"A{i}") for i in range(1, kind.phys_out + 1)},
|
|
**{f"B{i}": bool_prop(f"B{i}") for i in range(1, kind.virt_out + 1)},
|
|
},
|
|
)
|
|
|
|
|
|
_make_channelout_mixins = {
|
|
kind.name: _make_channelout_mixin(kind) for kind in kinds_all
|
|
}
|