diff --git a/src-python/config.py b/src-python/config.py index ba23cd0d..04b6b743 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 c838305c..72f09c2a 100644 --- a/src-python/webui_controller.py +++ b/src-python/webui_controller.py @@ -821,17 +821,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} @@ -952,17 +951,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}