diff --git a/config.py b/config.py index 2b99e4dc..9d8d2ae0 100644 --- a/config.py +++ b/config.py @@ -135,43 +135,43 @@ class Config: saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) @property - def INPUT_SOURCE_LANG(self): - return self._INPUT_SOURCE_LANG + def SOURCE_LANGUAGE(self): + return self._SOURCE_LANGUAGE - @INPUT_SOURCE_LANG.setter - def INPUT_SOURCE_LANG(self, value): - if value in list(translation_lang[self.CHOICE_TRANSLATOR]["source"].keys()): - self._INPUT_SOURCE_LANG = value + @SOURCE_LANGUAGE.setter + def SOURCE_LANGUAGE(self, value): + if type(value) is str: + self._SOURCE_LANGUAGE = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) @property - def INPUT_TARGET_LANG(self): - return self._INPUT_TARGET_LANG + def SOURCE_COUNTRY(self): + return self._SOURCE_COUNTRY - @INPUT_TARGET_LANG.setter - def INPUT_TARGET_LANG(self, value): - if value in list(translation_lang[self.CHOICE_TRANSLATOR]["target"].keys()): - self._INPUT_TARGET_LANG = value + @SOURCE_COUNTRY.setter + def SOURCE_COUNTRY(self, value): + if type(value) is str: + self._SOURCE_COUNTRY = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) @property - def OUTPUT_SOURCE_LANG(self): - return self._OUTPUT_SOURCE_LANG + def TARGET_LANGUAGE(self): + return self._TARGET_LANGUAGE - @OUTPUT_SOURCE_LANG.setter - def OUTPUT_SOURCE_LANG(self, value): - if value in list(translation_lang[self.CHOICE_TRANSLATOR]["source"].keys()): - self._OUTPUT_SOURCE_LANG = value + @TARGET_LANGUAGE.setter + def TARGET_LANGUAGE(self, value): + if type(value) is str: + self._TARGET_LANGUAGE = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) @property - def OUTPUT_TARGET_LANG(self): - return self._OUTPUT_TARGET_LANG + def TARGET_COUNTRY(self): + return self._TARGET_COUNTRY - @OUTPUT_TARGET_LANG.setter - def OUTPUT_TARGET_LANG(self, value): - if value in list(translation_lang[self.CHOICE_TRANSLATOR]["target"].keys()): - self._OUTPUT_TARGET_LANG = value + @TARGET_COUNTRY.setter + def TARGET_COUNTRY(self, value): + if type(value) is str: + self._TARGET_COUNTRY = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) @property @@ -194,16 +194,6 @@ class Config: self._CHOICE_MIC_DEVICE = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) - @property - def INPUT_MIC_VOICE_LANGUAGE(self): - return self._INPUT_MIC_VOICE_LANGUAGE - - @INPUT_MIC_VOICE_LANGUAGE.setter - def INPUT_MIC_VOICE_LANGUAGE(self, value): - if value in list(transcription_lang.keys()): - self._INPUT_MIC_VOICE_LANGUAGE = value - saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) - @property def INPUT_MIC_ENERGY_THRESHOLD(self): return self._INPUT_MIC_ENERGY_THRESHOLD @@ -276,16 +266,6 @@ class Config: self._CHOICE_SPEAKER_DEVICE = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) - @property - def INPUT_SPEAKER_VOICE_LANGUAGE(self): - return self._INPUT_SPEAKER_VOICE_LANGUAGE - - @INPUT_SPEAKER_VOICE_LANGUAGE.setter - def INPUT_SPEAKER_VOICE_LANGUAGE(self, value): - if value in list(transcription_lang.keys()): - self._INPUT_SPEAKER_VOICE_LANGUAGE = value - saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) - @property def INPUT_SPEAKER_ENERGY_THRESHOLD(self): return self._INPUT_SPEAKER_ENERGY_THRESHOLD @@ -432,6 +412,36 @@ class Config: def MAX_SPEAKER_ENERGY_THRESHOLD(self): return self._MAX_SPEAKER_ENERGY_THRESHOLD + @property + def SELECTED_TAB_NO(self): + return self._SELECTED_TAB_NO + + @SELECTED_TAB_NO.setter + def SELECTED_TAB_NO(self, value): + if type(value) is str: + self._SELECTED_TAB_NO = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + + @property + def SELECTED_TAB_YOUR_LANGUAGES(self): + return self._SELECTED_TAB_YOUR_LANGUAGES + + @SELECTED_TAB_YOUR_LANGUAGES.setter + def SELECTED_TAB_YOUR_LANGUAGES(self, value): + if type(value) is dict: + self._SELECTED_TAB_YOUR_LANGUAGES = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + + @property + def SELECTED_TAB_TARGET_LANGUAGES(self): + return self._SELECTED_TAB_TARGET_LANGUAGES + + @SELECTED_TAB_TARGET_LANGUAGES.setter + def SELECTED_TAB_TARGET_LANGUAGES(self, value): + if type(value) is dict: + self._SELECTED_TAB_TARGET_LANGUAGES = value + saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) + def init_config(self): self._VERSION = "1.3.2" self._PATH_CONFIG = "./config.json" @@ -445,13 +455,12 @@ class Config: self._FONT_FAMILY = "Yu Gothic UI" self._UI_LANGUAGE = "en" self._CHOICE_TRANSLATOR = translatorEngine[0] - self._INPUT_SOURCE_LANG = list(translation_lang[self.CHOICE_TRANSLATOR]["source"].keys())[0] - self._INPUT_TARGET_LANG = list(translation_lang[self.CHOICE_TRANSLATOR]["target"].keys())[1] - self._OUTPUT_SOURCE_LANG = list(translation_lang[self.CHOICE_TRANSLATOR]["source"].keys())[1] - self._OUTPUT_TARGET_LANG = list(translation_lang[self.CHOICE_TRANSLATOR]["target"].keys())[0] + self._SOURCE_LANGUAGE = "Japanese" + self._SOURCE_COUNTRY = "Japan" + self._TARGET_LANGUAGE = "English" + self._TARGET_COUNTRY = "United States" self._CHOICE_MIC_HOST = getDefaultInputDevice()["host"]["name"] self._CHOICE_MIC_DEVICE = getDefaultInputDevice()["device"]["name"] - self._INPUT_MIC_VOICE_LANGUAGE = list(transcription_lang.keys())[0] self._INPUT_MIC_ENERGY_THRESHOLD = 300 self._INPUT_MIC_DYNAMIC_ENERGY_THRESHOLD = True self._INPUT_MIC_RECORD_TIMEOUT = 3 @@ -459,7 +468,6 @@ class Config: self._INPUT_MIC_MAX_PHRASES = 10 self._INPUT_MIC_WORD_FILTER = [] self._CHOICE_SPEAKER_DEVICE = getDefaultOutputDevice()["name"] - self._INPUT_SPEAKER_VOICE_LANGUAGE = list(transcription_lang.keys())[1] self._INPUT_SPEAKER_ENERGY_THRESHOLD = 300 self._INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD = True self._INPUT_SPEAKER_RECORD_TIMEOUT = 3 @@ -485,6 +493,17 @@ class Config: ] self._MAX_MIC_ENERGY_THRESHOLD = 2000 self._MAX_SPEAKER_ENERGY_THRESHOLD = 4000 + self._SELECTED_TAB_NO = "1" + self._SELECTED_TAB_YOUR_LANGUAGES = { + "1":"Japanese\n(Japan)", + "2":"Japanese\n(Japan)", + "3":"Japanese\n(Japan)", + } + self._SELECTED_TAB_TARGET_LANGUAGES = { + "1":"English\n(United States)", + "2":"English\n(United States)", + "3":"English\n(United States)", + } def load_config(self): if os_path.isfile(self.PATH_CONFIG) is not False: diff --git a/main.py b/main.py index 9e3eb8c7..cfd6c49d 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,10 @@ from threading import Thread import customtkinter +from customtkinter import StringVar from vrct_gui import vrct_gui from config import config from model import model +from vrct_gui.ui_utils import setDefaultActiveTab # func transcription send message def sendMicMessage(message): @@ -117,6 +119,73 @@ def foregroundOnForcefully(e): if config.ENABLE_FOREGROUND: vrct_gui.attributes("-topmost", True) +# func select languages +def setYourLanguageAndCountry(select): + languages = config.SELECTED_TAB_YOUR_LANGUAGES + languages[config.SELECTED_TAB_NO] = select + config.SELECTED_TAB_YOUR_LANGUAGES = languages + language, country = model.getLanguageAndCountry(select) + config.SOURCE_LANGUAGE = language + config.SOURCE_COUNTRY = country + config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) + +def setTargetLanguageAndCountry(select): + languages = config.SELECTED_TAB_TARGET_LANGUAGES + languages[config.SELECTED_TAB_NO] = select + config.SELECTED_TAB_TARGET_LANGUAGES = languages + language, country = model.getLanguageAndCountry(select) + config.TARGET_LANGUAGE = language + config.TARGET_COUNTRY = country + config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) + +def callbackSelectedTabNo1(): + config.SELECTED_TAB_NO = "1" + vrct_gui.YOUR_LANGUAGE = config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO] + vrct_gui.TARGET_LANGUAGE = config.SELECTED_TAB_TARGET_LANGUAGES[config.SELECTED_TAB_NO] + languages = config.SELECTED_TAB_YOUR_LANGUAGES + select = languages[config.SELECTED_TAB_NO] + language, country = model.getLanguageAndCountry(select) + config.SOURCE_LANGUAGE = language + config.SOURCE_COUNTRY = country + languages = config.SELECTED_TAB_TARGET_LANGUAGES + select = languages[config.SELECTED_TAB_NO] + language, country = model.getLanguageAndCountry(select) + config.TARGET_LANGUAGE = language + config.TARGET_COUNTRY = country + config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) + +def callbackSelectedTabNo2(): + config.SELECTED_TAB_NO = "2" + vrct_gui.YOUR_LANGUAGE = config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO] + vrct_gui.TARGET_LANGUAGE = config.SELECTED_TAB_TARGET_LANGUAGES[config.SELECTED_TAB_NO] + languages = config.SELECTED_TAB_YOUR_LANGUAGES + select = languages[config.SELECTED_TAB_NO] + language, country = model.getLanguageAndCountry(select) + config.SOURCE_LANGUAGE = language + config.SOURCE_COUNTRY = country + languages = config.SELECTED_TAB_TARGET_LANGUAGES + select = languages[config.SELECTED_TAB_NO] + language, country = model.getLanguageAndCountry(select) + config.TARGET_LANGUAGE = language + config.TARGET_COUNTRY = country + config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) + +def callbackSelectedTabNo3(): + config.SELECTED_TAB_NO = "3" + vrct_gui.YOUR_LANGUAGE = config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO] + vrct_gui.TARGET_LANGUAGE = config.SELECTED_TAB_TARGET_LANGUAGES[config.SELECTED_TAB_NO] + languages = config.SELECTED_TAB_YOUR_LANGUAGES + select = languages[config.SELECTED_TAB_NO] + language, country = model.getLanguageAndCountry(select) + config.SOURCE_LANGUAGE = language + config.SOURCE_COUNTRY = country + languages = config.SELECTED_TAB_TARGET_LANGUAGES + select = languages[config.SELECTED_TAB_NO] + language, country = model.getLanguageAndCountry(select) + config.TARGET_LANGUAGE = language + config.TARGET_COUNTRY = country + config.CHOICE_TRANSLATOR = model.findTranslationEngine(config.SOURCE_LANGUAGE, config.TARGET_LANGUAGE) + # func print textbox def logTranslationStatusChange(): textbox_all = getattr(vrct_gui, "textbox_all") @@ -138,6 +207,16 @@ def logTranscriptionSendStatusChange(): vrct_gui.printToTextbox(textbox_all, "Voice2chatbox機能をOFFにしました", "", "INFO") vrct_gui.printToTextbox(textbox_system, "Voice2chatbox機能をOFFにしました", "", "INFO") +def logTranscriptionReceiveStatusChange(): + textbox_all = getattr(vrct_gui, "textbox_all") + textbox_system = getattr(vrct_gui, "textbox_system") + if config.ENABLE_TRANSCRIPTION_RECEIVE is True: + vrct_gui.printToTextbox(textbox_all, "Speaker2chatbox機能をONにしました", "", "INFO") + vrct_gui.printToTextbox(textbox_system, "Speaker2chatbox機能をONにしました", "", "INFO") + else: + vrct_gui.printToTextbox(textbox_all, "Speaker2chatbox機能をOFFにしました", "", "INFO") + vrct_gui.printToTextbox(textbox_system, "Speaker2chatbox機能をOFFにしました", "", "INFO") + def logSendMessage(message, translate): textbox_all = getattr(vrct_gui, "textbox_all") textbox_sent = getattr(vrct_gui, "textbox_sent") @@ -179,11 +258,11 @@ def logForegroundStatusChange(): vrct_gui.printToTextbox(textbox_system, "Stop foreground", "", "INFO") # command func -def toggleTranslationFeature(): +def callbackToggleTranslation(): config.ENABLE_TRANSLATION = getattr(vrct_gui, "translation_switch_box").get() logTranslationStatusChange() -def toggleTranscriptionSendFeature(): +def callbackToggleTranscriptionSend(): vrct_gui.changeMainWindowWidgetsStatus("disabled", "All") config.ENABLE_TRANSCRIPTION_SEND = getattr(vrct_gui, "transcription_send_switch_box").get() if config.ENABLE_TRANSCRIPTION_SEND is True: @@ -196,7 +275,7 @@ def toggleTranscriptionSendFeature(): th_stopTranscriptionSendMessage.start() logTranscriptionSendStatusChange() -def toggleTranscriptionReceiveFeature(): +def callbackToggleTranscriptionReceive(): vrct_gui.changeMainWindowWidgetsStatus("disabled", "All") config.ENABLE_TRANSCRIPTION_RECEIVE = getattr(vrct_gui, "transcription_receive_switch_box").get() if config.ENABLE_TRANSCRIPTION_RECEIVE is True: @@ -207,9 +286,9 @@ def toggleTranscriptionReceiveFeature(): th_stopTranscriptionReceiveMessage = Thread(target=stopTranscriptionReceiveMessage) th_stopTranscriptionReceiveMessage.daemon = True th_stopTranscriptionReceiveMessage.start() - logTranscriptionSendStatusChange() + logTranscriptionReceiveStatusChange() -def toggleForegroundFeature(): +def callbackToggleForeground(): config.ENABLE_FOREGROUND = getattr(vrct_gui, "foreground_switch_box").get() if config.ENABLE_FOREGROUND is True: vrct_gui.attributes("-topmost", True) @@ -234,15 +313,11 @@ model.checkOSCStarted() # check Software Updated model.checkSoftwareUpdated() -# set commands -translation_switch_box = getattr(vrct_gui, "translation_switch_box") -translation_switch_box.configure(command=toggleTranslationFeature) -transcription_send_switch_box = getattr(vrct_gui, "transcription_send_switch_box") -transcription_send_switch_box.configure(command=toggleTranscriptionSendFeature) -transcription_receive_switch_box = getattr(vrct_gui, "transcription_receive_switch_box") -transcription_receive_switch_box.configure(command=toggleTranscriptionReceiveFeature) -foreground_switch_box = getattr(vrct_gui, "foreground_switch_box") -foreground_switch_box.configure(command=toggleForegroundFeature) +# set UI and callback +vrct_gui.CALLBACK_TOGGLE_TRANSLATION = callbackToggleTranslation +vrct_gui.CALLBACK_TOGGLE_TRANSCRIPTION_SEND = callbackToggleTranscriptionSend +vrct_gui.CALLBACK_TOGGLE_TRANSCRIPTION_RECEIVE = callbackToggleTranscriptionReceive +vrct_gui.CALLBACK_TOGGLE_FOREGROUND = callbackToggleForeground entry_message_box = getattr(vrct_gui, "entry_message_box") entry_message_box.bind("", messageBoxPressKeyEnter) @@ -250,5 +325,26 @@ entry_message_box.bind("", messageBoxPressKeyAny) entry_message_box.bind("", foregroundOffForcefully) entry_message_box.bind("", foregroundOnForcefully) +sqls__optionmenu_your_language = getattr(vrct_gui, "sqls__optionmenu_your_language") +sqls__optionmenu_your_language.configure(values=model.getListLanguageAndCountry()) +sqls__optionmenu_your_language.configure(command=setYourLanguageAndCountry) +sqls__optionmenu_your_language.configure(variable=StringVar(value=config.SELECTED_TAB_YOUR_LANGUAGES[config.SELECTED_TAB_NO])) + +sqls__optionmenu_target_language = getattr(vrct_gui, "sqls__optionmenu_target_language") +sqls__optionmenu_target_language.configure(values=model.getListLanguageAndCountry()) +sqls__optionmenu_target_language.configure(command=setTargetLanguageAndCountry) +sqls__optionmenu_target_language.configure(variable=StringVar(value=config.SELECTED_TAB_TARGET_LANGUAGES[config.SELECTED_TAB_NO])) + +vrct_gui.CALLBACK_SELECTED_TAB_NO_1 = callbackSelectedTabNo1 +vrct_gui.CALLBACK_SELECTED_TAB_NO_2 = callbackSelectedTabNo2 +vrct_gui.CALLBACK_SELECTED_TAB_NO_3 = callbackSelectedTabNo3 + +vrct_gui.current_active_preset_tab = getattr(vrct_gui, f"sqls__presets_button_{config.SELECTED_TAB_NO}") +setDefaultActiveTab( + active_tab_widget=vrct_gui.current_active_preset_tab, + active_bg_color=vrct_gui.settings.main.ctm.SQLS__PRESETS_TAB_BG_ACTIVE_COLOR, + active_text_color=vrct_gui.settings.main.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR +) + if __name__ == "__main__": vrct_gui.startMainLoop() \ No newline at end of file diff --git a/model.py b/model.py index f9b9060b..19bb3820 100644 --- a/model.py +++ b/model.py @@ -11,6 +11,8 @@ from models.transcription.transcription_recorder import SelectedMicRecorder, Sel from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakeEnergyRecorder from models.transcription.transcription_transcriber import AudioTranscriber from models.xsoverlay.notification import xsoverlayForVRCT +from models.translation.translation_languages import translatorEngine, translation_lang +from models.transcription.transcription_languages import transcription_lang from config import config class threadFnc(Thread): @@ -29,6 +31,15 @@ class threadFnc(Thread): self.fnc(*self._args, **self._kwargs) class Model: + # Languages available for both transcription and translation + SUPPORTED_LANGUAGES = [ + 'Afrikaans', 'Arabic', 'Basque', 'Bulgarian', 'Catalan', 'Chinese', 'Croatian', + 'Czech', 'Danish', 'Dutch', 'English', 'Filipino', 'Finnish', 'French', 'German', + 'Greek', 'Hebrew', 'Hindi', 'Hungarian', 'Indonesian', 'Italian', 'Japanese', + 'Korean', 'Lithuanian', 'Malay', 'Norwegian', 'Polish', 'Portuguese', 'Romanian', + 'Russian', 'Serbian', 'Slovak', 'Slovenian', 'Spanish', 'Swedish', 'Thai', 'Turkish', + 'Ukrainian', 'Vietnamese' + ] _instance = None def __new__(cls): @@ -66,6 +77,31 @@ class Model: config.AUTH_KEYS = auth_keys return result + @staticmethod + def getListLanguageAndCountry(): + langs = [] + for lang in model.SUPPORTED_LANGUAGES: + for country in transcription_lang[lang]: + langs.append(f"{lang}\n({country})") + return langs + + @staticmethod + def getLanguageAndCountry(select): + parts = select.split("\n") + language = parts[0] + country = parts[1][1:-1] + return language, country + + @staticmethod + def findTranslationEngine(source_lang, target_lang): + compatible_engines = [] + for engine in translatorEngine: + source_languages = translation_lang.get(engine, {}).get("source", {}) + target_languages = translation_lang.get(engine, {}).get("target", {}) + if source_lang in source_languages and target_lang in target_languages: + compatible_engines.append(engine) + return compatible_engines[0] + def getTranslatorStatus(self): return self.translator.translator_status[config.CHOICE_TRANSLATOR] @@ -75,8 +111,8 @@ class Model: def getInputTranslate(self, message): translation = self.translator.translate( translator_name=config.CHOICE_TRANSLATOR, - source_language=config.INPUT_SOURCE_LANG, - target_language=config.INPUT_TARGET_LANG, + source_language=config.SOURCE_LANGUAGE, + target_language=config.TARGET_LANGUAGE, message=message ) return translation @@ -84,8 +120,8 @@ class Model: def getOutputTranslate(self, message): translation = self.translator.translate( translator_name=config.CHOICE_TRANSLATOR, - source_language=config.OUTPUT_SOURCE_LANG, - target_language=config.OUTPUT_TARGET_LANG, + source_language=config.TARGET_LANGUAGE, + target_language=config.SOURCE_LANGUAGE, message=message ) return translation @@ -170,7 +206,7 @@ class Model: max_phrases=config.INPUT_MIC_MAX_PHRASES, ) def sendMicTranscript(): - mic_transcriber.transcribeAudioQueue(mic_audio_queue, config.INPUT_MIC_VOICE_LANGUAGE) + mic_transcriber.transcribeAudioQueue(mic_audio_queue, config.SOURCE_LANGUAGE, config.SOURCE_COUNTRY) message = mic_transcriber.getTranscript() fnc(message) @@ -222,7 +258,7 @@ class Model: max_phrases=config.INPUT_SPEAKER_MAX_PHRASES, ) def sendSpkTranscript(): - spk_transcriber.transcribeAudioQueue(spk_audio_queue, config.INPUT_SPEAKER_VOICE_LANGUAGE) + spk_transcriber.transcribeAudioQueue(spk_audio_queue, config.TARGET_LANGUAGE, config.TARGET_COUNTRY) message = spk_transcriber.getTranscript() fnc(message) diff --git a/models/transcription/transcription_languages.py b/models/transcription/transcription_languages.py index 2cf6ebd3..26f2c3f6 100644 --- a/models/transcription/transcription_languages.py +++ b/models/transcription/transcription_languages.py @@ -1,91 +1,177 @@ transcription_lang = { - "Japanese (Japan)":"ja-JP", - "English (United States)":"en-US", - "English (United Kingdom)":"en-GB", - "Afrikaans (South Africa)":"af-ZA", - "Arabic (Algeria)":"ar-DZ", - "Arabic (Bahrain)":"ar-BH", - "Arabic (Egypt)":"ar-EG", - "Arabic (Israel)":"ar-IL", - "Arabic (Iraq)":"ar-IQ", - "Arabic (Jordan)":"ar-JO", - "Arabic (Kuwait)":"ar-KW", - "Arabic (Lebanon)":"ar-LB", - "Arabic (Morocco)":"ar-MA", - "Arabic (Oman)":"ar-OM", - "Arabic (State of Palestine)":"ar-PS", - "Arabic (Qatar)":"ar-QA", - "Arabic (Saudi Arabia)":"ar-SA", - "Arabic (Tunisia)":"ar-TN", - "Arabic (United Arab Emirates)":"ar-AE", - "Basque (Spain)":"eu-ES", - "Bulgarian (Bulgaria)":"bg-BG", - "Catalan (Spain)":"ca-ES", - "Chinese, Mandarin (Simplified, China)":"cmn-Hans-CN", - "Chinese, Mandarin (Simplified, Hong Kong)":"cmn-Hans-HK", - "Chinese, Mandarin (Traditional, Taiwan)":"cmn-Hant-TW", - "Chinese, Cantonese (Traditional Hong Kong)":"yue-Hant-HK", - "Croatian (Croatia)":"hr-HR", - "Czech (Czech Republic)":"cs-CZ", - "Danish (Denmark)":"da-DK", - "English (Australia)":"en-AU", - "English (Canada)":"en-CA", - "English (India)":"en-IN", - "English (Ireland)":"en-IE", - "English (New Zealand)":"en-NZ", - "English (Philippines)":"en-PH", - "English (South Africa)":"en-ZA", - "Persian (Iran)":"fa-IR", - "French (France)":"fr-FR", - "Filipino (Philippines)":"fil-PH", - "Galician (Spain)":"gl-ES", - "German (Germany)":"de-DE", - "Greek (Greece)":"el-GR", - "Finnish (Finland)":"fi-FI", - "Hebrew (Israel)":"he-IL", - "Hindi (India)":"hi-IN", - "Hungarian (Hungary)":"hu-HU", - "Indonesian (Indonesia)":"id-ID", - "Icelandic (Iceland)":"is-IS", - "Italian (Italy)":"it-IT", - "Italian (Switzerland)":"it-CH", - "Korean (South Korea)":"ko-KR", - "Lithuanian (Lithuania)":"lt-LT", - "Malay (Malaysia)":"ms-MY", - "Dutch (Netherlands)":"nl-NL", - "Norwegian Bokmål (Norway)":"nb-NO", - "Polish (Poland)":"pl-PL", - "Portuguese (Brazil)":"pt-BR", - "Portuguese (Portugal)":"pt-PT", - "Romanian (Romania)":"ro-RO", - "Russian (Russia)":"ru-RU", - "Serbian (Serbia)":"sr-RS", - "Slovak (Slovakia)":"sk-SK", - "Slovenian (Slovenia)":"sl-SI", - "Spanish (Argentina)":"es-AR", - "Spanish (Bolivia)":"es-BO", - "Spanish (Chile)":"es-CL", - "Spanish (Colombia)":"es-CO", - "Spanish (Costa Rica)":"es-CR", - "Spanish (Dominican Republic)":"es-DO", - "Spanish (Ecuador)":"es-EC", - "Spanish (El Salvador)":"es-SV", - "Spanish (Guatemala)":"es-GT", - "Spanish (Honduras)":"es-HN", - "Spanish (Mexico)":"es-MX", - "Spanish (Nicaragua)":"es-NI", - "Spanish (Panama)":"es-PA", - "Spanish (Paraguay)":"es-PY", - "Spanish (Peru)":"es-PE", - "Spanish (Puerto Rico)":"es-PR", - "Spanish (Spain)":"es-ES", - "Spanish (Uruguay)":"es-UY", - "Spanish (United States)":"es-US", - "Spanish (Venezuela)":"es-VE", - "Swedish (Sweden)":"sv-SE", - "Thai (Thailand)":"th-TH", - "Turkish (Turkey)":"tr-TR", - "Ukrainian (Ukraine)":"uk-UA", - "Vietnamese (Vietnam)":"vi-VN", - "Zulu (South Africa)":"zu-ZA" + "Afrikaans":{ + "South Africa":"af-ZA", + }, + "Arabic":{ + "Algeria":"ar-DZ", + "Bahrain":"ar-BH", + "Egypt":"ar-EG", + "Israel":"ar-IL", + "Iraq":"ar-IQ", + "Jordan":"ar-JO", + "Kuwait":"ar-KW", + "Lebanon":"ar-LB", + "Morocco":"ar-MA", + "Oman":"ar-OM", + "State of Palestine":"ar-PS", + "Qatar":"ar-QA", + "Saudi Arabia":"ar-SA", + "Tunisia":"ar-TN", + "United Arab Emirates":"ar-AE", + }, + "Basque":{ + "Spain":"eu-ES", + }, + "Bulgarian":{ + "Bulgaria":"bg-BG", + }, + "Catalan":{ + "Spain":"ca-ES", + }, + "Chinese":{ + "Mandarin (Simplified, China)":"cmn-Hans-CN", + "Mandarin (Simplified, Hong Kong)":"cmn-Hans-HK", + "Mandarin (Traditional, Taiwan)":"cmn-Hant-TW", + "Cantonese (Traditional Hong Kong)":"yue-Hant-HK", + }, + "Croatian":{ + "Croatia":"hr-HR", + }, + "Czech":{ + "Czech Republic":"cs-CZ", + }, + "Danish":{ + "Denmark":"da-DK", + }, + "Dutch":{ + "Netherlands":"nl-NL", + }, + "English": { + "United States":"en-US", + "United Kingdom":"en-GB", + "Australia":"en-AU", + "Canada":"en-CA", + "India":"en-IN", + "Ireland":"en-IE", + "New Zealand":"en-NZ", + "Philippines":"en-PH", + "South Africa":"en-ZA", + }, + "Filipino":{ + "Philippines":"fil-PH", + }, + "Finnish":{ + "Finland":"fi-FI", + }, + "French":{ + "France":"fr-FR", + }, + "Galician":{ + "Spain":"gl-ES", + }, + "German":{ + "Germany":"de-DE", + }, + "Greek":{ + "Greece":"el-GR", + }, + "Hebrew":{ + "Israel":"he-IL", + }, + "Hindi": { + "India":"hi-IN", + }, + "Hungarian":{ + "Hungary":"hu-HU", + }, + "Indonesian":{ + "Indonesia":"id-ID", + }, + "Icelandic":{ + "Iceland":"is-IS", + }, + "Italian":{ + "Italy":"it-IT", + "Switzerland":"it-CH", + }, + "Japanese":{ + "Japan":"ja-JP", + }, + "Korean":{ + "South Korea":"ko-KR", + }, + "Lithuanian":{ + "Lithuania":"lt-LT", + }, + "Malay":{ + "Malaysia":"ms-MY", + }, + "Norwegian":{ + "Norway":"nb-NO", + }, + "Persian":{ + "Iran":"fa-IR", + }, + "Polish":{ + "Poland":"pl-PL", + }, + "Portuguese":{ + "Brazil":"pt-BR", + "Portugal":"pt-PT", + }, + "Romanian":{ + "Romania":"ro-RO", + }, + "Russian":{ + "Russia":"ru-RU", + }, + "Serbian":{ + "Serbia":"sr-RS", + }, + "Slovak":{ + "Slovakia":"sk-SK", + }, + "Slovenian":{ + "Slovenia":"sl-SI", + }, + "Spanish":{ + "Argentina":"es-AR", + "Bolivia":"es-BO", + "Chile":"es-CL", + "Colombia":"es-CO", + "Costa Rica":"es-CR", + "Dominican Republic":"es-DO", + "Ecuador":"es-EC", + "El Salvador":"es-SV", + "Guatemala":"es-GT", + "Honduras":"es-HN", + "Mexico":"es-MX", + "Nicaragua":"es-NI", + "Panama":"es-PA", + "Paraguay":"es-PY", + "Peru":"es-PE", + "Puerto Rico":"es-PR", + "Spain":"es-ES", + "Uruguay":"es-UY", + "United States":"es-US", + "Venezuela":"es-VE", + }, + "Swedish":{ + "Sweden":"sv-SE", + }, + "Thai":{ + "Thailand":"th-TH", + }, + "Turkish":{ + "Turkey":"tr-TR", + }, + "Ukrainian":{ + "Ukraine":"uk-UA", + }, + "Vietnamese":{ + "Vietnam":"vi-VN", + }, + "Zulu":{ + "South Africa":"zu-ZA" + }, } \ No newline at end of file diff --git a/models/transcription/transcription_transcriber.py b/models/transcription/transcription_transcriber.py index e0b0eb6f..b058f4ec 100644 --- a/models/transcription/transcription_transcriber.py +++ b/models/transcription/transcription_transcriber.py @@ -27,7 +27,7 @@ class AudioTranscriber: "process_data_func": self.processSpeakerData if speaker else self.processSpeakerData } - def transcribeAudioQueue(self, audio_queue, language): + def transcribeAudioQueue(self, audio_queue, language, country): # while True: audio, time_spoken = audio_queue.get() self.updateLastSampleAndPhraseStatus(audio, time_spoken) @@ -37,7 +37,7 @@ class AudioTranscriber: # fd, path = tempfile.mkstemp(suffix=".wav") # os.close(fd) audio_data = self.audio_sources["process_data_func"]() - text = self.audio_recognizer.recognize_google(audio_data, language=transcription_lang[language]) + text = self.audio_recognizer.recognize_google(audio_data, language=transcription_lang[language][country]) except Exception as e: pass finally: diff --git a/models/translation/translation_languages.py b/models/translation/translation_languages.py index 1b68bf81..a18eb5a1 100644 --- a/models/translation/translation_languages.py +++ b/models/translation/translation_languages.py @@ -1,4 +1,5 @@ -translatorEngine = ["DeepL(web)", "DeepL(auth)", "Google(web)", "Bing(web)"] +# translatorEngine = ["DeepL(web)", "DeepL(auth)", "Google(web)", "Bing(web)"] +translatorEngine = ["DeepL(web)", "Google(web)", "Bing(web)"] translation_lang = {} dict_deepl_web_languages = { "Japanese":"JA", diff --git a/vrct_gui/_changeMainWindowWidgetsStatus.py b/vrct_gui/_changeMainWindowWidgetsStatus.py index 602555c2..facca16a 100644 --- a/vrct_gui/_changeMainWindowWidgetsStatus.py +++ b/vrct_gui/_changeMainWindowWidgetsStatus.py @@ -85,7 +85,8 @@ def _changeMainWindowWidgetsStatus(vrct_gui, settings, status, target_names): vrct_gui.sqls__container_title.configure(text_color=settings.ctm.SF__TEXT_DISABLED_COLOR) vrct_gui.sqls__title_text_your_language.configure(text_color=settings.ctm.SF__TEXT_DISABLED_COLOR) vrct_gui.sqls__title_text_target_language.configure(text_color=settings.ctm.SF__TEXT_DISABLED_COLOR) - vrct_gui.current_active_preset_tab.children["!ctklabel"].configure(text_color=settings.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR_PASSIVE) + if settings.IS_SIDEBAR_COMPACT_MODE is False: + vrct_gui.current_active_preset_tab.children["!ctklabel"].configure(text_color=settings.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR_PASSIVE) vrct_gui.sqls__optionmenu_your_language.configure(state="disabled") vrct_gui.sqls__optionmenu_target_language.configure(state="disabled") @@ -93,8 +94,9 @@ def _changeMainWindowWidgetsStatus(vrct_gui, settings, status, target_names): vrct_gui.sqls__container_title.configure(text_color=settings.ctm.LABELS_TEXT_COLOR) vrct_gui.sqls__title_text_your_language.configure(text_color=settings.ctm.LABELS_TEXT_COLOR) vrct_gui.sqls__title_text_target_language.configure(text_color=settings.ctm.LABELS_TEXT_COLOR) - vrct_gui.current_active_preset_tab.children["!ctklabel"].configure(text_color=settings.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR) - vrct_gui.current_active_preset_tab.children["!ctklabel"].configure(text_color=settings.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR) + if settings.IS_SIDEBAR_COMPACT_MODE is False: + vrct_gui.current_active_preset_tab.children["!ctklabel"].configure(text_color=settings.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR) + vrct_gui.current_active_preset_tab.children["!ctklabel"].configure(text_color=settings.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR) vrct_gui.sqls__optionmenu_your_language.configure(state="normal") vrct_gui.sqls__optionmenu_target_language.configure(state="normal") diff --git a/vrct_gui/main_window/widgets/create_sidebar.py b/vrct_gui/main_window/widgets/create_sidebar.py index f58ecb8f..0a24336b 100644 --- a/vrct_gui/main_window/widgets/create_sidebar.py +++ b/vrct_gui/main_window/widgets/create_sidebar.py @@ -18,30 +18,30 @@ def createSidebar(settings, main_window): def toggleTranslationFeature(): + if callable(main_window.CALLBACK_TOGGLE_TRANSLATION) is True: + main_window.CALLBACK_TOGGLE_TRANSLATION() is_turned_on = getattr(main_window, "translation_switch_box").get() print(is_turned_on) toggleSidebarFeatureSelectedMarkIfTurnedOn(is_turned_on, main_window.translation_selected_mark) def toggleTranscriptionSendFeature(): + if callable(main_window.CALLBACK_TOGGLE_TRANSCRIPTION_SEND) is True: + main_window.CALLBACK_TOGGLE_TRANSCRIPTION_SEND() is_turned_on = getattr(main_window, "transcription_send_switch_box").get() print(is_turned_on) toggleSidebarFeatureSelectedMarkIfTurnedOn(is_turned_on, main_window.transcription_send_selected_mark) - if is_turned_on is True: - changeMainWindowWidgetsStatus("disabled", "All") - sleep(1.5) - changeMainWindowWidgetsStatus("normal", "All") def toggleTranscriptionReceiveFeature(): + if callable(main_window.CALLBACK_TOGGLE_TRANSCRIPTION_RECEIVE) is True: + main_window.CALLBACK_TOGGLE_TRANSCRIPTION_RECEIVE() is_turned_on = getattr(main_window, "transcription_receive_switch_box").get() print(is_turned_on) toggleSidebarFeatureSelectedMarkIfTurnedOn(is_turned_on, main_window.transcription_receive_selected_mark) - if is_turned_on is True: - changeMainWindowWidgetsStatus("disabled", "All") - sleep(1.5) - changeMainWindowWidgetsStatus("normal", "All") def toggleForegroundFeature(): + if callable(main_window.CALLBACK_TOGGLE_FOREGROUND) is True: + main_window.CALLBACK_TOGGLE_FOREGROUND() is_turned_on = getattr(main_window, "foreground_switch_box").get() print(is_turned_on) toggleSidebarFeatureSelectedMarkIfTurnedOn(is_turned_on, main_window.foreground_selected_mark) @@ -120,22 +120,28 @@ def createSidebar(settings, main_window): def switchToPreset1(e): print("1") - main_window.YOUR_LANGUAGE = "Japanese\n(Japan)" - main_window.TARGET_LANGUAGE = "English\n(United States)" + if callable(main_window.CALLBACK_SELECTED_TAB_NO_1) is True: + main_window.CALLBACK_SELECTED_TAB_NO_1() + # main_window.YOUR_LANGUAGE = "Japanese\n(Japan)" + # main_window.TARGET_LANGUAGE = "English\n(United States)" target_active_widget = getattr(main_window, "sqls__presets_button_1") switchPresetTabFunction(target_active_widget) def switchToPreset2(e): print("2") - main_window.YOUR_LANGUAGE = "English\n(United States)" - main_window.TARGET_LANGUAGE = "Japanese\n(Japan)" + if callable(main_window.CALLBACK_SELECTED_TAB_NO_2) is True: + main_window.CALLBACK_SELECTED_TAB_NO_2() + # main_window.YOUR_LANGUAGE = "English\n(United States)" + # main_window.TARGET_LANGUAGE = "Japanese\n(Japan)" target_active_widget = getattr(main_window, "sqls__presets_button_2") switchPresetTabFunction(target_active_widget) def switchToPreset3(e): print("3") - main_window.YOUR_LANGUAGE = "Japanese\n(Japan)" - main_window.TARGET_LANGUAGE = "Chinese, Cantonese\n(Traditional Hong Kong)" + if callable(main_window.CALLBACK_SELECTED_TAB_NO_3) is True: + main_window.CALLBACK_SELECTED_TAB_NO_3() + # main_window.YOUR_LANGUAGE = "Japanese\n(Japan)" + # main_window.TARGET_LANGUAGE = "Chinese, Cantonese\n(Traditional Hong Kong)" target_active_widget = getattr(main_window, "sqls__presets_button_3") switchPresetTabFunction(target_active_widget) @@ -507,12 +513,12 @@ def createSidebar(settings, main_window): column+=1 # Set default active preset tab - main_window.current_active_preset_tab = getattr(main_window, "sqls__presets_button_1") - setDefaultActiveTab( - active_tab_widget=main_window.current_active_preset_tab, - active_bg_color=settings.ctm.SQLS__PRESETS_TAB_BG_ACTIVE_COLOR, - active_text_color=settings.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR - ) + # main_window.current_active_preset_tab = getattr(main_window, "sqls__presets_button_1") + # setDefaultActiveTab( + # active_tab_widget=main_window.current_active_preset_tab, + # active_bg_color=settings.ctm.SQLS__PRESETS_TAB_BG_ACTIVE_COLOR, + # active_text_color=settings.ctm.SQLS__PRESETS_TAB_ACTIVE_TEXT_COLOR + # ) # Quick Language settings BOX diff --git a/vrct_gui/vrct_gui.py b/vrct_gui/vrct_gui.py index 245527a1..29fb5bc2 100644 --- a/vrct_gui/vrct_gui.py +++ b/vrct_gui/vrct_gui.py @@ -47,6 +47,13 @@ class VRCT_GUI(CTk): self.YOUR_LANGUAGE = "Japanese\n(Japan)" self.TARGET_LANGUAGE = "English\n(United States)" + self.CALLBACK_TOGGLE_TRANSLATION = None + self.CALLBACK_TOGGLE_TRANSCRIPTION_SEND = None + self.CALLBACK_TOGGLE_TRANSCRIPTION_RECEIVE = None + self.CALLBACK_TOGGLE_FOREGROUND = None + self.CALLBACK_SELECTED_TAB_NO_1 = None + self.CALLBACK_SELECTED_TAB_NO_2 = None + self.CALLBACK_SELECTED_TAB_NO_3 = None self.config_window = ConfigWindow(vrct_gui=self, settings=self.settings.config_window) # self.information_window = ToplevelWindowInformation(self)