duckypad-twitch/duckypad_twitch/duckypad.py

56 lines
1.7 KiB
Python
Raw Normal View History

2023-07-05 13:44:21 +01:00
import logging
from .audio import Audio
from .obsws import OBSWS
from .scene import Scene
from .states import StreamState
from .streamlabs import StreamlabsController
logger = logging.getLogger(__name__)
class DuckyPad:
"""base DuckyPad class"""
def __init__(self, **kwargs):
self.logger = logger.getChild(__class__.__name__)
for attr, val in kwargs.items():
setattr(self, attr, val)
self.stream = StreamState()
self.audio = Audio(self, vm=self.vm, mixer=self.mixer)
self.scene = Scene(self, vm=self.vm)
self.obsws = OBSWS(self)
self.streamlabs_controller = StreamlabsController(self, conn=self.sl)
def reset(self):
'''
apply streaming config,
then apply current scene settings
if stream is live enable both mics over vban
'''
self.vm.apply_config("streaming")
self.audio.reset_states()
if self.stream.current_scene:
self.logger.debug(
f"Running function for current scene {self.stream.current_scene}"
)
fn = getattr(
self.scene,
"_".join([word.lower() for word in self.stream.current_scene.split()]),
)
fn()
if self.stream.is_live:
self.logger.debug("stream is live, enabling both mics over vban")
self.vm.vban.outstream[0].on = True
self.vm.vban.outstream[1].on = True
else:
self.logger.debug(
"stream is not live. Leaving both vban outstreams disabled"
)
def connect(*args, **kwargs):
DuckyPad_cls = DuckyPad
return DuckyPad_cls(*args, **kwargs)