From 92f21c32f6d87e5dddc7af5518ef513ff6d3feb3 Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Wed, 2 Oct 2024 12:34:11 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=F0=9F=9A=A7=20[WIP/TEST]=20Device=E3=81=AE?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E5=A4=89=E6=9B=B4=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-python/model.py | 26 ++- .../transcription/transcription_utils.py | 158 ++++++++++++------ src-python/webui_controller.py | 73 +++++--- 3 files changed, 172 insertions(+), 85 deletions(-) diff --git a/src-python/model.py b/src-python/model.py index 9c8ac248..4c49dd0a 100644 --- a/src-python/model.py +++ b/src-python/model.py @@ -31,6 +31,8 @@ from models.overlay.overlay_image import OverlayImage from config import config +import utils + class threadFnc(Thread): def __init__(self, fnc, end_fnc=None, daemon=True, *args, **kwargs): super(threadFnc, self).__init__(daemon=daemon, target=fnc, *args, **kwargs) @@ -600,14 +602,8 @@ class Model: self.mic_energy_recorder = None def startSpeakerTranscript(self, fnc): - if config.AUTO_SPEAKER_SELECT is True: - default_device = device_manager.getDefaultSpeakerDevice() - speaker_device_name = default_device["device"]["name"] - else: - speaker_device_name = config.SELECTED_SPEAKER_DEVICE - speaker_device_list = device_manager.getSpeakerDevices() - selected_speaker_device = [device for device in speaker_device_list if device["name"] == speaker_device_name] + selected_speaker_device = [device for device in speaker_device_list if device["name"] == config.SELECTED_SPEAKER_DEVICE] if len(selected_speaker_device) == 0: return False @@ -678,12 +674,16 @@ class Model: def stopSpeakerTranscript(self): if isinstance(self.speaker_print_transcript, threadFnc): + utils.printLog("stop speaker_print_transcript") self.speaker_print_transcript.stop() self.speaker_print_transcript.join() self.speaker_print_transcript = None + utils.printLog("stopped speaker_audio_recorder") if isinstance(self.speaker_audio_recorder, SelectedSpeakerEnergyAndAudioRecorder): + utils.printLog("stop speaker_audio_recorder") self.speaker_audio_recorder.stop() self.speaker_audio_recorder = None + utils.printLog("stopped speaker_audio_recorder") # if isinstance(self.speaker_get_energy, threadFnc): # self.speaker_get_energy.stop() # self.speaker_get_energy = None @@ -692,14 +692,8 @@ class Model: if isinstance(fnc, Callable): self.check_speaker_energy_fnc = fnc - if config.AUTO_SPEAKER_SELECT is True: - default_device = device_manager.getDefaultSpeakerDevice() - speaker_device_name = default_device["device"]["name"] - else: - speaker_device_name = config.SELECTED_SPEAKER_DEVICE - speaker_device_list = device_manager.getSpeakerDevices() - selected_speaker_device = [device for device in speaker_device_list if device["name"] == speaker_device_name] + selected_speaker_device = [device for device in speaker_device_list if device["name"] == config.SELECTED_SPEAKER_DEVICE] if len(selected_speaker_device) == 0: return False @@ -723,13 +717,17 @@ class Model: def stopCheckSpeakerEnergy(self): if isinstance(self.speaker_energy_plot_progressbar, threadFnc): + utils.printLog("stop speaker_energy_plot_progressbar") self.speaker_energy_plot_progressbar.stop() self.speaker_energy_plot_progressbar.join() self.speaker_energy_plot_progressbar = None + utils.printLog("stopped speaker_energy_plot_progressbar") if isinstance(self.speaker_energy_recorder, SelectedSpeakerEnergyRecorder): + utils.printLog("stopped speaker_energy_recorder") self.speaker_energy_recorder.resume() self.speaker_energy_recorder.stop() self.speaker_energy_recorder = None + utils.printLog("stopped speaker_energy_recorder") def createOverlayImageShort(self, message, translation): your_language = config.SELECTED_TARGET_LANGUAGES[config.SELECTED_TAB_NO]["primary"]["language"] diff --git a/src-python/models/transcription/transcription_utils.py b/src-python/models/transcription/transcription_utils.py index f33a6983..0d2ac050 100644 --- a/src-python/models/transcription/transcription_utils.py +++ b/src-python/models/transcription/transcription_utils.py @@ -4,6 +4,7 @@ import comtypes from pyaudiowpatch import PyAudio, paWASAPI from pycaw.callbacks import MMNotificationClient from pycaw.utils import AudioUtilities +from utils import printLog class Client(MMNotificationClient): def __init__(self): @@ -22,8 +23,8 @@ class Client(MMNotificationClient): def on_device_state_changed(self, device_id, state): self.loop = False - def on_property_value_changed(self, device_id, key): - self.loop = False + # def on_property_value_changed(self, device_id, key): + # self.loop = False class DeviceManager: _instance = None @@ -39,6 +40,7 @@ class DeviceManager: self.default_mic_device = {"host": {"name": "NoHost"}, "device": {"name": "NoDevice"}} self.speaker_devices = [{"name": "NoDevice"}] self.default_speaker_device = {"device": {"name": "NoDevice"}} + self.update() self.prev_mic_host = [host for host in self.mic_devices] @@ -47,12 +49,19 @@ class DeviceManager: self.prev_speaker_devices = self.speaker_devices self.prev_default_speaker_device = self.default_speaker_device + self.update_flag_default_mic_device = False + self.update_flag_default_speaker_device = False + self.update_flag_host_list = False + self.update_flag_mic_device_list = False + self.update_flag_speaker_device_list = False + self.callback_default_mic_device = None self.callback_default_speaker_device = None self.callback_host_list = None self.callback_mic_device_list = None self.callback_speaker_device_list = None - self.callback_prev_update = None + self.callback_process_before_update_devices = None + self.callback_process_after_update_devices = None self.monitoring_flag = False self.startMonitoring() @@ -130,30 +139,71 @@ class DeviceManager: self.speaker_devices = buffer_speaker_devices self.default_speaker_device = buffer_default_speaker_device + def checkUpdate(self): + printLog("checkUpdate") + if self.prev_default_mic_device["device"]["name"] != self.default_mic_device["device"]["name"]: + printLog("checkUpdate: default_mic_device") + self.update_flag_default_mic_device = True + self.prev_default_mic_device = self.default_mic_device + if self.prev_default_speaker_device["device"]["name"] != self.default_speaker_device["device"]["name"]: + printLog("checkUpdate: default_speaker_device") + self.update_flag_default_speaker_device = True + self.prev_default_speaker_device = self.default_speaker_device + if self.prev_mic_host != [host for host in self.mic_devices]: + printLog("checkUpdate: mic_host") + self.update_flag_host_list = True + self.prev_mic_host = [host for host in self.mic_devices] + if self.prev_mic_devices != self.mic_devices: + printLog("checkUpdate: mic_devices") + self.update_flag_mic_device_list = True + self.prev_mic_devices = self.mic_devices + if self.prev_speaker_devices != self.speaker_devices: + printLog("checkUpdate: speaker_devices") + self.update_flag_speaker_device_list = True + self.prev_speaker_devices = self.speaker_devices + + update_flag = ( + self.update_flag_default_mic_device or + self.update_flag_default_speaker_device or + self.update_flag_host_list or + self.update_flag_mic_device_list or + self.update_flag_speaker_device_list + ) + return update_flag + def monitoring(self): - comtypes.CoInitialize() - cb = Client() - enumerator = AudioUtilities.GetDeviceEnumerator() - enumerator.RegisterEndpointNotificationCallback(cb) try: while self.monitoring_flag is True: try: - while cb.loop is True: + comtypes.CoInitialize() + self.cb = Client() + self.enumerator = AudioUtilities.GetDeviceEnumerator() + self.enumerator.RegisterEndpointNotificationCallback(self.cb) + while self.cb.loop is True: + printLog("Monitoring Loop") sleep(1) - enumerator.UnregisterEndpointNotificationCallback(cb) - self.runPrevUpdateDevices() + self.enumerator.UnregisterEndpointNotificationCallback(self.cb) + except Exception as e: + printLog("Device Monitoring: ", e) + finally: + printLog("Device Monitoring Finally Init") + comtypes.CoUninitialize() + + printLog("Run Process Before Update Devices") + self.runProcessBeforeUpdateDevices() + while True: sleep(2) self.update() - self.noticeDefaultDevice() - except Exception: - pass - finally: - cb = Client() - enumerator = AudioUtilities.GetDeviceEnumerator() - enumerator.RegisterEndpointNotificationCallback(cb) - except Exception: - pass - comtypes.CoUninitialize() + if self.checkUpdate() is True: + break + printLog("Notice Update Devices") + self.noticeUpdateDevices() + printLog("Run Process After Update Devices") + self.runProcessAfterUpdateDevices() + + except Exception as e: + printLog("Device Monitoring Exception: ", e) + printLog("Device Monitoring End") def startMonitoring(self): self.monitoring_flag = True @@ -195,47 +245,57 @@ class DeviceManager: def clearCallbackSpeakerDeviceList(self): self.callback_speaker_device_list = None - def setCallbackPrevUpdateDevices(self, callback): - self.callback_prev_update = callback + def setCallbackProcessBeforeUpdateDevices(self, callback): + self.callback_process_before_update_devices = callback - def clearCallbackPrevUpdateDevices(self): - self.callback_prev_update = None + def clearCallbackProcessBeforeUpdateDevices(self): + self.callback_process_before_update_devices = None - def runPrevUpdateDevices(self): - self.callback_prev_update() + def runProcessBeforeUpdateDevices(self): + self.callback_process_before_update_devices() - def noticeDefaultDevice(self): - if self.callback_default_mic_device is not None: - if self.prev_default_mic_device["device"]["name"] != self.default_mic_device["device"]["name"]: - self.callback_default_mic_device(self.default_mic_device["host"]["name"], self.default_mic_device["device"]["name"]) - self.prev_default_mic_device = self.default_mic_device + def setCallbackProcessAfterUpdateDevices(self, callback): + self.callback_process_after_update_devices = callback - if self.callback_default_speaker_device is not None: - if self.prev_default_speaker_device["device"]["name"] != self.default_speaker_device["device"]["name"]: - self.callback_default_speaker_device(self.default_speaker_device["device"]["name"]) - self.prev_default_speaker_device = self.default_speaker_device + def clearCallbackProcessAfterUpdateDevices(self): + self.callback_process_after_update_devices = None - if self.callback_host_list is not None: - if self.prev_mic_host != [host for host in self.mic_devices]: - self.callback_host_list() - self.prev_mic_host = [host for host in self.mic_devices] + def runProcessAfterUpdateDevices(self): + self.callback_process_after_update_devices() - if self.callback_mic_device_list is not None: - if {key: [device['name'] for device in devices] for key, devices in self.prev_mic_devices.items()} != {key: [device['name'] for device in devices] for key, devices in self.mic_devices.items()}: - self.callback_mic_device_list() - self.prev_mic_devices = self.mic_devices + def noticeUpdateDevices(self): + if self.callback_default_mic_device is not None and self.update_flag_default_mic_device is True: + self.setMicDefaultDevice() + if self.callback_default_speaker_device is not None and self.update_flag_default_speaker_device is True: + self.setSpeakerDefaultDevice() + if self.callback_host_list is not None and self.update_flag_host_list is True: + self.setMicHost() + if self.callback_mic_device_list is not None and self.update_flag_mic_device_list is True: + self.setMicDeviceList() + if self.callback_speaker_device_list is not None and self.update_flag_speaker_device_list is True: + self.setSpeakerDeviceList() - if self.callback_speaker_device_list is not None: - if [device['name'] for device in self.prev_speaker_devices] != [device['name'] for device in self.speaker_devices]: - self.callback_speaker_device_list() - self.prev_speaker_devices = self.speaker_devices + self.update_flag_default_mic_device = False + self.update_flag_default_speaker_device = False + self.update_flag_host_list = False + self.update_flag_mic_device_list = False + self.update_flag_speaker_device_list = False - def forceSetMicDefaultDevice(self): + def setMicDefaultDevice(self): self.callback_default_mic_device(self.default_mic_device["host"]["name"], self.default_mic_device["device"]["name"]) - def forceSetSpeakerDefaultDevice(self): + def setSpeakerDefaultDevice(self): self.callback_default_speaker_device(self.default_speaker_device["device"]["name"]) + def setMicHost(self): + self.callback_host_list() + + def setMicDeviceList(self): + self.callback_mic_device_list() + + def setSpeakerDeviceList(self): + self.callback_speaker_device_list() + def getMicDevices(self): return self.mic_devices diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index 58a4ea6b..07c56284 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -56,7 +56,25 @@ class Controller: model.getListSpeakerDevice(), ) - def prevUpdateSelectedDevices(self) -> None: + def restartAccessDevices(self) -> None: + if config.ENABLE_TRANSCRIPTION_SEND is True: + printLog("Restart Access Devices", "Start Mic Transcript") + self.startThreadingTranscriptionSendMessage() + if config.ENABLE_TRANSCRIPTION_RECEIVE is True: + printLog("Restart Access Devices", "Start Speaker Transcript") + self.startThreadingTranscriptionReceiveMessage() + if config.ENABLE_CHECK_ENERGY_SEND is True: + printLog("Restart Access Devices", "Start Check Mic Energy") + model.startCheckMicEnergy( + self.progressBarMicEnergy, + ) + if config.ENABLE_CHECK_ENERGY_RECEIVE is True: + printLog("Restart Access Devices", "Start Check Speaker Energy") + model.startCheckSpeakerEnergy( + self.progressBarSpeakerEnergy, + ) + + def stopAccessDevices(self) -> None: if config.ENABLE_TRANSCRIPTION_SEND is True: model.stopMicTranscript() if config.ENABLE_TRANSCRIPTION_RECEIVE is True: @@ -70,9 +88,11 @@ class Controller: config.SELECTED_MIC_HOST = host config.SELECTED_MIC_DEVICE = device if config.ENABLE_TRANSCRIPTION_SEND is True: - model.startMicTranscript() + self.startThreadingTranscriptionSendMessage() if config.ENABLE_CHECK_ENERGY_SEND is True: - model.startCheckMicEnergy() + model.startCheckMicEnergy( + self.progressBarMicEnergy, + ) self.run( 200, self.run_mapping["selected_mic_device"], @@ -82,9 +102,11 @@ class Controller: def updateSelectedSpeakerDevice(self, device) -> None: config.SELECTED_SPEAKER_DEVICE = device if config.ENABLE_TRANSCRIPTION_RECEIVE is True: - model.startSpeakerTranscript() + self.startThreadingTranscriptionReceiveMessage() if config.ENABLE_CHECK_ENERGY_RECEIVE is True: - model.startCheckSpeakerEnergy() + model.startCheckSpeakerEnergy( + self.progressBarSpeakerEnergy, + ) self.run( 200, self.run_mapping["selected_speaker_device"], @@ -599,16 +621,18 @@ class Controller: def setEnableAutoMicSelect(self, *args, **kwargs) -> dict: config.AUTO_MIC_SELECT = True - device_manager.setCallbackPrevUpdateDevices(self.prevUpdateSelectedDevices) + device_manager.setCallbackProcessBeforeUpdateDevices(self.stopAccessDevices) device_manager.setCallbackDefaultMicDevice(self.updateSelectedMicDevice) - device_manager.noticeDefaultDevice() - device_manager.forceSetMicDefaultDevice() + device_manager.setCallbackProcessAfterUpdateDevices(self.restartAccessDevices) + device_manager.noticeUpdateDevices() + device_manager.setMicDefaultDevice() return {"status":200, "result":config.AUTO_MIC_SELECT} @staticmethod def setDisableAutoMicSelect(*args, **kwargs) -> dict: - device_manager.clearCallbackPrevUpdateDevices() + device_manager.clearCallbackProcessBeforeUpdateDevices() device_manager.clearCallbackDefaultMicDevice() + device_manager.clearCallbackProcessAfterUpdateDevices() config.AUTO_MIC_SELECT = False return {"status":200, "result":config.AUTO_MIC_SELECT} @@ -616,13 +640,14 @@ class Controller: def getSelectedMicHost(*args, **kwargs) -> dict: return {"status":200, "result":config.SELECTED_MIC_HOST} - @staticmethod - def setSelectedMicHost(data, *args, **kwargs) -> dict: + def setSelectedMicHost(self, data, *args, **kwargs) -> dict: config.SELECTED_MIC_HOST = data config.SELECTED_MIC_DEVICE = model.getMicDefaultDevice() if config.ENABLE_CHECK_ENERGY_SEND is True: model.stopCheckMicEnergy() - model.startCheckMicEnergy() + model.startCheckMicEnergy( + self.progressBarMicEnergy, + ) return {"status":200, "result":{ "host":config.SELECTED_MIC_HOST, @@ -634,12 +659,13 @@ class Controller: def getSelectedMicDevice(*args, **kwargs) -> dict: return {"status":200, "result":config.SELECTED_MIC_DEVICE} - @staticmethod - def setSelectedMicDevice(data, *args, **kwargs) -> dict: + def setSelectedMicDevice(self, data, *args, **kwargs) -> dict: config.SELECTED_MIC_DEVICE = data if config.ENABLE_CHECK_ENERGY_SEND is True: model.stopCheckMicEnergy() - model.startCheckMicEnergy() + model.startCheckMicEnergy( + self.progressBarMicEnergy, + ) return {"status":200, "result": config.SELECTED_MIC_DEVICE} @staticmethod @@ -784,16 +810,18 @@ class Controller: def setEnableAutoSpeakerSelect(self, *args, **kwargs) -> dict: config.AUTO_SPEAKER_SELECT = True - device_manager.setCallbackPrevUpdateDevices(self.prevUpdateSelectedDevices) + device_manager.setCallbackProcessBeforeUpdateDevices(self.stopAccessDevices) device_manager.setCallbackDefaultSpeakerDevice(self.updateSelectedSpeakerDevice) - device_manager.noticeDefaultDevice() - device_manager.forceSetSpeakerDefaultDevice() + device_manager.setCallbackProcessAfterUpdateDevices(self.restartAccessDevices) + device_manager.noticeUpdateDevices() + device_manager.setSpeakerDefaultDevice() return {"status":200, "result":config.AUTO_SPEAKER_SELECT} @staticmethod def setDisableAutoSpeakerSelect(*args, **kwargs) -> dict: - device_manager.clearCallbackPrevUpdateDevices() + device_manager.clearCallbackProcessBeforeUpdateDevices() device_manager.clearCallbackDefaultSpeakerDevice() + device_manager.clearCallbackProcessAfterUpdateDevices() config.AUTO_SPEAKER_SELECT = False return {"status":200, "result":config.AUTO_SPEAKER_SELECT} @@ -801,12 +829,13 @@ class Controller: def getSelectedSpeakerDevice(*args, **kwargs) -> dict: return {"status":200, "result":config.SELECTED_SPEAKER_DEVICE} - @staticmethod - def setSelectedSpeakerDevice(data, *args, **kwargs) -> dict: + def setSelectedSpeakerDevice(self, data, *args, **kwargs) -> dict: config.SELECTED_SPEAKER_DEVICE = data if config.ENABLE_CHECK_ENERGY_RECEIVE is True: model.stopCheckSpeakerEnergy() - model.startCheckSpeakerEnergy() + model.startCheckSpeakerEnergy( + self.progressBarSpeakerEnergy, + ) return {"status":200, "result":config.SELECTED_SPEAKER_DEVICE} @staticmethod From d183c56736aa02b52e600e8b13051fbd7694f4ec Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Thu, 3 Oct 2024 15:50:25 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=F0=9F=9A=A7=20[WIP/TEST]=20Device=E3=81=AE?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E5=A4=89=E6=9B=B4=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 検出処理を修正、たまに変化を検出しても応答しない場合がある --- .../transcription/transcription_utils.py | 37 +++++++------------ src-python/webui_controller.py | 4 +- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src-python/models/transcription/transcription_utils.py b/src-python/models/transcription/transcription_utils.py index 0d2ac050..d1f0cc62 100644 --- a/src-python/models/transcription/transcription_utils.py +++ b/src-python/models/transcription/transcription_utils.py @@ -140,7 +140,6 @@ class DeviceManager: self.default_speaker_device = buffer_default_speaker_device def checkUpdate(self): - printLog("checkUpdate") if self.prev_default_mic_device["device"]["name"] != self.default_mic_device["device"]["name"]: printLog("checkUpdate: default_mic_device") self.update_flag_default_mic_device = True @@ -176,34 +175,26 @@ class DeviceManager: while self.monitoring_flag is True: try: comtypes.CoInitialize() - self.cb = Client() - self.enumerator = AudioUtilities.GetDeviceEnumerator() - self.enumerator.RegisterEndpointNotificationCallback(self.cb) - while self.cb.loop is True: - printLog("Monitoring Loop") + cb = Client() + enumerator = AudioUtilities.GetDeviceEnumerator() + enumerator.RegisterEndpointNotificationCallback(cb) + while cb.loop is True: sleep(1) - self.enumerator.UnregisterEndpointNotificationCallback(self.cb) + enumerator.UnregisterEndpointNotificationCallback(cb) + comtypes.CoUninitialize() + self.runProcessBeforeUpdateDevices() + sleep(2) + self.update() + self.checkUpdate() + self.noticeUpdateDevices() + self.runProcessAfterUpdateDevices() except Exception as e: printLog("Device Monitoring: ", e) finally: printLog("Device Monitoring Finally Init") - comtypes.CoUninitialize() - - printLog("Run Process Before Update Devices") - self.runProcessBeforeUpdateDevices() - while True: - sleep(2) - self.update() - if self.checkUpdate() is True: - break - printLog("Notice Update Devices") - self.noticeUpdateDevices() - printLog("Run Process After Update Devices") - self.runProcessAfterUpdateDevices() - except Exception as e: - printLog("Device Monitoring Exception: ", e) - printLog("Device Monitoring End") + printLog("Device Monitoring End Exception: ", e) + def startMonitoring(self): self.monitoring_flag = True diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index 07c56284..7b055401 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -76,9 +76,9 @@ class Controller: def stopAccessDevices(self) -> None: if config.ENABLE_TRANSCRIPTION_SEND is True: - model.stopMicTranscript() + self.stopThreadingTranscriptionSendMessage() if config.ENABLE_TRANSCRIPTION_RECEIVE is True: - model.stopSpeakerTranscript() + self.stopThreadingTranscriptionReceiveMessage() if config.ENABLE_CHECK_ENERGY_SEND is True: model.stopCheckMicEnergy() if config.ENABLE_CHECK_ENERGY_RECEIVE is True: From 65f25725e97a56ed988f265e69aa286f013a904b Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Thu, 3 Oct 2024 17:59:25 +0900 Subject: [PATCH 3/7] =?UTF-8?q?=F0=9F=9A=A7=20[WIP/TEST]=20Device=E3=81=AE?= =?UTF-8?q?=E8=87=AA=E5=8B=95=E5=A4=89=E6=9B=B4=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Energyの取得処理を修正 --- .../transcription/transcription_utils.py | 13 ++- src-python/webui_controller.py | 104 ++++++++++-------- 2 files changed, 70 insertions(+), 47 deletions(-) diff --git a/src-python/models/transcription/transcription_utils.py b/src-python/models/transcription/transcription_utils.py index d1f0cc62..02a6e4c5 100644 --- a/src-python/models/transcription/transcription_utils.py +++ b/src-python/models/transcription/transcription_utils.py @@ -134,6 +134,8 @@ class DeviceManager: if buffer_default_speaker_device["device"]["name"] != "NoDevice": break + printLog(self.mic_devices) + self.mic_devices = buffer_mic_devices self.default_mic_device = buffer_default_mic_device self.speaker_devices = buffer_speaker_devices @@ -152,11 +154,11 @@ class DeviceManager: printLog("checkUpdate: mic_host") self.update_flag_host_list = True self.prev_mic_host = [host for host in self.mic_devices] - if self.prev_mic_devices != self.mic_devices: + if {key: [device['name'] for device in devices] for key, devices in self.prev_mic_devices.items()} != {key: [device['name'] for device in devices] for key, devices in self.mic_devices.items()}: printLog("checkUpdate: mic_devices") self.update_flag_mic_device_list = True self.prev_mic_devices = self.mic_devices - if self.prev_speaker_devices != self.speaker_devices: + if [device['name'] for device in self.prev_speaker_devices] != [device['name'] for device in self.speaker_devices]: printLog("checkUpdate: speaker_devices") self.update_flag_speaker_device_list = True self.prev_speaker_devices = self.speaker_devices @@ -184,8 +186,11 @@ class DeviceManager: comtypes.CoUninitialize() self.runProcessBeforeUpdateDevices() sleep(2) - self.update() - self.checkUpdate() + for _ in range(10): + self.update() + if self.checkUpdate(): + break + sleep(2) self.noticeUpdateDevices() self.runProcessAfterUpdateDevices() except Exception as e: diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index 7b055401..b8e05e99 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -12,7 +12,7 @@ class Controller: def __init__(self) -> None: self.run_mapping = {} self.run = None - self.transcription_access_status = True + self.device_access_status = True def setRunMapping(self, run_mapping:dict) -> None: self.run_mapping = run_mapping @@ -87,12 +87,6 @@ class Controller: def updateSelectedMicDevice(self, host, device) -> None: config.SELECTED_MIC_HOST = host config.SELECTED_MIC_DEVICE = device - if config.ENABLE_TRANSCRIPTION_SEND is True: - self.startThreadingTranscriptionSendMessage() - if config.ENABLE_CHECK_ENERGY_SEND is True: - model.startCheckMicEnergy( - self.progressBarMicEnergy, - ) self.run( 200, self.run_mapping["selected_mic_device"], @@ -101,12 +95,6 @@ class Controller: def updateSelectedSpeakerDevice(self, device) -> None: config.SELECTED_SPEAKER_DEVICE = device - if config.ENABLE_TRANSCRIPTION_RECEIVE is True: - self.startThreadingTranscriptionReceiveMessage() - if config.ENABLE_CHECK_ENERGY_RECEIVE is True: - model.startCheckSpeakerEnergy( - self.progressBarSpeakerEnergy, - ) self.run( 200, self.run_mapping["selected_speaker_device"], @@ -644,10 +632,8 @@ class Controller: config.SELECTED_MIC_HOST = data config.SELECTED_MIC_DEVICE = model.getMicDefaultDevice() if config.ENABLE_CHECK_ENERGY_SEND is True: - model.stopCheckMicEnergy() - model.startCheckMicEnergy( - self.progressBarMicEnergy, - ) + self.stopThreadingCheckMicEnergy() + self.startThreadingTranscriptionSendMessage() return {"status":200, "result":{ "host":config.SELECTED_MIC_HOST, @@ -662,10 +648,8 @@ class Controller: def setSelectedMicDevice(self, data, *args, **kwargs) -> dict: config.SELECTED_MIC_DEVICE = data if config.ENABLE_CHECK_ENERGY_SEND is True: - model.stopCheckMicEnergy() - model.startCheckMicEnergy( - self.progressBarMicEnergy, - ) + self.stopThreadingCheckMicEnergy() + self.startThreadingTranscriptionSendMessage() return {"status":200, "result": config.SELECTED_MIC_DEVICE} @staticmethod @@ -832,10 +816,8 @@ class Controller: def setSelectedSpeakerDevice(self, data, *args, **kwargs) -> dict: config.SELECTED_SPEAKER_DEVICE = data if config.ENABLE_CHECK_ENERGY_RECEIVE is True: - model.stopCheckSpeakerEnergy() - model.startCheckSpeakerEnergy( - self.progressBarSpeakerEnergy, - ) + self.stopThreadingCheckSpeakerEnergy() + self.startThreadingTranscriptionReceiveMessage() return {"status":200, "result":config.SELECTED_SPEAKER_DEVICE} @staticmethod @@ -1293,28 +1275,22 @@ class Controller: return {"status":200, "result":config.VRC_MIC_MUTE_SYNC} def setEnableCheckSpeakerThreshold(self, *args, **kwargs) -> dict: - model.startCheckSpeakerEnergy( - self.progressBarSpeakerEnergy, - ) + self.startThreadingCheckSpeakerEnergy() config.ENABLE_CHECK_ENERGY_RECEIVE = True return {"status":200, "result":config.ENABLE_CHECK_ENERGY_RECEIVE} - @staticmethod - def setDisableCheckSpeakerThreshold(*args, **kwargs) -> dict: - model.stopCheckSpeakerEnergy() + def setDisableCheckSpeakerThreshold(self, *args, **kwargs) -> dict: + self.stopThreadingCheckSpeakerEnergy() config.ENABLE_CHECK_ENERGY_RECEIVE = False return {"status":200, "result":config.ENABLE_CHECK_ENERGY_RECEIVE} def setEnableCheckMicThreshold(self, *args, **kwargs) -> dict: - model.startCheckMicEnergy( - self.progressBarMicEnergy, - ) + self.startThreadingCheckMicEnergy() config.ENABLE_CHECK_ENERGY_SEND = True return {"status":200, "result":config.ENABLE_CHECK_ENERGY_SEND} - @staticmethod - def setDisableCheckMicThreshold(*args, **kwargs) -> dict: - model.stopCheckMicEnergy() + def setDisableCheckMicThreshold(self, *args, **kwargs) -> dict: + self.stopThreadingCheckMicEnergy() config.ENABLE_CHECK_ENERGY_SEND = False return {"status":200, "result":config.ENABLE_CHECK_ENERGY_SEND} @@ -1428,11 +1404,11 @@ class Controller: self.run(200, self.run_mapping["translation_engines"], "CTranslate2") def startTranscriptionSendMessage(self) -> None: - while self.transcription_access_status is False: + while self.device_access_status is False: sleep(1) - self.transcription_access_status = False + self.device_access_status = False model.startMicTranscript(self.micMessage) - self.transcription_access_status = True + self.device_access_status = True @staticmethod def stopTranscriptionSendMessage() -> None: @@ -1450,11 +1426,11 @@ class Controller: th_stopTranscriptionSendMessage.join() def startTranscriptionReceiveMessage(self) -> None: - while self.transcription_access_status is False: + while self.device_access_status is False: sleep(1) - self.transcription_access_status = False + self.device_access_status = False model.startSpeakerTranscript(self.speakerMessage) - self.transcription_access_status = True + self.device_access_status = True @staticmethod def stopTranscriptionReceiveMessage() -> None: @@ -1520,6 +1496,48 @@ class Controller: self.run(200, self.run_mapping["selected_translation_engines"], config.SELECTED_TRANSLATION_ENGINES) self.run(200, self.run_mapping["translation_engines"], engines) + def startCheckMicEnergy(self) -> None: + while self.device_access_status is False: + sleep(1) + self.device_access_status = False + model.startCheckMicEnergy(self.progressBarMicEnergy) + self.device_access_status = True + + def startThreadingCheckMicEnergy(self) -> None: + th_startCheckMicEnergy = Thread(target=self.startCheckMicEnergy) + th_startCheckMicEnergy.daemon = True + th_startCheckMicEnergy.start() + + def stopCheckMicEnergy(self) -> None: + model.stopCheckMicEnergy() + + def stopThreadingCheckMicEnergy(self) -> None: + th_stopCheckMicEnergy = Thread(target=self.stopCheckMicEnergy) + th_stopCheckMicEnergy.daemon = True + th_stopCheckMicEnergy.start() + th_stopCheckMicEnergy.join() + + def startCheckSpeakerEnergy(self) -> None: + while self.device_access_status is False: + sleep(1) + self.device_access_status = False + model.startCheckSpeakerEnergy(self.progressBarSpeakerEnergy) + self.device_access_status = True + + def startThreadingCheckSpeakerEnergy(self) -> None: + th_startCheckSpeakerEnergy = Thread(target=self.startCheckSpeakerEnergy) + th_startCheckSpeakerEnergy.daemon = True + th_startCheckSpeakerEnergy.start() + + def stopCheckSpeakerEnergy(self) -> None: + model.stopCheckSpeakerEnergy() + + def stopThreadingCheckSpeakerEnergy(self) -> None: + th_stopCheckSpeakerEnergy = Thread(target=self.stopCheckSpeakerEnergy) + th_stopCheckSpeakerEnergy.daemon = True + th_stopCheckSpeakerEnergy.start() + th_stopCheckSpeakerEnergy.join() + @staticmethod def startThreadingDownloadCtranslate2Weight(callback:Callable[[float], None]) -> None: th_download = Thread(target=model.downloadCTranslate2ModelWeight, args=(callback,)) From c953661046d8cdadff3803a0f7aeac205e0e9a49 Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Fri, 4 Oct 2024 13:16:34 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=F0=9F=91=8D=EF=B8=8F[Update]=20Controller?= =?UTF-8?q?=20:=20Device=E3=81=AE=E8=87=AA=E5=8B=95=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 2 +- src-python/model.py | 22 ++++--------- .../transcription/transcription_recorder.py | 32 +++++++++++++++---- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/requirements.txt b/requirements.txt index 72270760..dbe35d50 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,5 +16,5 @@ psutil==5.9.8 pykakasi==2.3.0 pycaw==20240210 translators @ git+https://github.com/misyaguziya/translators@5.9.2.1 -SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4 +SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4.1 tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.2 \ No newline at end of file diff --git a/src-python/model.py b/src-python/model.py index 4c49dd0a..0c1431cf 100644 --- a/src-python/model.py +++ b/src-python/model.py @@ -426,13 +426,8 @@ class Model: return result def startMicTranscript(self, fnc): - if config.AUTO_MIC_SELECT is True: - default_device = device_manager.getDefaultMicDevice() - mic_host_name = default_device["host"]["name"] - mic_device_name = default_device["device"]["name"] - else: - mic_host_name = config.SELECTED_MIC_HOST - mic_device_name = config.SELECTED_MIC_DEVICE + mic_host_name = config.SELECTED_MIC_HOST + mic_device_name = config.SELECTED_MIC_DEVICE mic_device_list = device_manager.getMicDevices().get(mic_host_name, [{"name": "NoDevice"}]) selected_mic_device = [device for device in mic_device_list if device["name"] == mic_device_name] @@ -453,7 +448,7 @@ class Model: device=mic_device, energy_threshold=config.MIC_THRESHOLD, dynamic_energy_threshold=config.MIC_AUTOMATIC_THRESHOLD, - record_timeout=record_timeout, + phrase_time_limit=record_timeout, ) # self.mic_audio_recorder.recordIntoQueue(self.mic_audio_queue, mic_energy_queue) self.mic_audio_recorder.recordIntoQueue(self.mic_audio_queue, None) @@ -560,13 +555,8 @@ class Model: if isinstance(fnc, Callable): self.check_mic_energy_fnc = fnc - if config.AUTO_MIC_SELECT is True: - default_device = device_manager.getDefaultMicDevice() - mic_host_name = default_device["host"]["name"] - mic_device_name = default_device["device"]["name"] - else: - mic_host_name = config.SELECTED_MIC_HOST - mic_device_name = config.SELECTED_MIC_DEVICE + mic_host_name = config.SELECTED_MIC_HOST + mic_device_name = config.SELECTED_MIC_DEVICE mic_device_list = device_manager.getMicDevices().get(mic_host_name, [{"name": "NoDevice"}]) selected_mic_device = [device for device in mic_device_list if device["name"] == mic_device_name] @@ -620,7 +610,7 @@ class Model: device=speaker_device, energy_threshold=config.SPEAKER_THRESHOLD, dynamic_energy_threshold=config.SPEAKER_AUTOMATIC_THRESHOLD, - record_timeout=record_timeout, + phrase_time_limit=record_timeout, ) # self.speaker_audio_recorder.recordIntoQueue(speaker_audio_queue, speaker_energy_queue) self.speaker_audio_recorder.recordIntoQueue(speaker_audio_queue, None) diff --git a/src-python/models/transcription/transcription_recorder.py b/src-python/models/transcription/transcription_recorder.py index 0e9b147d..f30c071f 100644 --- a/src-python/models/transcription/transcription_recorder.py +++ b/src-python/models/transcription/transcription_recorder.py @@ -91,10 +91,12 @@ class SelectedSpeakerEnergyRecorder(BaseEnergyRecorder): # self.adjustForNoise() class BaseEnergyAndAudioRecorder: - def __init__(self, source, energy_threshold, dynamic_energy_threshold, record_timeout): + def __init__(self, source, energy_threshold, dynamic_energy_threshold, phrase_time_limit, phrase_timeout, record_timeout): self.recorder = Recognizer() self.recorder.energy_threshold = energy_threshold self.recorder.dynamic_energy_threshold = dynamic_energy_threshold + self.phrase_time_limit = phrase_time_limit + self.phrase_timeout = phrase_timeout self.record_timeout = record_timeout self.stop = None @@ -117,20 +119,29 @@ class BaseEnergyAndAudioRecorder: self.stop, self.pause, self.resume = self.recorder.listen_energy_and_audio_in_background( source=self.source, callback=audioRecordCallback, - phrase_time_limit=self.record_timeout, - callback_energy=energyRecordCallback if energy_queue is not None else None) + phrase_time_limit=self.phrase_time_limit, + callback_energy=energyRecordCallback if energy_queue is not None else None, + phrase_timeout=self.phrase_timeout, + record_timeout=self.record_timeout) class SelectedMicEnergyAndAudioRecorder(BaseEnergyAndAudioRecorder): - def __init__(self, device, energy_threshold, dynamic_energy_threshold, record_timeout): + def __init__(self, device, energy_threshold, dynamic_energy_threshold, phrase_time_limit, phrase_timeout:int=1, record_timeout:int=5): source=Microphone( device_index=device['index'], sample_rate=int(device["defaultSampleRate"]), ) - super().__init__(source=source, energy_threshold=energy_threshold, dynamic_energy_threshold=dynamic_energy_threshold, record_timeout=record_timeout) + super().__init__( + source=source, + energy_threshold=energy_threshold, + dynamic_energy_threshold=dynamic_energy_threshold, + phrase_time_limit=phrase_time_limit, + phrase_timeout=phrase_timeout, + record_timeout=record_timeout, + ) # self.adjustForNoise() class SelectedSpeakerEnergyAndAudioRecorder(BaseEnergyAndAudioRecorder): - def __init__(self, device, energy_threshold, dynamic_energy_threshold, record_timeout): + def __init__(self, device, energy_threshold, dynamic_energy_threshold, phrase_time_limit, phrase_timeout:int=1, record_timeout:int=5): source = Microphone(speaker=True, device_index= device["index"], @@ -138,5 +149,12 @@ class SelectedSpeakerEnergyAndAudioRecorder(BaseEnergyAndAudioRecorder): chunk_size=get_sample_size(paInt16), channels=device["maxInputChannels"] ) - super().__init__(source=source, energy_threshold=energy_threshold, dynamic_energy_threshold=dynamic_energy_threshold, record_timeout=record_timeout) + super().__init__( + source=source, + energy_threshold=energy_threshold, + dynamic_energy_threshold=dynamic_energy_threshold, + phrase_time_limit=phrase_time_limit, + phrase_timeout=phrase_timeout, + record_timeout=record_timeout, + ) # self.adjustForNoise() \ No newline at end of file From b3d87509757302ad89488eebb10cfb53bb572ff5 Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Fri, 4 Oct 2024 13:27:49 +0900 Subject: [PATCH 5/7] =?UTF-8?q?=F0=9F=91=8D=EF=B8=8F[Update]=20Controller?= =?UTF-8?q?=20:=20device=20manager=20=E3=82=92=20root=20=E3=81=AB=E7=A7=BB?= =?UTF-8?q?=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-python/config.py | 3 ++- .../transcription_utils.py => device_manager.py} | 10 +--------- src-python/model.py | 9 +++++---- src-python/webui_controller.py | 2 +- 4 files changed, 9 insertions(+), 15 deletions(-) rename src-python/{models/transcription/transcription_utils.py => device_manager.py} (97%) diff --git a/src-python/config.py b/src-python/config.py index 7b41b86f..403fb0e4 100644 --- a/src-python/config.py +++ b/src-python/config.py @@ -5,7 +5,8 @@ from json import load as json_load from json import dump as json_dump import tkinter as tk from tkinter import font -from models.transcription.transcription_utils import device_manager + +from device_manager import device_manager from models.transcription.transcription_languages import transcription_lang from utils import generatePercentageStringsList, isUniqueStrings diff --git a/src-python/models/transcription/transcription_utils.py b/src-python/device_manager.py similarity index 97% rename from src-python/models/transcription/transcription_utils.py rename to src-python/device_manager.py index 02a6e4c5..434a5314 100644 --- a/src-python/models/transcription/transcription_utils.py +++ b/src-python/device_manager.py @@ -134,8 +134,6 @@ class DeviceManager: if buffer_default_speaker_device["device"]["name"] != "NoDevice": break - printLog(self.mic_devices) - self.mic_devices = buffer_mic_devices self.default_mic_device = buffer_default_mic_device self.speaker_devices = buffer_speaker_devices @@ -143,23 +141,18 @@ class DeviceManager: def checkUpdate(self): if self.prev_default_mic_device["device"]["name"] != self.default_mic_device["device"]["name"]: - printLog("checkUpdate: default_mic_device") self.update_flag_default_mic_device = True self.prev_default_mic_device = self.default_mic_device if self.prev_default_speaker_device["device"]["name"] != self.default_speaker_device["device"]["name"]: - printLog("checkUpdate: default_speaker_device") self.update_flag_default_speaker_device = True self.prev_default_speaker_device = self.default_speaker_device if self.prev_mic_host != [host for host in self.mic_devices]: - printLog("checkUpdate: mic_host") self.update_flag_host_list = True self.prev_mic_host = [host for host in self.mic_devices] if {key: [device['name'] for device in devices] for key, devices in self.prev_mic_devices.items()} != {key: [device['name'] for device in devices] for key, devices in self.mic_devices.items()}: - printLog("checkUpdate: mic_devices") self.update_flag_mic_device_list = True self.prev_mic_devices = self.mic_devices if [device['name'] for device in self.prev_speaker_devices] != [device['name'] for device in self.speaker_devices]: - printLog("checkUpdate: speaker_devices") self.update_flag_speaker_device_list = True self.prev_speaker_devices = self.speaker_devices @@ -196,11 +189,10 @@ class DeviceManager: except Exception as e: printLog("Device Monitoring: ", e) finally: - printLog("Device Monitoring Finally Init") + pass except Exception as e: printLog("Device Monitoring End Exception: ", e) - def startMonitoring(self): self.monitoring_flag = True self.th_monitoring = Thread(target=self.monitoring) diff --git a/src-python/model.py b/src-python/model.py index 0c1431cf..381574a6 100644 --- a/src-python/model.py +++ b/src-python/model.py @@ -12,12 +12,15 @@ from queue import Queue from threading import Thread from requests import get as requests_get import webbrowser - from typing import Callable + from flashtext import KeywordProcessor from pykakasi import kakasi + +from device_manager import device_manager +from config import config + from models.translation.translation_translator import Translator -from models.transcription.transcription_utils import device_manager from models.osc.osc_tools import sendTyping, sendMessage, receiveOscParameters, getOSCParameterValue from models.transcription.transcription_recorder import SelectedMicEnergyAndAudioRecorder, SelectedSpeakerEnergyAndAudioRecorder from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakerEnergyRecorder @@ -29,8 +32,6 @@ from models.transcription.transcription_whisper import checkWhisperWeight, downl from models.overlay.overlay import Overlay from models.overlay.overlay_image import OverlayImage -from config import config - import utils class threadFnc(Thread): diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index b8e05e99..78f149ec 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -3,10 +3,10 @@ from time import sleep from subprocess import Popen from threading import Thread import re +from device_manager import device_manager from config import config from model import model from utils import isUniqueStrings, printLog -from models.transcription.transcription_utils import device_manager class Controller: def __init__(self) -> None: From 4f509d06db7a93d5fd9c3295fb23742df6a94d4e Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Fri, 4 Oct 2024 13:28:45 +0900 Subject: [PATCH 6/7] =?UTF-8?q?=F0=9F=91=8D=EF=B8=8F[Update]=20DeviceManag?= =?UTF-8?q?er=20:=20=E3=83=86=E3=82=B9=E3=83=88=E7=94=A8=E3=81=AE=E4=B8=8D?= =?UTF-8?q?=E8=A6=81=E3=81=AAprintLog=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-python/model.py | 10 ---------- src-python/webui_controller.py | 4 ---- 2 files changed, 14 deletions(-) diff --git a/src-python/model.py b/src-python/model.py index 381574a6..1b7aec33 100644 --- a/src-python/model.py +++ b/src-python/model.py @@ -32,8 +32,6 @@ from models.transcription.transcription_whisper import checkWhisperWeight, downl from models.overlay.overlay import Overlay from models.overlay.overlay_image import OverlayImage -import utils - class threadFnc(Thread): def __init__(self, fnc, end_fnc=None, daemon=True, *args, **kwargs): super(threadFnc, self).__init__(daemon=daemon, target=fnc, *args, **kwargs) @@ -665,16 +663,12 @@ class Model: def stopSpeakerTranscript(self): if isinstance(self.speaker_print_transcript, threadFnc): - utils.printLog("stop speaker_print_transcript") self.speaker_print_transcript.stop() self.speaker_print_transcript.join() self.speaker_print_transcript = None - utils.printLog("stopped speaker_audio_recorder") if isinstance(self.speaker_audio_recorder, SelectedSpeakerEnergyAndAudioRecorder): - utils.printLog("stop speaker_audio_recorder") self.speaker_audio_recorder.stop() self.speaker_audio_recorder = None - utils.printLog("stopped speaker_audio_recorder") # if isinstance(self.speaker_get_energy, threadFnc): # self.speaker_get_energy.stop() # self.speaker_get_energy = None @@ -708,17 +702,13 @@ class Model: def stopCheckSpeakerEnergy(self): if isinstance(self.speaker_energy_plot_progressbar, threadFnc): - utils.printLog("stop speaker_energy_plot_progressbar") self.speaker_energy_plot_progressbar.stop() self.speaker_energy_plot_progressbar.join() self.speaker_energy_plot_progressbar = None - utils.printLog("stopped speaker_energy_plot_progressbar") if isinstance(self.speaker_energy_recorder, SelectedSpeakerEnergyRecorder): - utils.printLog("stopped speaker_energy_recorder") self.speaker_energy_recorder.resume() self.speaker_energy_recorder.stop() self.speaker_energy_recorder = None - utils.printLog("stopped speaker_energy_recorder") def createOverlayImageShort(self, message, translation): your_language = config.SELECTED_TARGET_LANGUAGES[config.SELECTED_TAB_NO]["primary"]["language"] diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index 78f149ec..8d7c939c 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -58,18 +58,14 @@ class Controller: def restartAccessDevices(self) -> None: if config.ENABLE_TRANSCRIPTION_SEND is True: - printLog("Restart Access Devices", "Start Mic Transcript") self.startThreadingTranscriptionSendMessage() if config.ENABLE_TRANSCRIPTION_RECEIVE is True: - printLog("Restart Access Devices", "Start Speaker Transcript") self.startThreadingTranscriptionReceiveMessage() if config.ENABLE_CHECK_ENERGY_SEND is True: - printLog("Restart Access Devices", "Start Check Mic Energy") model.startCheckMicEnergy( self.progressBarMicEnergy, ) if config.ENABLE_CHECK_ENERGY_RECEIVE is True: - printLog("Restart Access Devices", "Start Check Speaker Energy") model.startCheckSpeakerEnergy( self.progressBarSpeakerEnergy, ) From b5db201e707652e252535d853fc0369593dd39cc Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Fri, 4 Oct 2024 16:44:28 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=F0=9F=90=9B[bugfix]=20DeviceManager=20:=20?= =?UTF-8?q?device=E8=87=AA=E5=8B=95=E8=A8=AD=E5=AE=9AON=E6=99=82=E3=81=AB?= =?UTF-8?q?=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E3=83=87=E3=83=90?= =?UTF-8?q?=E3=82=A4=E3=82=B9=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-python/device_manager.py | 15 +++++++++++++-- src-python/webui_controller.py | 15 +++++++-------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src-python/device_manager.py b/src-python/device_manager.py index 434a5314..bae8b8a7 100644 --- a/src-python/device_manager.py +++ b/src-python/device_manager.py @@ -257,7 +257,7 @@ class DeviceManager: if self.callback_default_speaker_device is not None and self.update_flag_default_speaker_device is True: self.setSpeakerDefaultDevice() if self.callback_host_list is not None and self.update_flag_host_list is True: - self.setMicHost() + self.setMicHostList() if self.callback_mic_device_list is not None and self.update_flag_mic_device_list is True: self.setMicDeviceList() if self.callback_speaker_device_list is not None and self.update_flag_speaker_device_list is True: @@ -275,7 +275,7 @@ class DeviceManager: def setSpeakerDefaultDevice(self): self.callback_default_speaker_device(self.default_speaker_device["device"]["name"]) - def setMicHost(self): + def setMicHostList(self): self.callback_host_list() def setMicDeviceList(self): @@ -296,6 +296,17 @@ class DeviceManager: def getDefaultSpeakerDevice(self): return self.default_speaker_device + def forceUpdateAndSetMicDevices(self): + self.update() + self.setMicHostList() + self.setMicDeviceList() + self.setMicDefaultDevice() + + def forceUpdateAndSetSpeakerDevices(self): + self.update() + self.setSpeakerDeviceList() + self.setSpeakerDefaultDevice() + device_manager = DeviceManager() if __name__ == "__main__": diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index 8d7c939c..12f42d1d 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -608,8 +608,7 @@ class Controller: device_manager.setCallbackProcessBeforeUpdateDevices(self.stopAccessDevices) device_manager.setCallbackDefaultMicDevice(self.updateSelectedMicDevice) device_manager.setCallbackProcessAfterUpdateDevices(self.restartAccessDevices) - device_manager.noticeUpdateDevices() - device_manager.setMicDefaultDevice() + device_manager.forceUpdateAndSetMicDevices() return {"status":200, "result":config.AUTO_MIC_SELECT} @staticmethod @@ -793,8 +792,8 @@ class Controller: device_manager.setCallbackProcessBeforeUpdateDevices(self.stopAccessDevices) device_manager.setCallbackDefaultSpeakerDevice(self.updateSelectedSpeakerDevice) device_manager.setCallbackProcessAfterUpdateDevices(self.restartAccessDevices) - device_manager.noticeUpdateDevices() - device_manager.setSpeakerDefaultDevice() + device_manager.forceUpdateAndSetSpeakerDevices() + return {"status":200, "result":config.AUTO_SPEAKER_SELECT} @staticmethod @@ -1599,6 +1598,10 @@ class Controller: model.startCheckMuteSelfStatus() # init Auto device selection + device_manager.setCallbackHostList(self.updateMicHostList) + device_manager.setCallbackMicDeviceList(self.updateMicDeviceList) + device_manager.setCallbackSpeakerDeviceList(self.updateSpeakerDeviceList) + printLog("Init Auto Device Selection") if config.AUTO_MIC_SELECT is True: self.setEnableAutoMicSelect() @@ -1606,8 +1609,4 @@ class Controller: if config.AUTO_SPEAKER_SELECT is True: self.setEnableAutoSpeakerSelect() - device_manager.setCallbackHostList(self.updateMicHostList) - device_manager.setCallbackMicDeviceList(self.updateMicDeviceList) - device_manager.setCallbackSpeakerDeviceList(self.updateSpeakerDeviceList) - printLog("End Initialization") \ No newline at end of file