update init process

config.jsonが異常だった場合でも起動するように修正
This commit is contained in:
misyaguziya
2023-06-23 14:12:25 +09:00
parent 071e845f1c
commit 555006f65a

96
VRCT.py
View File

@@ -1,6 +1,7 @@
import os import os
import json import json
import queue import queue
import tkinter as tk
import customtkinter import customtkinter
from PIL import Image from PIL import Image
import pyaudiowpatch as pyaudio import pyaudiowpatch as pyaudio
@@ -16,6 +17,13 @@ class App(customtkinter.CTk):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# init instance
self.translator = translation.Translator()
self.mic_queue = queue.Queue()
self.spk_queue = queue.Queue()
self.p = pyaudio.PyAudio()
self.vr = transcription.VoiceRecognizer(self.p, self.mic_queue, self.spk_queue)
# init config # init config
self.PATH_CONFIG = "./config.json" self.PATH_CONFIG = "./config.json"
## main window ## main window
@@ -35,11 +43,11 @@ class App(customtkinter.CTk):
self.OUTPUT_SOURCE_LANG = "EN" self.OUTPUT_SOURCE_LANG = "EN"
self.OUTPUT_TARGET_LANG = "JA" self.OUTPUT_TARGET_LANG = "JA"
## Transcription ## Transcription
self.CHOICE_MIC_DEVICE = None self.CHOICE_MIC_DEVICE = self.vr.search_default_device()[0]
self.INPUT_MIC_VOICE_LANGUAGE = "ja-JP" self.INPUT_MIC_VOICE_LANGUAGE = "ja-JP"
self.INPUT_MIC_IS_DYNAMIC = False self.INPUT_MIC_IS_DYNAMIC = False
self.INPUT_MIC_THRESHOLD = 300 self.INPUT_MIC_THRESHOLD = 300
self.CHOICE_SPEAKER_DEVICE = None self.CHOICE_SPEAKER_DEVICE = self.vr.search_default_device()[1]
self.INPUT_SPEAKER_VOICE_LANGUAGE = "en-US" self.INPUT_SPEAKER_VOICE_LANGUAGE = "en-US"
self.INPUT_SPEAKER_INTERVAL = 4 self.INPUT_SPEAKER_INTERVAL = 4
@@ -60,61 +68,86 @@ class App(customtkinter.CTk):
config = json.load(fp) config = json.load(fp)
# main window # main window
if "ENABLE_TRANSLATION" in config.keys(): if "ENABLE_TRANSLATION" in config.keys():
self.ENABLE_TRANSLATION = config["ENABLE_TRANSLATION"] if type(config["ENABLE_TRANSLATION"]) is bool:
self.ENABLE_TRANSLATION = config["ENABLE_TRANSLATION"]
if "ENABLE_TRANSCRIPTION_SEND" in config.keys(): if "ENABLE_TRANSCRIPTION_SEND" in config.keys():
self.ENABLE_TRANSCRIPTION_SEND = config["ENABLE_TRANSCRIPTION_SEND"] if type(config["ENABLE_TRANSCRIPTION_SEND"]) is bool:
self.ENABLE_TRANSCRIPTION_SEND = config["ENABLE_TRANSCRIPTION_SEND"]
if "ENABLE_TRANSCRIPTION_RECEIVE" in config.keys(): if "ENABLE_TRANSCRIPTION_RECEIVE" in config.keys():
self.ENABLE_TRANSCRIPTION_RECEIVE = config["ENABLE_TRANSCRIPTION_RECEIVE"] if type(config["ENABLE_TRANSCRIPTION_RECEIVE"]) is bool:
self.ENABLE_TRANSCRIPTION_RECEIVE = config["ENABLE_TRANSCRIPTION_RECEIVE"]
if "ENABLE_FOREGROUND" in config.keys(): if "ENABLE_FOREGROUND" in config.keys():
self.ENABLE_FOREGROUND = config["ENABLE_FOREGROUND"] if type(config["ENABLE_FOREGROUND"]) is bool:
self.ENABLE_FOREGROUND = config["ENABLE_FOREGROUND"]
# tab ui # tab ui
if "TRANSPARENCY" in config.keys(): if "TRANSPARENCY" in config.keys():
self.TRANSPARENCY = config["TRANSPARENCY"] if type(config["TRANSPARENCY"]) is int:
if 0 <= config["TRANSPARENCY"] <= 100:
self.TRANSPARENCY = config["TRANSPARENCY"]
if "APPEARANCE_THEME" in config.keys(): if "APPEARANCE_THEME" in config.keys():
self.APPEARANCE_THEME = config["APPEARANCE_THEME"] if config["APPEARANCE_THEME"] in ["Light", "Dark", "System"]:
self.APPEARANCE_THEME = config["APPEARANCE_THEME"]
if "UI_SCALING" in config.keys(): if "UI_SCALING" in config.keys():
self.UI_SCALING = config["UI_SCALING"] if config["UI_SCALING"] in ["80%", "90%", "100%", "110%", "120%"]:
self.UI_SCALING = config["UI_SCALING"]
if "FONT_FAMILY" in config.keys(): if "FONT_FAMILY" in config.keys():
self.FONT_FAMILY = config["FONT_FAMILY"] if config["FONT_FAMILY"] in list(tk.font.families()):
self.FONT_FAMILY = config["FONT_FAMILY"]
# translation # translation
if "CHOICE_TRANSLATOR" in config.keys(): if "CHOICE_TRANSLATOR" in config.keys():
self.CHOICE_TRANSLATOR = config["CHOICE_TRANSLATOR"] if config["CHOICE_TRANSLATOR"] in list(self.translator.translator_status.keys()):
self.CHOICE_TRANSLATOR = config["CHOICE_TRANSLATOR"]
if "INPUT_SOURCE_LANG" in config.keys(): if "INPUT_SOURCE_LANG" in config.keys():
self.INPUT_SOURCE_LANG = config["INPUT_SOURCE_LANG"] if config["INPUT_SOURCE_LANG"] in self.translator.languages[self.CHOICE_TRANSLATOR]:
self.INPUT_SOURCE_LANG = config["INPUT_SOURCE_LANG"]
if "INPUT_TARGET_LANG" in config.keys(): if "INPUT_TARGET_LANG" in config.keys():
self.INPUT_TARGET_LANG = config["INPUT_TARGET_LANG"] if config["INPUT_SOURCE_LANG"] in self.translator.languages[self.CHOICE_TRANSLATOR]:
self.INPUT_TARGET_LANG = config["INPUT_TARGET_LANG"]
if "OUTPUT_SOURCE_LANG" in config.keys(): if "OUTPUT_SOURCE_LANG" in config.keys():
self.OUTPUT_SOURCE_LANG = config["OUTPUT_SOURCE_LANG"] if config["INPUT_SOURCE_LANG"] in self.translator.languages[self.CHOICE_TRANSLATOR]:
self.OUTPUT_SOURCE_LANG = config["OUTPUT_SOURCE_LANG"]
if "OUTPUT_TARGET_LANG" in config.keys(): if "OUTPUT_TARGET_LANG" in config.keys():
self.OUTPUT_TARGET_LANG = config["OUTPUT_TARGET_LANG"] if config["INPUT_SOURCE_LANG"] in self.translator.languages[self.CHOICE_TRANSLATOR]:
self.OUTPUT_TARGET_LANG = config["OUTPUT_TARGET_LANG"]
# Transcription # Transcription
if "CHOICE_MIC_DEVICE" in config.keys(): if "CHOICE_MIC_DEVICE" in config.keys():
self.CHOICE_MIC_DEVICE = config["CHOICE_MIC_DEVICE"] if config["CHOICE_MIC_DEVICE"] in [device["name"] for device in self.vr.search_input_device()]:
self.CHOICE_MIC_DEVICE = config["CHOICE_MIC_DEVICE"]
if "INPUT_MIC_VOICE_LANGUAGE" in config.keys(): if "INPUT_MIC_VOICE_LANGUAGE" in config.keys():
self.INPUT_MIC_VOICE_LANGUAGE = config["INPUT_MIC_VOICE_LANGUAGE"] if config["INPUT_MIC_VOICE_LANGUAGE"] in list(self.parent.vr.languages):
self.INPUT_MIC_VOICE_LANGUAGE = config["INPUT_MIC_VOICE_LANGUAGE"]
if "INPUT_MIC_IS_DYNAMIC" in config.keys(): if "INPUT_MIC_IS_DYNAMIC" in config.keys():
self.INPUT_MIC_IS_DYNAMIC = config["INPUT_MIC_IS_DYNAMIC"] if type(config["INPUT_MIC_IS_DYNAMIC"]) is bool:
self.INPUT_MIC_IS_DYNAMIC = config["INPUT_MIC_IS_DYNAMIC"]
if "INPUT_MIC_THRESHOLD" in config.keys(): if "INPUT_MIC_THRESHOLD" in config.keys():
self.INPUT_MIC_THRESHOLD = config["INPUT_MIC_THRESHOLD"] if type(config["INPUT_MIC_THRESHOLD"]) is int:
self.INPUT_MIC_THRESHOLD = config["INPUT_MIC_THRESHOLD"]
if "CHOICE_SPEAKER_DEVICE" in config.keys(): if "CHOICE_SPEAKER_DEVICE" in config.keys():
self.CHOICE_SPEAKER_DEVICE = config["CHOICE_SPEAKER_DEVICE"] if config["CHOICE_SPEAKER_DEVICE"] in [device["name"] for device in self.vr.search_output_device()]:
self.CHOICE_SPEAKER_DEVICE = config["CHOICE_SPEAKER_DEVICE"]
if "INPUT_SPEAKER_VOICE_LANGUAGE" in config.keys(): if "INPUT_SPEAKER_VOICE_LANGUAGE" in config.keys():
self.INPUT_SPEAKER_VOICE_LANGUAGE = config["INPUT_SPEAKER_VOICE_LANGUAGE"] if config["INPUT_SPEAKER_VOICE_LANGUAGE"] in list(self.parent.vr.languages):
self.INPUT_SPEAKER_VOICE_LANGUAGE = config["INPUT_SPEAKER_VOICE_LANGUAGE"]
if "INPUT_SPEAKER_INTERVAL" in config.keys(): if "INPUT_SPEAKER_INTERVAL" in config.keys():
self.INPUT_SPEAKER_INTERVAL = config["INPUT_SPEAKER_INTERVAL"] if type(config["INPUT_SPEAKER_INTERVAL"]) is int:
self.INPUT_SPEAKER_INTERVAL = config["INPUT_SPEAKER_INTERVAL"]
# Parameter # Parameter
if "OSC_IP_ADDRESS" in config.keys(): if "OSC_IP_ADDRESS" in config.keys():
self.OSC_IP_ADDRESS = config["OSC_IP_ADDRESS"] if type(config["OSC_IP_ADDRESS"]) is str:
self.OSC_IP_ADDRESS = config["OSC_IP_ADDRESS"]
if "OSC_PORT" in config.keys(): if "OSC_PORT" in config.keys():
self.OSC_PORT = config["OSC_PORT"] if type(config["OSC_PORT"]) is int:
self.OSC_PORT = config["OSC_PORT"]
if "AUTH_KEYS" in config.keys(): if "AUTH_KEYS" in config.keys():
self.AUTH_KEYS = config["AUTH_KEYS"] if type(config["AUTH_KEYS"]) is str:
self.AUTH_KEYS = config["AUTH_KEYS"]
if "MESSAGE_FORMAT" in config.keys(): if "MESSAGE_FORMAT" in config.keys():
self.MESSAGE_FORMAT = config["MESSAGE_FORMAT"] if type(config["MESSAGE_FORMAT"]) is str:
self.MESSAGE_FORMAT = config["MESSAGE_FORMAT"]
with open(self.PATH_CONFIG, 'w') as fp: with open(self.PATH_CONFIG, 'w') as fp:
config = { config = {
@@ -288,21 +321,12 @@ class App(customtkinter.CTk):
self.entry_message_box.grid(row=1, column=1, columnspan=2, padx=5, pady=(5, 10), sticky="nsew") self.entry_message_box.grid(row=1, column=1, columnspan=2, padx=5, pady=(5, 10), sticky="nsew")
# set default values # set default values
## set translator instance ## set translator
self.translator = translation.Translator()
if self.translator.authentication(self.CHOICE_TRANSLATOR, self.AUTH_KEYS[self.CHOICE_TRANSLATOR]) is False: if self.translator.authentication(self.CHOICE_TRANSLATOR, self.AUTH_KEYS[self.CHOICE_TRANSLATOR]) is False:
# error update Auth key # error update Auth key
utils.print_textbox(self.textbox_message_log, "Auth Key or language setting is incorrect", "ERROR") utils.print_textbox(self.textbox_message_log, "Auth Key or language setting is incorrect", "ERROR")
utils.print_textbox(self.textbox_message_system_log, "Auth Key or language setting is incorrect", "ERROR") utils.print_textbox(self.textbox_message_system_log, "Auth Key or language setting is incorrect", "ERROR")
## set transcription instance
self.mic_queue = queue.Queue()
self.spk_queue = queue.Queue()
self.p = pyaudio.PyAudio()
self.vr = transcription.VoiceRecognizer(self.p, self.mic_queue, self.spk_queue)
self.CHOICE_MIC_DEVICE = self.CHOICE_MIC_DEVICE if self.CHOICE_MIC_DEVICE is not None else self.vr.search_default_device()[0]
self.CHOICE_SPEAKER_DEVICE = self.CHOICE_SPEAKER_DEVICE if self.CHOICE_SPEAKER_DEVICE is not None else self.vr.search_default_device()[1]
## set checkbox enable translation ## set checkbox enable translation
if self.ENABLE_TRANSLATION: if self.ENABLE_TRANSLATION:
self.checkbox_translation.select() self.checkbox_translation.select()