From 53edb45825c2156999e2a0bb8b0225086ff5d91d Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Fri, 13 Sep 2024 13:34:46 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8D=EF=B8=8F[Update]=20Model=20:=20def?= =?UTF-8?q?ault=E3=81=AE=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9=E5=8B=95?= =?UTF-8?q?=E4=BD=9C=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-python/config.py | 24 ++++++++++++ src-python/model.py | 70 ++++++++++++++++++++++------------ src-python/webui_controller.py | 18 ++++----- 3 files changed, 77 insertions(+), 35 deletions(-) diff --git a/src-python/config.py b/src-python/config.py index 229942c3..df72c0cb 100644 --- a/src-python/config.py +++ b/src-python/config.py @@ -457,6 +457,17 @@ class Config: self._MAIN_WINDOW_GEOMETRY[key] = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, self.MAIN_WINDOW_GEOMETRY) + @property + @json_serializable('INPUT_MIC_AUTOMATIC_SELECTION') + def INPUT_MIC_AUTOMATIC_SELECTION(self): + return self._INPUT_MIC_AUTOMATIC_SELECTION + + @INPUT_MIC_AUTOMATIC_SELECTION.setter + def INPUT_MIC_AUTOMATIC_SELECTION(self, value): + if isinstance(value, bool): + self._INPUT_MIC_AUTOMATIC_SELECTION = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + @property @json_serializable('CHOICE_MIC_HOST') def CHOICE_MIC_HOST(self): @@ -567,6 +578,17 @@ class Config: self._INPUT_MIC_NO_SPEECH_PROB = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + @property + @json_serializable('INPUT_SPEAKER_AUTOMATIC_SELECTION') + def INPUT_SPEAKER_AUTOMATIC_SELECTION(self): + return self._INPUT_SPEAKER_AUTOMATIC_SELECTION + + @INPUT_SPEAKER_AUTOMATIC_SELECTION.setter + def INPUT_SPEAKER_AUTOMATIC_SELECTION(self, value): + if isinstance(value, bool): + self._INPUT_SPEAKER_AUTOMATIC_SELECTION = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + @property @json_serializable('CHOICE_SPEAKER_DEVICE') def CHOICE_SPEAKER_DEVICE(self): @@ -1117,6 +1139,7 @@ class Config: "width": "870", "height": "654", } + self._INPUT_MIC_AUTOMATIC_SELECTION = True self._CHOICE_MIC_HOST = getDefaultInputDevice()["host"]["name"] self._CHOICE_MIC_DEVICE = getDefaultInputDevice()["device"]["name"] self._INPUT_MIC_ENERGY_THRESHOLD = 300 @@ -1127,6 +1150,7 @@ class Config: self._INPUT_MIC_WORD_FILTER = [] self._INPUT_MIC_AVG_LOGPROB=-0.8 self._INPUT_MIC_NO_SPEECH_PROB=0.6 + self._INPUT_SPEAKER_AUTOMATIC_SELECTION = True self._CHOICE_SPEAKER_DEVICE = getDefaultOutputDevice()["device"]["name"] self._INPUT_SPEAKER_ENERGY_THRESHOLD = 300 self._INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD = False diff --git a/src-python/model.py b/src-python/model.py index d17009d8..b060157a 100644 --- a/src-python/model.py +++ b/src-python/model.py @@ -17,7 +17,7 @@ from typing import Callable from flashtext import KeywordProcessor from pykakasi import kakasi from models.translation.translation_translator import Translator -from models.transcription.transcription_utils import getInputDevices, getOutputDevices +from models.transcription.transcription_utils import getInputDevices, getOutputDevices, getDefaultInputDevice, getDefaultOutputDevice 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 @@ -423,8 +423,17 @@ class Model: return [device["name"] for device in getOutputDevices()] def startMicTranscript(self, fnc): - mic_device_list = getInputDevices().get(config.CHOICE_MIC_HOST, [{"name": "NoDevice"}]) - choice_mic_device = [device for device in mic_device_list if device["name"] == config.CHOICE_MIC_DEVICE] + if config.INPUT_MIC_AUTOMATIC_SELECTION is True: + default_device = getDefaultInputDevice() + mic_host_name = default_device["host"]["name"] + mic_device_name = default_device["device"]["name"] + else: + mic_host_name = config.CHOICE_MIC_HOST + mic_device_name = config.CHOICE_MIC_DEVICE + + mic_device_list = getInputDevices().get(mic_host_name, [{"name": "NoDevice"}]) + choice_mic_device = [device for device in mic_device_list if device["name"] == mic_device_name] + if len(choice_mic_device) == 0: return False @@ -544,15 +553,20 @@ class Model: # self.mic_get_energy.stop() # self.mic_get_energy = None - def startCheckMicEnergy(self, fnc, error_fnc=None): - mic_device_list = getInputDevices().get(config.CHOICE_MIC_HOST, [{"name": "NoDevice"}]) - choice_mic_device = [device for device in mic_device_list if device["name"] == config.CHOICE_MIC_DEVICE] + def startCheckMicEnergy(self, fnc): + if config.INPUT_MIC_AUTOMATIC_SELECTION is True: + default_device = getDefaultInputDevice() + mic_host_name = default_device["host"]["name"] + mic_device_name = default_device["device"]["name"] + else: + mic_host_name = config.CHOICE_MIC_HOST + mic_device_name = config.CHOICE_MIC_DEVICE + + mic_device_list = getInputDevices().get(mic_host_name, [{"name": "NoDevice"}]) + choice_mic_device = [device for device in mic_device_list if device["name"] == mic_device_name] + if len(choice_mic_device) == 0: - try: - error_fnc() - except Exception: - pass - return + return False def sendMicEnergy(): if mic_energy_queue.empty() is False: @@ -581,15 +595,18 @@ class Model: self.mic_energy_recorder.stop() self.mic_energy_recorder = None - def startSpeakerTranscript(self, fnc, error_fnc=None): + def startSpeakerTranscript(self, fnc): + if config.INPUT_SPEAKER_AUTOMATIC_SELECTION is True: + default_device = getDefaultOutputDevice() + speaker_device_name = default_device["device"]["name"] + else: + speaker_device_name = config.CHOICE_SPEAKER_DEVICE + speaker_device_list = getOutputDevices() - choice_speaker_device = [device for device in speaker_device_list if device["name"] == config.CHOICE_SPEAKER_DEVICE] + choice_speaker_device = [device for device in speaker_device_list if device["name"] == speaker_device_name] + if len(choice_speaker_device) == 0: - try: - error_fnc() - except Exception: - pass - return + return False speaker_audio_queue = Queue() # speaker_energy_queue = Queue() @@ -667,15 +684,18 @@ class Model: # self.speaker_get_energy.stop() # self.speaker_get_energy = None - def startCheckSpeakerEnergy(self, fnc, error_fnc=None): + def startCheckSpeakerEnergy(self, fnc): + if config.INPUT_SPEAKER_AUTOMATIC_SELECTION is True: + default_device = getDefaultOutputDevice() + speaker_device_name = default_device["device"]["name"] + else: + speaker_device_name = config.CHOICE_SPEAKER_DEVICE + speaker_device_list = getOutputDevices() - choice_speaker_device = [device for device in speaker_device_list if device["name"] == config.CHOICE_SPEAKER_DEVICE] + choice_speaker_device = [device for device in speaker_device_list if device["name"] == speaker_device_name] + if len(choice_speaker_device) == 0: - try: - error_fnc() - except Exception: - pass - return + return False def sendSpeakerEnergy(): if speaker_energy_queue.empty() is False: diff --git a/src-python/webui_controller.py b/src-python/webui_controller.py index 0c093367..f16fe514 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -836,17 +836,16 @@ class ProgressBarMicEnergy: self.action = action def set(self, energy) -> None: - self.action("mic", {"status":200, "result":energy}) - - def error(self) -> None: - self.action("error_device", {"status":400,"result": {"message":"No mic device detected."}}) + if energy is False: + self.action("error_device", {"status":400,"result": {"message":"No mic device detected."}}) + else: + self.action("mic", {"status":200, "result":energy}) def callbackEnableCheckMicThreshold(data, action, *args, **kwargs) -> dict: printLog("Enable Check Mic Threshold") progressbar_mic_energy = ProgressBarMicEnergy(action) model.startCheckMicEnergy( progressbar_mic_energy.set, - progressbar_mic_energy.error ) config.ENABLE_CHECK_ENERGY_SEND = True return {"status":200, "result":config.ENABLE_CHECK_ENERGY_SEND} @@ -967,17 +966,16 @@ class ProgressBarSpeakerEnergy: self.action = action def set(self, energy) -> None: - self.action("speaker", {"status":200, "result":energy}) - - def error(self) -> None: - self.action("error_device", {"status":400,"result": {"message":"No mic device detected."}}) + if energy is False: + self.action("error_device", {"status":400,"result": {"message":"No mic device detected."}}) + else: + self.action("speaker", {"status":200, "result":energy}) def callbackEnableCheckSpeakerThreshold(data, action, *args, **kwargs) -> dict: printLog("Enable Check Speaker Threshold") progressbar_speaker_energy = ProgressBarSpeakerEnergy(action) model.startCheckSpeakerEnergy( progressbar_speaker_energy.set, - progressbar_speaker_energy.error ) config.ENABLE_CHECK_ENERGY_RECEIVE = True return {"status":200, "result":config.ENABLE_CHECK_ENERGY_RECEIVE}