From 02d8fbdb1c4031812cd6e728aa4b40d0385b4ce3 Mon Sep 17 00:00:00 2001 From: misygauziya Date: Sun, 20 Aug 2023 01:20:30 +0900 Subject: [PATCH] =?UTF-8?q?[Update]=20=E6=A9=9F=E8=83=BD=E9=83=A8=E5=88=86?= =?UTF-8?q?=E3=82=92models=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E3=81=AB?= =?UTF-8?q?=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VRCT.py | 4 +- config.py | 10 +- languages.py | 336 ------------------ model.py | 53 +-- osc_tools.py => models/osc/osc_tools.py | 0 .../transcription/transcription_languages.py | 91 +++++ .../transcription/transcription_recorder.py | 0 .../transcription_transcriber.py | 3 +- .../transcription/transcription_utils.py | 0 models/translation/translation_languages.py | 243 +++++++++++++ .../translation/translation_translator.py | 4 +- .../xsoverlay/notification.py | 0 utils.py | 16 - window_config.py | 20 +- 14 files changed, 392 insertions(+), 388 deletions(-) rename osc_tools.py => models/osc/osc_tools.py (100%) create mode 100644 models/transcription/transcription_languages.py rename audio_recorder.py => models/transcription/transcription_recorder.py (100%) rename audio_transcriber.py => models/transcription/transcription_transcriber.py (97%) rename audio_utils.py => models/transcription/transcription_utils.py (100%) create mode 100644 models/translation/translation_languages.py rename translation.py => models/translation/translation_translator.py (95%) rename notification.py => models/xsoverlay/notification.py (100%) diff --git a/VRCT.py b/VRCT.py index fbc71654..565c4bdd 100644 --- a/VRCT.py +++ b/VRCT.py @@ -417,8 +417,8 @@ class App(CTk): print_textbox(self.textbox_message_send_log, f"{message}", "SEND") def printLogReceiveMessage(self, message): - print_textbox(self.textbox_message_log, f"{message}", "RECEIVE") - print_textbox(self.textbox_message_receive_log, f"{message}", "RECEIVE") + print_textbox(self.textbox_message_log, f"{message}", "RECEIVE") + print_textbox(self.textbox_message_receive_log, f"{message}", "RECEIVE") def sendChatMessage(self, message): if len(message) > 0: diff --git a/config.py b/config.py index c4edc384..ced57eab 100644 --- a/config.py +++ b/config.py @@ -5,8 +5,10 @@ from json import load as json_load from json import dump as json_dump import tkinter as tk from tkinter import font -from languages import transcription_lang, translators, translation_lang, selectable_languages -from audio_utils import get_input_device_list, get_output_device_list, get_default_input_device, get_default_output_device +from languages import selectable_languages +from models.translation.translation_languages import translatorEngine, translation_lang +from models.transcription.transcription_languages import transcription_lang +from models.transcription.transcription_utils import get_input_device_list, get_output_device_list, get_default_input_device, get_default_output_device def saveJson(path, key, value): with open(path, "r") as fp: @@ -128,7 +130,7 @@ class Config: @CHOICE_TRANSLATOR.setter def CHOICE_TRANSLATOR(self, value): - if value in translators: + if value in translatorEngine: self._CHOICE_TRANSLATOR = value saveJson(self.PATH_CONFIG, inspect.currentframe().f_code.co_name, value) @@ -442,7 +444,7 @@ class Config: self._UI_SCALING = "100%" self._FONT_FAMILY = "Yu Gothic UI" self._UI_LANGUAGE = "en" - self._CHOICE_TRANSLATOR = translators[0] + 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] diff --git a/languages.py b/languages.py index 3862f4ff..bac2eb0f 100644 --- a/languages.py +++ b/languages.py @@ -1,339 +1,3 @@ -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" -} - -translators = ["DeepL(web)", "DeepL(auth)", "Google(web)", "Bing(web)"] -translation_lang = {} -dict_deepl_web_languages = { - "Japanese":"JA", - "English":"EN", - "Korean":"KO", - "Bulgarian":"BG", - "Chinese":"ZH", - "Czech":"CS", - "Danish":"DA", - "Dutch":"NL", - "Estonian":"ET", - "Finnish":"FI", - "French":"FR", - "German":"DE", - "Greek":"EL", - "Hungarian":"HU", - "Italian":"IT", - "Latvian":"LV", - "Lithuanian":"LT", - "Polish":"PL", - "Portuguese":"PT", - "Romanian":"RO", - "Russian":"RU", - "Slovak":"SK", - "Slovenian":"SL", - "Spanish":"ES", - "Swedish":"SV", - "Indonesian":"ID", - "Ukrainian":"UK", - "Turkish":"TR", - "Norwegian":"NB", -} -translation_lang["DeepL(web)"] = { - "source":dict_deepl_web_languages, - "target":dict_deepl_web_languages, -} - -dict_deepl_auth_source_languages = { - "Japanese":"ja", - "English":"en", - "Bulgarian":"bg", - "Czech":"cs", - "Danish":"da", - "German":"de", - "Greek":"el", - "Spanish":"es", - "Estonian":"et", - "Finnish":"fi", - "French":"fr", - "Hungarian":"hu", - "Indonesian":"id", - "Italian":"it", - "Korean":"ko", - "Lithuanian":"lt", - "Latvian":"lv", - "Norwegian":"nb", - "Dutch":"nl", - "Polish":"pl", - "Portuguese":"pt", - "Romanian":"ro", - "Russian":"ru", - "Slovak":"sk", - "Slovenian":"sl", - "Swedish":"sv", - "Turkish":"tr", - "Ukrainian":"uk", - "Chinese":"zh" -} -dict_deepl_auth_target_languages = { - "Japanese":"ja", - "English American":"en-US", - "English British":"en-GB", - "Bulgarian":"bg", - "Czech":"cs", - "Danish":"da", - "German":"de", - "Greek":"el", - "English":"en", - "Spanish":"es", - "Estonian":"et", - "Finnish":"fi", - "French":"fr", - "Hungarian":"hu", - "Indonesian":"id", - "Italian":"it", - "Korean":"ko", - "Lithuanian":"lt", - "Latvian":"lv", - "Norwegian":"nb", - "Dutch":"nl", - "Polish":"pl", - "Portuguese Brazilian":"pt-BR", - "Portuguese European":"pt-PT", - "Romanian":"ro", - "Russian":"ru", - "Slovak":"sk", - "Slovenian":"sl", - "Swedish":"sv", - "Turkish":"tr", - "Ukrainian":"uk", - "Chinese":"zh" -} -translation_lang["DeepL(auth)"] = { - "source": dict_deepl_auth_source_languages, - "target": dict_deepl_auth_target_languages, -} - -dict_google_web_languages = { - "Japanese":"ja", - "English":"en", - "Chinese":"zh", - "Arabic":"ar", - "Russian":"ru", - "French":"fr", - "German":"de", - "Spanish":"es", - "Portuguese":"pt", - "Italian":"it", - "Korean":"ko", - "Greek":"el", - "Dutch":"nl", - "Hindi":"hi", - "Turkish":"tr", - "Malay":"ms", - "Thai":"th", - "Vietnamese":"vi", - "Indonesian":"id", - "Hebrew":"he", - "Polish":"pl", - "Mongolian":"mn", - "Czech":"cs", - "Hungarian":"hu", - "Estonian":"et", - "Bulgarian":"bg", - "Danish":"da", - "Finnish":"fi", - "Romanian":"ro", - "Swedish":"sv", - "Slovenian":"sl", - "Persian/Farsi":"fa", - "Bosnian":"bs", - "Serbian":"sr", - "Filipino":"tl", - "Haitiancreole":"ht", - "Catalan":"ca", - "Croatian":"hr", - "Latvian":"lv", - "Lithuanian":"lt", - "Urdu":"ur", - "Ukrainian":"uk", - "Welsh":"cy", - "Swahili":"sw", - "Samoan":"sm", - "Slovak":"sk", - "Afrikaans":"af", - "Norwegian":"no", - "Bengali":"bn", - "Malagasy":"mg", - "Maltese":"mt", - "Gujarati":"gu", - "Tamil":"ta", - "Telugu":"te", - "Punjabi":"pa", - "Amharic":"am", - "Azerbaijani":"az", - "Belarusian":"be", - "Cebuano":"ceb", - "Esperanto":"eo", - "Basque":"eu", - "Irish":"ga" -} -translation_lang["Google(web)"] = { - "source":dict_google_web_languages, - "target":dict_google_web_languages, -} - -dict_bing_web_languages = { - "Japanese":"ja", - "English":"en", - "Chinese":"zh", - "Arabic":"ar", - "Russian":"ru", - "French":"fr", - "German":"de", - "Spanish":"es", - "Portuguese":"pt", - "Italian":"it", - "Korean":"ko", - "Greek":"el", - "Dutch":"nl", - "Hindi":"hi", - "Turkish":"tr", - "Malay":"ms", - "Thai":"th", - "Vietnamese":"vi", - "Indonesian":"id", - "Hebrew":"he", - "Polish":"pl", - "Czech":"cs", - "Hungarian":"hu", - "Estonian":"et", - "Bulgarian":"bg", - "Danish":"da", - "Finnish":"fi", - "Romanian":"ro", - "Swedish":"sv", - "Slovenian":"sl", - "Persian/Farsi":"fa", - "Bosnian":"bs", - "Serbian":"sr", - "Fijian":"fj", - "Filipino":"tl", - "Haitiancreole":"ht", - "Catalan":"ca", - "Croatian":"hr", - "Latvian":"lv", - "Lithuanian":"lt", - "Urdu":"ur", - "Ukrainian":"uk", - "Welsh":"cy", - "Tahiti":"ty", - "Tongan":"to", - "Swahili":"sw", - "Samoan":"sm", - "Slovak":"sk", - "Afrikaans":"af", - "Norwegian":"no", - "Bengali":"bn", - "Malagasy":"mg", - "Maltese":"mt", - "Queretaro otomi":"otq", - "Klingon/tlhingan Hol":"tlh", - "Gujarati":"gu", - "Tamil":"ta", - "Telugu":"te", - "Punjabi":"pa", - "Irish":"ga" -} -translation_lang["Bing(web)"] = { - "source":dict_bing_web_languages, - "target":dict_bing_web_languages, -} - selectable_languages = { "en": "English", "ja": "日本語", diff --git a/model.py b/model.py index 1356c372..ef5057a4 100644 --- a/model.py +++ b/model.py @@ -1,20 +1,33 @@ from time import sleep from queue import Queue -from threading import Thread +from threading import Thread, Event from requests import get as requests_get -from translation import Translator from flashtext import KeywordProcessor -from osc_tools import send_typing, send_message, send_test_action, receive_osc_parameters -from languages import transcription_lang -from audio_utils import get_input_device_list, get_output_device_list, get_default_output_device -from audio_recorder import SelectedMicRecorder, SelectedSpeakerRecorder -from audio_recorder import SelectedMicEnergyRecorder, SelectedSpeakeEnergyRecorder -from audio_transcriber import AudioTranscriber -from notification import notification_xsoverlay_for_vrct -from utils import thread_fnc +from models.translation.translation_translator import Translator +from models.osc.osc_tools import send_typing, send_message, send_test_action, receive_osc_parameters +from models.transcription.transcription_utils import get_input_device_list, get_output_device_list, get_default_input_device, get_default_output_device +from models.transcription.transcription_recorder import SelectedMicRecorder, SelectedSpeakerRecorder +from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakeEnergyRecorder +from models.transcription.transcription_transcriber import AudioTranscriber +from models.xsoverlay.notification import notification_xsoverlay_for_vrct from config import config +class thread_fnc(Thread): + def __init__(self, fnc, daemon=True, *args, **kwargs): + super(thread_fnc, self).__init__(daemon=daemon, *args, **kwargs) + self.fnc = fnc + self._stop = Event() + def stop(self): + self._stop.set() + def stopped(self): + return self._stop.isSet() + def run(self): + while True: + if self.stopped(): + return + self.fnc(*self._args, **self._kwargs) + class Model: _instance = None @@ -157,7 +170,7 @@ class Model: max_phrases=config.INPUT_MIC_MAX_PHRASES, ) def mic_transcript_to_chatbox(): - mic_transcriber.transcribe_audio_queue(mic_audio_queue, transcription_lang[config.INPUT_MIC_VOICE_LANGUAGE]) + mic_transcriber.transcribe_audio_queue(mic_audio_queue, config.INPUT_MIC_VOICE_LANGUAGE) message = mic_transcriber.get_transcript() fnc(message) @@ -172,14 +185,11 @@ class Model: self.mic_audio_recorder.stop() self.mic_audio_recorder.stop = None - def startCheckMicEnergy(self, progressBar): + def startCheckMicEnergy(self, fnc): def progressBarInputMicEnergyPlot(): if mic_energy_queue.empty() is False: energy = mic_energy_queue.get() - try: - progressBar.set(energy/config.MAX_MIC_ENERGY_THRESHOLD) - except: - pass + fnc(energy) sleep(0.01) mic_energy_queue = Queue() mic_device = [device for device in get_input_device_list()[config.CHOICE_MIC_HOST] if device["name"] == config.CHOICE_MIC_DEVICE][0] @@ -212,7 +222,7 @@ class Model: max_phrases=config.INPUT_SPEAKER_MAX_PHRASES, ) def spk_transcript_to_textbox(): - spk_transcriber.transcribe_audio_queue(spk_audio_queue, transcription_lang[config.INPUT_SPEAKER_VOICE_LANGUAGE]) + spk_transcriber.transcribe_audio_queue(spk_audio_queue, config.INPUT_SPEAKER_VOICE_LANGUAGE) message = spk_transcriber.get_transcript() fnc(message) @@ -227,20 +237,17 @@ class Model: self.spk_audio_recorder.stop() self.spk_audio_recorder.stop = None - def startCheckSpeakerEnergy(self, progressBar): + def startCheckSpeakerEnergy(self, fnc): def progressBar_input_speaker_energy_plot(): if speaker_energy_queue.empty() is False: energy = speaker_energy_queue.get() - try: - progressBar.set(energy/config.MAX_SPEAKER_ENERGY_THRESHOLD) - except: - pass + fnc(energy) sleep(0.01) def progressBar_input_speaker_energy_get(): with self.speaker_energy_recorder.source as source: energy = self.speaker_energy_recorder.recorder.listen_energy(source) - self.speaker_energy_queue.put(energy) + speaker_energy_queue.put(energy) speaker_device = [device for device in get_output_device_list() if device["name"] == config.CHOICE_SPEAKER_DEVICE][0] speaker_energy_queue = Queue() diff --git a/osc_tools.py b/models/osc/osc_tools.py similarity index 100% rename from osc_tools.py rename to models/osc/osc_tools.py diff --git a/models/transcription/transcription_languages.py b/models/transcription/transcription_languages.py new file mode 100644 index 00000000..2cf6ebd3 --- /dev/null +++ b/models/transcription/transcription_languages.py @@ -0,0 +1,91 @@ +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" +} \ No newline at end of file diff --git a/audio_recorder.py b/models/transcription/transcription_recorder.py similarity index 100% rename from audio_recorder.py rename to models/transcription/transcription_recorder.py diff --git a/audio_transcriber.py b/models/transcription/transcription_transcriber.py similarity index 97% rename from audio_transcriber.py rename to models/transcription/transcription_transcriber.py index 94c858e7..316dd22b 100644 --- a/audio_transcriber.py +++ b/models/transcription/transcription_transcriber.py @@ -4,6 +4,7 @@ import wave from speech_recognition import Recognizer, AudioData, AudioFile from datetime import timedelta from pyaudiowpatch import get_sample_size, paInt16 +from .transcription_languages import transcription_lang PHRASE_TIMEOUT = 3 MAX_PHRASES = 10 @@ -36,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=language) + text = self.audio_recognizer.recognize_google(audio_data, language=transcription_lang[language]) except Exception as e: pass finally: diff --git a/audio_utils.py b/models/transcription/transcription_utils.py similarity index 100% rename from audio_utils.py rename to models/transcription/transcription_utils.py diff --git a/models/translation/translation_languages.py b/models/translation/translation_languages.py new file mode 100644 index 00000000..1b68bf81 --- /dev/null +++ b/models/translation/translation_languages.py @@ -0,0 +1,243 @@ +translatorEngine = ["DeepL(web)", "DeepL(auth)", "Google(web)", "Bing(web)"] +translation_lang = {} +dict_deepl_web_languages = { + "Japanese":"JA", + "English":"EN", + "Korean":"KO", + "Bulgarian":"BG", + "Chinese":"ZH", + "Czech":"CS", + "Danish":"DA", + "Dutch":"NL", + "Estonian":"ET", + "Finnish":"FI", + "French":"FR", + "German":"DE", + "Greek":"EL", + "Hungarian":"HU", + "Italian":"IT", + "Latvian":"LV", + "Lithuanian":"LT", + "Polish":"PL", + "Portuguese":"PT", + "Romanian":"RO", + "Russian":"RU", + "Slovak":"SK", + "Slovenian":"SL", + "Spanish":"ES", + "Swedish":"SV", + "Indonesian":"ID", + "Ukrainian":"UK", + "Turkish":"TR", + "Norwegian":"NB", +} +translation_lang["DeepL(web)"] = { + "source":dict_deepl_web_languages, + "target":dict_deepl_web_languages, +} + +dict_deepl_auth_source_languages = { + "Japanese":"ja", + "English":"en", + "Bulgarian":"bg", + "Czech":"cs", + "Danish":"da", + "German":"de", + "Greek":"el", + "Spanish":"es", + "Estonian":"et", + "Finnish":"fi", + "French":"fr", + "Hungarian":"hu", + "Indonesian":"id", + "Italian":"it", + "Korean":"ko", + "Lithuanian":"lt", + "Latvian":"lv", + "Norwegian":"nb", + "Dutch":"nl", + "Polish":"pl", + "Portuguese":"pt", + "Romanian":"ro", + "Russian":"ru", + "Slovak":"sk", + "Slovenian":"sl", + "Swedish":"sv", + "Turkish":"tr", + "Ukrainian":"uk", + "Chinese":"zh" +} +dict_deepl_auth_target_languages = { + "Japanese":"ja", + "English American":"en-US", + "English British":"en-GB", + "Bulgarian":"bg", + "Czech":"cs", + "Danish":"da", + "German":"de", + "Greek":"el", + "English":"en", + "Spanish":"es", + "Estonian":"et", + "Finnish":"fi", + "French":"fr", + "Hungarian":"hu", + "Indonesian":"id", + "Italian":"it", + "Korean":"ko", + "Lithuanian":"lt", + "Latvian":"lv", + "Norwegian":"nb", + "Dutch":"nl", + "Polish":"pl", + "Portuguese Brazilian":"pt-BR", + "Portuguese European":"pt-PT", + "Romanian":"ro", + "Russian":"ru", + "Slovak":"sk", + "Slovenian":"sl", + "Swedish":"sv", + "Turkish":"tr", + "Ukrainian":"uk", + "Chinese":"zh" +} +translation_lang["DeepL(auth)"] = { + "source": dict_deepl_auth_source_languages, + "target": dict_deepl_auth_target_languages, +} + +dict_google_web_languages = { + "Japanese":"ja", + "English":"en", + "Chinese":"zh", + "Arabic":"ar", + "Russian":"ru", + "French":"fr", + "German":"de", + "Spanish":"es", + "Portuguese":"pt", + "Italian":"it", + "Korean":"ko", + "Greek":"el", + "Dutch":"nl", + "Hindi":"hi", + "Turkish":"tr", + "Malay":"ms", + "Thai":"th", + "Vietnamese":"vi", + "Indonesian":"id", + "Hebrew":"he", + "Polish":"pl", + "Mongolian":"mn", + "Czech":"cs", + "Hungarian":"hu", + "Estonian":"et", + "Bulgarian":"bg", + "Danish":"da", + "Finnish":"fi", + "Romanian":"ro", + "Swedish":"sv", + "Slovenian":"sl", + "Persian/Farsi":"fa", + "Bosnian":"bs", + "Serbian":"sr", + "Filipino":"tl", + "Haitiancreole":"ht", + "Catalan":"ca", + "Croatian":"hr", + "Latvian":"lv", + "Lithuanian":"lt", + "Urdu":"ur", + "Ukrainian":"uk", + "Welsh":"cy", + "Swahili":"sw", + "Samoan":"sm", + "Slovak":"sk", + "Afrikaans":"af", + "Norwegian":"no", + "Bengali":"bn", + "Malagasy":"mg", + "Maltese":"mt", + "Gujarati":"gu", + "Tamil":"ta", + "Telugu":"te", + "Punjabi":"pa", + "Amharic":"am", + "Azerbaijani":"az", + "Belarusian":"be", + "Cebuano":"ceb", + "Esperanto":"eo", + "Basque":"eu", + "Irish":"ga" +} +translation_lang["Google(web)"] = { + "source":dict_google_web_languages, + "target":dict_google_web_languages, +} + +dict_bing_web_languages = { + "Japanese":"ja", + "English":"en", + "Chinese":"zh", + "Arabic":"ar", + "Russian":"ru", + "French":"fr", + "German":"de", + "Spanish":"es", + "Portuguese":"pt", + "Italian":"it", + "Korean":"ko", + "Greek":"el", + "Dutch":"nl", + "Hindi":"hi", + "Turkish":"tr", + "Malay":"ms", + "Thai":"th", + "Vietnamese":"vi", + "Indonesian":"id", + "Hebrew":"he", + "Polish":"pl", + "Czech":"cs", + "Hungarian":"hu", + "Estonian":"et", + "Bulgarian":"bg", + "Danish":"da", + "Finnish":"fi", + "Romanian":"ro", + "Swedish":"sv", + "Slovenian":"sl", + "Persian/Farsi":"fa", + "Bosnian":"bs", + "Serbian":"sr", + "Fijian":"fj", + "Filipino":"tl", + "Haitiancreole":"ht", + "Catalan":"ca", + "Croatian":"hr", + "Latvian":"lv", + "Lithuanian":"lt", + "Urdu":"ur", + "Ukrainian":"uk", + "Welsh":"cy", + "Tahiti":"ty", + "Tongan":"to", + "Swahili":"sw", + "Samoan":"sm", + "Slovak":"sk", + "Afrikaans":"af", + "Norwegian":"no", + "Bengali":"bn", + "Malagasy":"mg", + "Maltese":"mt", + "Queretaro otomi":"otq", + "Klingon/tlhingan Hol":"tlh", + "Gujarati":"gu", + "Tamil":"ta", + "Telugu":"te", + "Punjabi":"pa", + "Irish":"ga" +} +translation_lang["Bing(web)"] = { + "source":dict_bing_web_languages, + "target":dict_bing_web_languages, +} \ No newline at end of file diff --git a/translation.py b/models/translation/translation_translator.py similarity index 95% rename from translation.py rename to models/translation/translation_translator.py index e251c8a9..b386835e 100644 --- a/translation.py +++ b/models/translation/translation_translator.py @@ -1,13 +1,13 @@ from deepl import Translator as deepl_Translator from deepl_translate import translate as deepl_web_Translator from translators import translate_text as other_web_Translator -from languages import translators, translation_lang +from .translation_languages import translatorEngine, translation_lang # Translator class Translator(): def __init__(self): self.translator_status = {} - for translator in translators: + for translator in translatorEngine: self.translator_status[translator] = False self.deepl_client = None diff --git a/notification.py b/models/xsoverlay/notification.py similarity index 100% rename from notification.py rename to models/xsoverlay/notification.py diff --git a/utils.py b/utils.py index ffe7ade7..2bee5814 100644 --- a/utils.py +++ b/utils.py @@ -1,7 +1,6 @@ from os import path as os_path import yaml from datetime import datetime -from threading import Thread, Event def print_textbox(textbox, message, tags=None): now = datetime.now() @@ -19,21 +18,6 @@ def print_textbox(textbox, message, tags=None): textbox.configure(state='disabled') textbox.see("end") -class thread_fnc(Thread): - def __init__(self, fnc, daemon=True, *args, **kwargs): - super(thread_fnc, self).__init__(daemon=daemon, *args, **kwargs) - self.fnc = fnc - self._stop = Event() - def stop(self): - self._stop.set() - def stopped(self): - return self._stop.isSet() - def run(self): - while True: - if self.stopped(): - return - self.fnc(*self._args, **self._kwargs) - def get_localized_text(language): file_path = os_path.join(os_path.dirname(__file__), "locales.yml") diff --git a/window_config.py b/window_config.py index b54429cf..326a7a11 100644 --- a/window_config.py +++ b/window_config.py @@ -8,8 +8,9 @@ from threading import Thread from config import config from model import model from utils import print_textbox, get_localized_text, get_key_by_value, widget_config_window_label_setter -from languages import translation_lang, transcription_lang, selectable_languages - +from languages import selectable_languages +from models.translation.translation_languages import translation_lang +from models.transcription.transcription_languages import transcription_lang from ctk_scrollable_dropdown import CTkScrollableDropdown SCROLLABLE_DROPDOWN = False @@ -261,7 +262,12 @@ class ToplevelWindowConfig(CTkToplevel): config.INPUT_MIC_VOICE_LANGUAGE = choice def mic_threshold_check_start(self): - model.startCheckMicEnergy(self.progressBar_input_mic_energy_threshold) + def plotProgressBar(energy): + try: + self.progressBar_input_mic_energy_threshold.set(energy/config.MAX_MIC_ENERGY_THRESHOLD) + except: + pass + model.startCheckMicEnergy(plotProgressBar) self.checkbox_input_mic_threshold_check.configure(state="normal") self.checkbox_input_speaker_threshold_check.configure(state="normal") @@ -324,7 +330,13 @@ class ToplevelWindowConfig(CTkToplevel): config.INPUT_SPEAKER_VOICE_LANGUAGE = choice def speaker_threshold_check_start(self): - model.startCheckSpeakerEnergy(self.progressBar_input_speaker_energy_threshold) + def plotProgressBar(energy): + try: + print(energy) + self.progressBar_input_speaker_energy_threshold.set(energy/config.MAX_MIC_ENERGY_THRESHOLD) + except: + pass + model.startCheckSpeakerEnergy(plotProgressBar) self.checkbox_input_mic_threshold_check.configure(state="normal") self.checkbox_input_speaker_threshold_check.configure(state="normal")