mirror of
				https://github.com/onyx-and-iris/duckypad-twitch.git
				synced 2025-11-04 06:01:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			148 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import logging
 | 
						|
from enum import IntEnum
 | 
						|
 | 
						|
import vban_cmd
 | 
						|
 | 
						|
from . import configuration
 | 
						|
from .layer import ILayer
 | 
						|
from .states import AudioState
 | 
						|
 | 
						|
logger = logging.getLogger(__name__)
 | 
						|
 | 
						|
 | 
						|
Buttons = IntEnum('Buttons', 'mute_mics only_discord only_stream', start=0)
 | 
						|
 | 
						|
 | 
						|
class Audio(ILayer):
 | 
						|
    """Audio concrete class"""
 | 
						|
 | 
						|
    def __init__(self, duckypad, **kwargs):
 | 
						|
        super().__init__(duckypad)
 | 
						|
        for attr, val in kwargs.items():
 | 
						|
            setattr(self, attr, val)
 | 
						|
 | 
						|
        self.reset_states()
 | 
						|
 | 
						|
    @property
 | 
						|
    def identifier(self):
 | 
						|
        return type(self).__name__
 | 
						|
 | 
						|
    @property
 | 
						|
    def state(self):
 | 
						|
        return self._state
 | 
						|
 | 
						|
    @state.setter
 | 
						|
    def state(self, val):
 | 
						|
        self._state = val
 | 
						|
 | 
						|
    def reset_states(self):
 | 
						|
        self.state = AudioState()
 | 
						|
        for button in Buttons:
 | 
						|
            self.vm.button[button].stateonly = getattr(AudioState, button.name)
 | 
						|
 | 
						|
    def mute_mics(self):
 | 
						|
        self.state.mute_mics = not self.state.mute_mics
 | 
						|
        if self.state.mute_mics:
 | 
						|
            self.vm.strip[0].mute = True
 | 
						|
            self.vm.strip[1].mute = True
 | 
						|
            self.vm.strip[4].mute = True
 | 
						|
            self.logger.info('Mics Muted')
 | 
						|
        else:
 | 
						|
            self.vm.strip[0].mute = False
 | 
						|
            self.vm.strip[1].mute = False
 | 
						|
            self.vm.strip[4].mute = False
 | 
						|
            self.logger.info('Mics Unmuted')
 | 
						|
        self.vm.button[Buttons.mute_mics].stateonly = self.state.mute_mics
 | 
						|
 | 
						|
    def only_discord(self):
 | 
						|
        self.state.only_discord = not self.state.only_discord
 | 
						|
        if self.state.only_discord:
 | 
						|
            self.mixer.dca[0].on = False
 | 
						|
            self.vm.strip[4].mute = True
 | 
						|
            self.logger.info('Only Discord Enabled')
 | 
						|
        else:
 | 
						|
            self.vm.strip[4].mute = False
 | 
						|
            self.mixer.dca[0].on = True
 | 
						|
            self.logger.info('Only Discord Disabled')
 | 
						|
        self.vm.button[Buttons.only_discord].stateonly = self.state.only_discord
 | 
						|
 | 
						|
    def only_stream(self):
 | 
						|
        self.state.only_stream = not self.state.only_stream
 | 
						|
        if self.state.only_stream:
 | 
						|
            self.vm.bus[5].mute = True
 | 
						|
            self.vm.bus[6].mute = True
 | 
						|
            self.vm.strip[2].gain = -3
 | 
						|
            self.vm.strip[3].gain = -3
 | 
						|
            self.vm.strip[6].gain = -3
 | 
						|
            self.logger.info('Only Stream Enabled')
 | 
						|
        else:
 | 
						|
            self.vm.strip[2].gain = 0
 | 
						|
            self.vm.strip[3].gain = 0
 | 
						|
            self.vm.strip[6].gain = 0
 | 
						|
            self.vm.bus[5].mute = False
 | 
						|
            self.vm.bus[6].mute = False
 | 
						|
            self.logger.info('Only Stream Disabled')
 | 
						|
        self.vm.button[Buttons.only_stream].stateonly = self.state.only_stream
 | 
						|
 | 
						|
    def sound_test(self):
 | 
						|
        def toggle_soundtest(params):
 | 
						|
            onyx_conn = configuration.get('vban_onyx')
 | 
						|
            iris_conn = configuration.get('vban_iris')
 | 
						|
            assert all([onyx_conn, iris_conn]), 'expected configurations for onyx_conn, iris_conn'
 | 
						|
 | 
						|
            with vban_cmd.api('potato', outbound=True, **onyx_conn) as vban:
 | 
						|
                vban.strip[0].apply(params)
 | 
						|
            with vban_cmd.api('potato', outbound=True, **iris_conn) as vban:
 | 
						|
                vban.strip[0].apply(params)
 | 
						|
 | 
						|
        ENABLE_SOUNDTEST = {
 | 
						|
            'A1': True,
 | 
						|
            'A2': True,
 | 
						|
            'B1': False,
 | 
						|
            'B2': False,
 | 
						|
            'mono': True,
 | 
						|
        }
 | 
						|
        DISABLE_SOUNDTEST = {
 | 
						|
            'A1': False,
 | 
						|
            'A2': False,
 | 
						|
            'B1': True,
 | 
						|
            'B2': True,
 | 
						|
            'mono': False,
 | 
						|
        }
 | 
						|
 | 
						|
        self.state.sound_test = not self.state.sound_test
 | 
						|
        if self.state.sound_test:
 | 
						|
            self.vm.strip[4].apply({'B3': False, 'A1': True, 'mute': False})
 | 
						|
            self.vm.vban.outstream[0].on = True
 | 
						|
            self.vm.vban.outstream[1].on = True
 | 
						|
            self.vm.vban.outstream[0].route = 0
 | 
						|
            self.vm.vban.outstream[1].route = 0
 | 
						|
            toggle_soundtest(ENABLE_SOUNDTEST)
 | 
						|
            self.logger.info('Sound Test Enabled')
 | 
						|
        else:
 | 
						|
            toggle_soundtest(DISABLE_SOUNDTEST)
 | 
						|
            self.vm.vban.outstream[0].route = 5
 | 
						|
            self.vm.vban.outstream[1].route = 6
 | 
						|
            self.vm.strip[4].apply({'B3': True, 'A1': False, 'mute': True})
 | 
						|
            self.logger.info('Sound Test Disabled')
 | 
						|
 | 
						|
    def solo_onyx(self):
 | 
						|
        """placeholder method."""
 | 
						|
 | 
						|
    def solo_iris(self):
 | 
						|
        """placeholder method."""
 | 
						|
 | 
						|
    def toggle_workstation_to_onyx(self):
 | 
						|
        self.state.ws_to_onyx = not self.state.ws_to_onyx
 | 
						|
        onyx_conn = configuration.get('vban_onyx')
 | 
						|
        if self.state.ws_to_onyx:
 | 
						|
            with vban_cmd.api('potato', **onyx_conn) as vban:
 | 
						|
                vban.vban.instream[0].on = True
 | 
						|
            self.vm.strip[5].gain = -6
 | 
						|
            self.vm.vban.outstream[2].on = True
 | 
						|
        else:
 | 
						|
            with vban_cmd.api('potato', **onyx_conn) as vban:
 | 
						|
                vban.vban.instream[0].on = False
 | 
						|
            self.vm.strip[5].gain = 0
 | 
						|
            self.vm.vban.outstream[2].on = False
 |