[Update] Controller and DeviceManager: Refactor device management methods for mic and speaker separation

This commit is contained in:
misyaguziya
2025-10-05 21:15:44 +09:00
parent 4b55a9bca2
commit 4b0c7e9775
2 changed files with 70 additions and 38 deletions

View File

@@ -86,27 +86,31 @@ class Controller:
settings, settings,
) )
def restartAccessDevices(self) -> None: def restartAccessMicDevices(self) -> None:
if config.ENABLE_TRANSCRIPTION_SEND is True: if config.ENABLE_TRANSCRIPTION_SEND is True:
self.startThreadingTranscriptionSendMessage() self.startThreadingTranscriptionSendMessage()
if config.ENABLE_TRANSCRIPTION_RECEIVE is True:
self.startThreadingTranscriptionReceiveMessage()
if config.ENABLE_CHECK_ENERGY_SEND is True: if config.ENABLE_CHECK_ENERGY_SEND is True:
model.startCheckMicEnergy( model.startCheckMicEnergy(
self.progressBarMicEnergy, self.progressBarMicEnergy,
) )
def restartAccessSpeakerDevices(self) -> None:
if config.ENABLE_TRANSCRIPTION_RECEIVE is True:
self.startThreadingTranscriptionReceiveMessage()
if config.ENABLE_CHECK_ENERGY_RECEIVE is True: if config.ENABLE_CHECK_ENERGY_RECEIVE is True:
model.startCheckSpeakerEnergy( model.startCheckSpeakerEnergy(
self.progressBarSpeakerEnergy, self.progressBarSpeakerEnergy,
) )
def stopAccessDevices(self) -> None: def stopAccessMicDevices(self) -> None:
if config.ENABLE_TRANSCRIPTION_SEND is True: if config.ENABLE_TRANSCRIPTION_SEND is True:
self.stopThreadingTranscriptionSendMessage() self.stopThreadingTranscriptionSendMessage()
if config.ENABLE_TRANSCRIPTION_RECEIVE is True:
self.stopThreadingTranscriptionReceiveMessage()
if config.ENABLE_CHECK_ENERGY_SEND is True: if config.ENABLE_CHECK_ENERGY_SEND is True:
model.stopCheckMicEnergy() model.stopCheckMicEnergy()
def stopAccessSpeakerDevices(self) -> None:
if config.ENABLE_TRANSCRIPTION_RECEIVE is True:
self.stopThreadingTranscriptionReceiveMessage()
if config.ENABLE_CHECK_ENERGY_RECEIVE is True: if config.ENABLE_CHECK_ENERGY_RECEIVE is True:
model.stopCheckSpeakerEnergy() model.stopCheckSpeakerEnergy()
@@ -1048,22 +1052,25 @@ class Controller:
def getAutoMicSelect(*args, **kwargs) -> dict: def getAutoMicSelect(*args, **kwargs) -> dict:
return {"status":200, "result":config.AUTO_MIC_SELECT} return {"status":200, "result":config.AUTO_MIC_SELECT}
def applyAutoMicSelect(self) -> None:
device_manager.setCallbackProcessBeforeUpdateMicDevices(self.stopAccessMicDevices)
device_manager.setCallbackDefaultMicDevice(self.updateSelectedMicDevice)
device_manager.setCallbackProcessAfterUpdateMicDevices(self.restartAccessMicDevices)
device_manager.forceUpdateAndSetMicDevices()
def setEnableAutoMicSelect(self, *args, **kwargs) -> dict: def setEnableAutoMicSelect(self, *args, **kwargs) -> dict:
if config.AUTO_MIC_SELECT is False: if config.AUTO_MIC_SELECT is False:
self.applyAutoMicSelect()
config.AUTO_MIC_SELECT = True config.AUTO_MIC_SELECT = True
device_manager.setCallbackProcessBeforeUpdateDevices(self.stopAccessDevices)
device_manager.setCallbackDefaultMicDevice(self.updateSelectedMicDevice)
device_manager.setCallbackProcessAfterUpdateDevices(self.restartAccessDevices)
device_manager.forceUpdateAndSetMicDevices()
return {"status":200, "result":config.AUTO_MIC_SELECT} return {"status":200, "result":config.AUTO_MIC_SELECT}
@staticmethod @staticmethod
def setDisableAutoMicSelect(*args, **kwargs) -> dict: def setDisableAutoMicSelect(*args, **kwargs) -> dict:
if config.AUTO_MIC_SELECT is True: if config.AUTO_MIC_SELECT is True:
config.AUTO_MIC_SELECT = False device_manager.clearCallbackProcessBeforeUpdateMicDevices()
device_manager.clearCallbackProcessBeforeUpdateDevices()
device_manager.clearCallbackDefaultMicDevice() device_manager.clearCallbackDefaultMicDevice()
device_manager.clearCallbackProcessAfterUpdateDevices() device_manager.clearCallbackProcessAfterUpdateMicDevices()
config.AUTO_MIC_SELECT = False
return {"status":200, "result":config.AUTO_MIC_SELECT} return {"status":200, "result":config.AUTO_MIC_SELECT}
@staticmethod @staticmethod
@@ -1245,22 +1252,25 @@ class Controller:
def getAutoSpeakerSelect(*args, **kwargs) -> dict: def getAutoSpeakerSelect(*args, **kwargs) -> dict:
return {"status":200, "result":config.AUTO_SPEAKER_SELECT} return {"status":200, "result":config.AUTO_SPEAKER_SELECT}
def applyAutoSpeakerSelect(self) -> None:
device_manager.setCallbackProcessBeforeUpdateSpeakerDevices(self.stopAccessSpeakerDevices)
device_manager.setCallbackDefaultSpeakerDevice(self.updateSelectedSpeakerDevice)
device_manager.setCallbackProcessAfterUpdateSpeakerDevices(self.restartAccessSpeakerDevices)
device_manager.forceUpdateAndSetSpeakerDevices()
def setEnableAutoSpeakerSelect(self, *args, **kwargs) -> dict: def setEnableAutoSpeakerSelect(self, *args, **kwargs) -> dict:
if config.AUTO_SPEAKER_SELECT is False: if config.AUTO_SPEAKER_SELECT is False:
self.applyAutoSpeakerSelect()
config.AUTO_SPEAKER_SELECT = True config.AUTO_SPEAKER_SELECT = True
device_manager.setCallbackProcessBeforeUpdateDevices(self.stopAccessDevices)
device_manager.setCallbackDefaultSpeakerDevice(self.updateSelectedSpeakerDevice)
device_manager.setCallbackProcessAfterUpdateDevices(self.restartAccessDevices)
device_manager.forceUpdateAndSetSpeakerDevices()
return {"status":200, "result":config.AUTO_SPEAKER_SELECT} return {"status":200, "result":config.AUTO_SPEAKER_SELECT}
@staticmethod @staticmethod
def setDisableAutoSpeakerSelect(*args, **kwargs) -> dict: def setDisableAutoSpeakerSelect(*args, **kwargs) -> dict:
if config.AUTO_SPEAKER_SELECT is True: if config.AUTO_SPEAKER_SELECT is True:
config.AUTO_SPEAKER_SELECT = False device_manager.clearCallbackProcessBeforeUpdateSpeakerDevices()
device_manager.clearCallbackProcessBeforeUpdateDevices()
device_manager.clearCallbackDefaultSpeakerDevice() device_manager.clearCallbackDefaultSpeakerDevice()
device_manager.clearCallbackProcessAfterUpdateDevices() device_manager.clearCallbackProcessAfterUpdateSpeakerDevices()
config.AUTO_SPEAKER_SELECT = False
return {"status":200, "result":config.AUTO_SPEAKER_SELECT} return {"status":200, "result":config.AUTO_SPEAKER_SELECT}
@staticmethod @staticmethod
@@ -2507,9 +2517,9 @@ class Controller:
printLog("Init Auto Device Selection") printLog("Init Auto Device Selection")
if config.AUTO_MIC_SELECT is True: if config.AUTO_MIC_SELECT is True:
self.setEnableAutoMicSelect() self.applyAutoMicSelect()
if config.AUTO_SPEAKER_SELECT is True: if config.AUTO_SPEAKER_SELECT is True:
self.setEnableAutoSpeakerSelect() self.applyAutoSpeakerSelect()
printLog("Init Overlay") printLog("Init Overlay")
if (config.OVERLAY_SMALL_LOG is True or config.OVERLAY_LARGE_LOG is True): if (config.OVERLAY_SMALL_LOG is True or config.OVERLAY_LARGE_LOG is True):

View File

@@ -178,7 +178,8 @@ class DeviceManager:
sleep(1) sleep(1)
enumerator.UnregisterEndpointNotificationCallback(cb) enumerator.UnregisterEndpointNotificationCallback(cb)
comtypes.CoUninitialize() comtypes.CoUninitialize()
self.runProcessBeforeUpdateDevices() self.runProcessBeforeUpdateMicDevices()
self.runProcessBeforeUpdateSpeakerDevices()
sleep(2) sleep(2)
for _ in range(10): for _ in range(10):
self.update() self.update()
@@ -186,7 +187,8 @@ class DeviceManager:
break break
sleep(2) sleep(2)
self.noticeUpdateDevices() self.noticeUpdateDevices()
self.runProcessAfterUpdateDevices() self.runProcessAfterUpdateMicDevices()
self.runProcessAfterUpdateSpeakerDevices()
except Exception: except Exception:
errorLogging() errorLogging()
finally: finally:
@@ -234,25 +236,45 @@ class DeviceManager:
def clearCallbackSpeakerDeviceList(self): def clearCallbackSpeakerDeviceList(self):
self.callback_speaker_device_list = None self.callback_speaker_device_list = None
def setCallbackProcessBeforeUpdateDevices(self, callback): def setCallbackProcessBeforeUpdateMicDevices(self, callback):
self.callback_process_before_update_devices = callback self.callback_process_before_update_mic_devices = callback
def clearCallbackProcessBeforeUpdateDevices(self): def clearCallbackProcessBeforeUpdateMicDevices(self):
self.callback_process_before_update_devices = None self.callback_process_before_update_mic_devices = None
def runProcessBeforeUpdateDevices(self): def runProcessBeforeUpdateMicDevices(self):
if isinstance(self.callback_process_before_update_devices, Callable): if isinstance(self.callback_process_before_update_mic_devices, Callable):
self.callback_process_before_update_devices() self.callback_process_before_update_mic_devices()
def setCallbackProcessAfterUpdateDevices(self, callback): def setCallbackProcessAfterUpdateMicDevices(self, callback):
self.callback_process_after_update_devices = callback self.callback_process_after_update_mic_devices = callback
def clearCallbackProcessAfterUpdateDevices(self): def clearCallbackProcessAfterUpdateMicDevices(self):
self.callback_process_after_update_devices = None self.callback_process_after_update_mic_devices = None
def runProcessAfterUpdateDevices(self): def runProcessAfterUpdateMicDevices(self):
if isinstance(self.callback_process_after_update_devices, Callable): if isinstance(self.callback_process_after_update_mic_devices, Callable):
self.callback_process_after_update_devices() self.callback_process_after_update_mic_devices()
def setCallbackProcessBeforeUpdateSpeakerDevices(self, callback):
self.callback_process_before_update_speaker_devices = callback
def clearCallbackProcessBeforeUpdateSpeakerDevices(self):
self.callback_process_before_update_speaker_devices = None
def runProcessBeforeUpdateSpeakerDevices(self):
if isinstance(self.callback_process_before_update_speaker_devices, Callable):
self.callback_process_before_update_speaker_devices()
def setCallbackProcessAfterUpdateSpeakerDevices(self, callback):
self.callback_process_after_update_speaker_devices = callback
def clearCallbackProcessAfterUpdateSpeakerDevices(self):
self.callback_process_after_update_speaker_devices = None
def runProcessAfterUpdateSpeakerDevices(self):
if isinstance(self.callback_process_after_update_speaker_devices, Callable):
self.callback_process_after_update_speaker_devices()
def noticeUpdateDevices(self): def noticeUpdateDevices(self):
if self.update_flag_default_mic_device is True: if self.update_flag_default_mic_device is True: