From 53ddab3fc0b52cfd14012d276ef15877e0cb44be Mon Sep 17 00:00:00 2001 From: misygauziya Date: Mon, 24 Jul 2023 00:43:39 +0900 Subject: [PATCH] =?UTF-8?q?[update]=20Speaker=E3=81=8B=E3=82=89=E3=81=AE?= =?UTF-8?q?=E6=96=87=E5=AD=97=E8=B5=B7=E3=81=93=E3=81=97=E7=B5=90=E6=9E=9C?= =?UTF-8?q?=E3=82=92XSOverlay=E3=81=AE=E9=80=9A=E7=9F=A5=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=81=A7=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0(VR=E9=99=90=E5=AE=9A)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VRCT.py | 11 ++++++++++- locales.yml | 2 ++ utils.py | 6 +++--- window_config.py | 29 ++++++++++++++++++++++++++++- 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/VRCT.py b/VRCT.py index 84c72f23..8b0a9f13 100644 --- a/VRCT.py +++ b/VRCT.py @@ -18,6 +18,7 @@ from audio_utils import get_input_device_list, get_output_device_list, get_defau from audio_recorder import SelectedMicRecorder, SelectedSpeakerRecorder from audio_transcriber import AudioTranscriber from translation import Translator +from notification import notification_xsoverlay_for_vrct class App(CTk): def __init__(self, *args, **kwargs): @@ -65,6 +66,7 @@ class App(CTk): self.INPUT_SPEAKER_RECORD_TIMEOUT = 3 self.INPUT_SPEAKER_PHRASE_TIMEOUT = 3 self.INPUT_SPEAKER_MAX_PHRASES = 10 + ## Parameter self.OSC_IP_ADDRESS = "127.0.0.1" self.OSC_PORT = 9000 @@ -77,6 +79,7 @@ class App(CTk): self.MESSAGE_FORMAT = "[message]([translation])" # Others self.ENABLE_AUTO_CLEAR_CHATBOX = False + self.ENABLE_NOTICE_XSOVERLAY =False # load config if os_path.isfile(self.PATH_CONFIG) is not False: @@ -209,6 +212,9 @@ class App(CTk): if "ENABLE_AUTO_CLEAR_CHATBOX" in config.keys(): if type(config["ENABLE_AUTO_CLEAR_CHATBOX"]) is bool: self.ENABLE_AUTO_CLEAR_CHATBOX = config["ENABLE_AUTO_CLEAR_CHATBOX"] + if "ENABLE_NOTICE_XSOVERLAY" in config.keys(): + if type(config["ENABLE_NOTICE_XSOVERLAY"]) is bool: + self.ENABLE_NOTICE_XSOVERLAY = config["ENABLE_NOTICE_XSOVERLAY"] with open(self.PATH_CONFIG, 'w') as fp: config = { @@ -247,6 +253,7 @@ class App(CTk): "AUTH_KEYS": self.AUTH_KEYS, "MESSAGE_FORMAT": self.MESSAGE_FORMAT, "ENABLE_AUTO_CLEAR_CHATBOX": self.ENABLE_AUTO_CLEAR_CHATBOX, + "ENABLE_NOTICE_XSOVERLAY": self.ENABLE_NOTICE_XSOVERLAY, } json_dump(config, fp, indent=4) @@ -567,6 +574,8 @@ class App(CTk): # update textbox message receive log print_textbox(self.textbox_message_log, f"{voice_message}", "RECEIVE") print_textbox(self.textbox_message_receive_log, f"{voice_message}", "RECEIVE") + if self.ENABLE_NOTICE_XSOVERLAY is True: + notification_xsoverlay_for_vrct(content=f"{voice_message}") self.spk_print_transcript = thread_fnc(spk_transcript_to_textbox) self.spk_print_transcript.daemon = True @@ -654,7 +663,7 @@ class App(CTk): print_textbox(self.textbox_message_send_log, f"{chat_message}", "SEND") # delete message in entry message box - if self.ENABLE_AUTO_CLEAR_CHATBOX == True: + if self.ENABLE_AUTO_CLEAR_CHATBOX is True: self.entry_message_box.delete(0, customtkinter.END) BREAK_KEYSYM_LIST = [ diff --git a/locales.yml b/locales.yml index 79b5fd86..f4b80300 100644 --- a/locales.yml +++ b/locales.yml @@ -60,6 +60,7 @@ en: # tab Others label_checkbox_auto_clear_chatbox: "Auto clear chat box" + label_checkbox_notice_xsoverlay: "Notification XSOverlay" ja: @@ -125,6 +126,7 @@ ja: # tab Others label_checkbox_auto_clear_chatbox: "送信後はチャットボックスを空にする" + label_checkbox_notice_xsoverlay: "XSOverlayの通知機能を有効" ko: diff --git a/utils.py b/utils.py index 0e63f179..ac2eb35d 100644 --- a/utils.py +++ b/utils.py @@ -100,15 +100,15 @@ def widget_config_window_label_setter(self, language_yaml_data): "label_input_speaker_phrase_timeout", "label_input_speaker_max_phrases", - # tab Parameter "label_ip_address", "label_port", "label_authkey", "label_message_format", - + # tab Others - "label_checkbox_auto_clear_chatbox" + "label_checkbox_auto_clear_chatbox", + "label_checkbox_notice_xsoverlay", ] for name in widget_names: widget = getattr(self, name) diff --git a/window_config.py b/window_config.py index 89adde9a..7c8b2173 100644 --- a/window_config.py +++ b/window_config.py @@ -492,6 +492,11 @@ class ToplevelWindowConfig(CTkToplevel): self.parent.ENABLE_AUTO_CLEAR_CHATBOX = value save_json(self.parent.PATH_CONFIG, "ENABLE_AUTO_CLEAR_CHATBOX", self.parent.ENABLE_AUTO_CLEAR_CHATBOX) + def checkbox_notice_xsoverlay_callback(self): + value = self.checkbox_notice_xsoverlay.get() + self.parent.ENABLE_NOTICE_XSOVERLAY = value + save_json(self.parent.PATH_CONFIG, "ENABLE_NOTICE_XSOVERLAY", self.parent.ENABLE_NOTICE_XSOVERLAY) + def delete_window(self): self.checkbox_input_mic_threshold_check.deselect() self.checkbox_input_speaker_threshold_check.deselect() @@ -1381,7 +1386,7 @@ class ToplevelWindowConfig(CTkToplevel): # tab Others ## checkbox auto clear chat box - row += 1 + row = 0 self.label_checkbox_auto_clear_chatbox = CTkLabel( self.tabview_config.tab(config_tab_title_others), text=init_lang_text, @@ -1403,4 +1408,26 @@ class ToplevelWindowConfig(CTkToplevel): else: self.checkbox_auto_clear_chatbox.deselect() + # checkbox notice xsoverlay + row += 1 + self.label_checkbox_notice_xsoverlay = CTkLabel( + self.tabview_config.tab(config_tab_title_others), + text=init_lang_text, + fg_color="transparent", + font=CTkFont(family=self.parent.FONT_FAMILY) + ) + self.label_checkbox_notice_xsoverlay.grid(row=row, column=0, columnspan=1, padx=padx, pady=pady, sticky="nsw") + self.checkbox_notice_xsoverlay = CTkCheckBox( + self.tabview_config.tab(config_tab_title_others), + text="", + onvalue=True, + offvalue=False, + command=self.checkbox_notice_xsoverlay_callback, + font=CTkFont(family=self.parent.FONT_FAMILY) + ) + self.checkbox_notice_xsoverlay.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") + if self.parent.ENABLE_NOTICE_XSOVERLAY is True: + self.checkbox_notice_xsoverlay.select() + else: + self.checkbox_notice_xsoverlay.deselect() widget_config_window_label_setter(self, language_yaml_data) \ No newline at end of file