From 835f4739fd11438071e5b07ffb52531265581999 Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Wed, 8 May 2024 01:29:02 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B[bugfix]=20Model=20:=20mute?= =?UTF-8?q?=E5=90=8C=E6=9C=9F=E3=81=8C=E5=8B=95=E4=BD=9C=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 起動時にmuteselfしているかどうか監視するように変更 - VRChatが起動指定な場合にgetOSCParameterValueがエラーになる問題を修正 - config移行の状態遷移によるmute状態の初期化問題を修正 --- controller.py | 8 +++++- model.py | 57 ++++++++++++++++++++++++++++------------- models/osc/osc_tools.py | 18 ++++++++----- 3 files changed, 58 insertions(+), 25 deletions(-) diff --git a/controller.py b/controller.py index 43b11844..b4d2e2c3 100644 --- a/controller.py +++ b/controller.py @@ -858,7 +858,11 @@ def callbackSetEnableAutoExportMessageLogs(value): def callbackSetEnableVrcMicMuteSync(value): print("callbackSetEnableVrcMicMuteSync", value) config.ENABLE_VRC_MIC_MUTE_SYNC = value - model.changePutQueueMicAudio() + if config.ENABLE_VRC_MIC_MUTE_SYNC is True: + model.startCheckMuteSelfStatus() + else: + model.stopCheckMuteSelfStatus() + def callbackSetEnableSendMessageToVrc(value): print("callbackSetEnableSendMessageToVrc", value) @@ -981,6 +985,8 @@ def createMainWindow(splash): # init OSC receive model.startReceiveOSC() + if config.ENABLE_VRC_MIC_MUTE_SYNC is True: + model.startCheckMuteSelfStatus() splash.toProgress(3) # Last one. diff --git a/model.py b/model.py index e53e1f23..5b231868 100644 --- a/model.py +++ b/model.py @@ -77,7 +77,8 @@ class Model: self.translator = Translator() self.keyword_processor = KeywordProcessor() self.mic_audio_queue = None - self.mute_status = False + self.mic_mute_status = None + self.mic_mute_status_check = None def checkCTranslatorCTranslate2ModelWeight(self): return checkCTranslate2Weight(config.PATH_LOCAL, config.CTRANSLATE2_WEIGHT_TYPE) @@ -224,20 +225,37 @@ class Model: def getMuteSelfStatus(): return getOSCParameterValue(address="/avatar/parameters/MuteSelf") + def startCheckMuteSelfStatus(self): + def checkMuteSelfStatus(): + if self.mic_mute_status is not None: + self.stopCheckMuteSelfStatus() + + status = self.getMuteSelfStatus() + if status is not None: + self.mic_mute_status = status + self.stopCheckMuteSelfStatus() + + if not isinstance(self.mic_mute_status_check, threadFnc): + self.mic_mute_status_check = threadFnc(checkMuteSelfStatus) + self.mic_mute_status_check.daemon = True + self.mic_mute_status_check.start() + + def stopCheckMuteSelfStatus(self): + if isinstance(self.mic_mute_status_check, threadFnc): + self.mic_mute_status_check.stop() + self.mic_mute_status_check = None + def startReceiveOSC(self): osc_parameter_prefix = "/avatar/parameters/" param_MuteSelf = "MuteSelf" - self.mute_status = self.getMuteSelfStatus() def change_handler_mute(address, osc_arguments): - if osc_arguments is True and self.mute_status is False: - self.mute_status = True - if config.ENABLE_VRC_MIC_MUTE_SYNC is True: - self.stopPutQueueMicAudio() - elif osc_arguments is False and self.mute_status is True: - self.mute_status = False - if config.ENABLE_VRC_MIC_MUTE_SYNC is True: - self.startPutQueueMicAudio() + if osc_arguments is True and self.mic_mute_status is False: + self.mic_mute_status = osc_arguments + self.changeMicTranscriptStatus() + elif osc_arguments is False and self.mic_mute_status is True: + self.mic_mute_status = osc_arguments + self.changeMicTranscriptStatus() dict_filter_and_target = { osc_parameter_prefix + param_MuteSelf: change_handler_mute, @@ -324,7 +342,6 @@ class Model: self.mic_audio_queue = Queue() # self.mic_energy_queue = Queue() - self.changePutQueueMicAudio() mic_device = choice_mic_device[0] record_timeout = config.INPUT_MIC_RECORD_TIMEOUT @@ -383,7 +400,9 @@ class Model: # self.mic_get_energy.daemon = True # self.mic_get_energy.start() - def startPutQueueMicAudio(self): + self.changeMicTranscriptStatus() + + def resumeMicTranscript(self): # キューをクリア if isinstance(self.mic_audio_queue, Queue): while not self.mic_audio_queue.empty(): @@ -397,7 +416,7 @@ class Model: if isinstance(self.mic_audio_recorder, SelectedMicEnergyAndAudioRecorder): self.mic_audio_recorder.resume() - def stopPutQueueMicAudio(self): + def pauseMicTranscript(self): # 文字起こしを一時停止 # if isinstance(self.mic_print_transcript, threadFnc): # self.mic_print_transcript.pause() @@ -406,14 +425,16 @@ class Model: if isinstance(self.mic_audio_recorder, SelectedMicEnergyAndAudioRecorder): self.mic_audio_recorder.pause() - def changePutQueueMicAudio(self): + def changeMicTranscriptStatus(self): if config.ENABLE_VRC_MIC_MUTE_SYNC is True: - if self.mute_status is True: - self.stopPutQueueMicAudio() + if self.mic_mute_status is True: + self.pauseMicTranscript() + elif self.mic_mute_status is False: + self.resumeMicTranscript() else: - self.startPutQueueMicAudio() + pass else: - self.startPutQueueMicAudio() + self.resumeMicTranscript() def stopMicTranscript(self): if isinstance(self.mic_print_transcript, threadFnc): diff --git a/models/osc/osc_tools.py b/models/osc/osc_tools.py index e7aa7d23..0f0958c3 100644 --- a/models/osc/osc_tools.py +++ b/models/osc/osc_tools.py @@ -49,12 +49,18 @@ def sendChangeVoice(ip_address="127.0.0.1", port=9000): sleep(0.05) def getOSCParameterValue(address, server_name="VRChat-Client"): - browser = OSCQueryBrowser() - sleep(1) - service = browser.find_service_by_name(server_name) - oscq = OSCQueryClient(service) - mute_self_node = oscq.query_node(address) - return mute_self_node.value[0] + value = None + try: + browser = OSCQueryBrowser() + sleep(1) + service = browser.find_service_by_name(server_name) + if service is not None: + oscq = OSCQueryClient(service) + mute_self_node = oscq.query_node(address) + value = mute_self_node.value[0] + except Exception: + pass + return value def receiveOscParameters(dict_filter_and_target, ip_address="127.0.0.1", title="VRCT"): osc_port = get_open_udp_port()