update transcription UI
This commit is contained in:
157
VRCT.py
157
VRCT.py
@@ -35,12 +35,14 @@ class App(customtkinter.CTk):
|
||||
## Transcription
|
||||
self.CHOICE_MIC_DEVICE = None
|
||||
self.INPUT_MIC_VOICE_LANGUAGE = "ja-JP"
|
||||
self.ENABLE_MIC_IS_DYNAMIC = False
|
||||
self.MIC_THRESHOLD = 300
|
||||
self.INPUT_MIC_IS_DYNAMIC = False
|
||||
self.INPUT_MIC_THRESHOLD = 300
|
||||
self.CHOICE_SPEAKER_DEVICE = None
|
||||
self.INPUT_SPEAKER_VOICE_LANGUAGE = "ja-JP"
|
||||
self.ENABLE_SPEAKER_IS_DYNAMIC = False
|
||||
self.SPEAKER_THRESHOLD = 300
|
||||
self.INPUT_SPEAKER_SAMPLING_RATE = 16000
|
||||
self.INPUT_SPEAKER_INTERVAL = 3
|
||||
self.INPUT_SPEAKER_BUFFER_SIZE = 4096
|
||||
|
||||
## Parameter
|
||||
self.OSC_IP_ADDRESS = "127.0.0.1"
|
||||
self.OSC_PORT = 9000
|
||||
@@ -91,18 +93,20 @@ class App(customtkinter.CTk):
|
||||
self.CHOICE_MIC_DEVICE = config["CHOICE_MIC_DEVICE"]
|
||||
if "INPUT_MIC_VOICE_LANGUAGE" in config.keys():
|
||||
self.INPUT_MIC_VOICE_LANGUAGE = config["INPUT_MIC_VOICE_LANGUAGE"]
|
||||
if "ENABLE_MIC_IS_DYNAMIC" in config.keys():
|
||||
self.ENABLE_MIC_IS_DYNAMIC = config["ENABLE_MIC_IS_DYNAMIC"]
|
||||
if "MIC_THRESHOLD" in config.keys():
|
||||
self.MIC_THRESHOLD = config["MIC_THRESHOLD"]
|
||||
if "INPUT_MIC_IS_DYNAMIC" in config.keys():
|
||||
self.INPUT_MIC_IS_DYNAMIC = config["INPUT_MIC_IS_DYNAMIC"]
|
||||
if "INPUT_MIC_THRESHOLD" in config.keys():
|
||||
self.INPUT_MIC_THRESHOLD = config["INPUT_MIC_THRESHOLD"]
|
||||
if "CHOICE_SPEAKER_DEVICE" in config.keys():
|
||||
self.CHOICE_SPEAKER_DEVICE = config["CHOICE_SPEAKER_DEVICE"]
|
||||
if "INPUT_SPEAKER_VOICE_LANGUAGE" in config.keys():
|
||||
self.INPUT_SPEAKER_VOICE_LANGUAGE = config["INPUT_SPEAKER_VOICE_LANGUAGE"]
|
||||
if "ENABLE_SPEAKER_IS_DYNAMIC" in config.keys():
|
||||
self.ENABLE_SPEAKER_IS_DYNAMIC = config["ENABLE_SPEAKER_IS_DYNAMIC"]
|
||||
if "SPEAKER_THRESHOLD" in config.keys():
|
||||
self.SPEAKER_THRESHOLD = config["SPEAKER_THRESHOLD"]
|
||||
if "INPUT_SPEAKER_SAMPLING_RATE" in config.keys():
|
||||
self.INPUT_SPEAKER_SAMPLING_RATE = config["INPUT_SPEAKER_SAMPLING_RATE"]
|
||||
if "INPUT_SPEAKER_INTERVAL" in config.keys():
|
||||
self.INPUT_SPEAKER_INTERVAL = config["INPUT_SPEAKER_INTERVAL"]
|
||||
if "INPUT_SPEAKER_BUFFER_SIZE" in config.keys():
|
||||
self.INPUT_SPEAKER_BUFFER_SIZE = config["INPUT_SPEAKER_BUFFER_SIZE"]
|
||||
|
||||
# Parameter
|
||||
if "OSC_IP_ADDRESS" in config.keys():
|
||||
@@ -130,12 +134,13 @@ class App(customtkinter.CTk):
|
||||
"OUTPUT_TARGET_LANG": self.OUTPUT_TARGET_LANG,
|
||||
"CHOICE_MIC_DEVICE": self.CHOICE_MIC_DEVICE,
|
||||
"INPUT_MIC_VOICE_LANGUAGE": self.INPUT_MIC_VOICE_LANGUAGE,
|
||||
"ENABLE_MIC_IS_DYNAMIC": self.ENABLE_MIC_IS_DYNAMIC,
|
||||
"MIC_THRESHOLD": self.MIC_THRESHOLD,
|
||||
"INPUT_MIC_IS_DYNAMIC": self.INPUT_MIC_IS_DYNAMIC,
|
||||
"INPUT_MIC_THRESHOLD": self.INPUT_MIC_THRESHOLD,
|
||||
"CHOICE_SPEAKER_DEVICE": self.CHOICE_SPEAKER_DEVICE,
|
||||
"INPUT_SPEAKER_VOICE_LANGUAGE": self.INPUT_SPEAKER_VOICE_LANGUAGE,
|
||||
"ENABLE_SPEAKER_IS_DYNAMIC": self.ENABLE_SPEAKER_IS_DYNAMIC,
|
||||
"SPEAKER_THRESHOLD": self.SPEAKER_THRESHOLD,
|
||||
"INPUT_SPEAKER_SAMPLING_RATE": self.INPUT_SPEAKER_SAMPLING_RATE,
|
||||
"INPUT_SPEAKER_INTERVAL": self.INPUT_SPEAKER_INTERVAL,
|
||||
"INPUT_SPEAKER_BUFFER_SIZE": self.INPUT_SPEAKER_BUFFER_SIZE,
|
||||
"OSC_IP_ADDRESS": self.OSC_IP_ADDRESS,
|
||||
"OSC_PORT": self.OSC_PORT,
|
||||
"AUTH_KEYS": self.AUTH_KEYS,
|
||||
@@ -215,29 +220,40 @@ class App(customtkinter.CTk):
|
||||
self.tabview_logs = customtkinter.CTkTabview(master=self)
|
||||
self.tabview_logs.add("send")
|
||||
self.tabview_logs.add("receive")
|
||||
self.tabview_logs.add("system")
|
||||
self.tabview_logs.grid(row=0, column=1, padx=5, pady=0, sticky="nsew")
|
||||
self.tabview_logs._segmented_button.grid(sticky="W")
|
||||
self.tabview_logs.tab("send").grid_rowconfigure(0, weight=1)
|
||||
self.tabview_logs.tab("send").grid_columnconfigure(0, weight=1)
|
||||
self.tabview_logs.tab("receive").grid_rowconfigure(0, weight=1)
|
||||
self.tabview_logs.tab("receive").grid_columnconfigure(0, weight=1)
|
||||
self.tabview_logs.configure(state='disabled')
|
||||
self.tabview_logs.tab("system").grid_rowconfigure(0, weight=1)
|
||||
self.tabview_logs.tab("system").grid_columnconfigure(0, weight=1)
|
||||
# self.tabview_logs.configure(state='disabled')
|
||||
|
||||
# add textbox message log
|
||||
self.textbox_message_log = customtkinter.CTkTextbox(
|
||||
# add textbox message send log
|
||||
self.textbox_message_send_log = customtkinter.CTkTextbox(
|
||||
self.tabview_logs.tab("send"),
|
||||
font=customtkinter.CTkFont(family=self.FONT_FAMILY)
|
||||
)
|
||||
self.textbox_message_log.grid(row=0, column=0, padx=0, pady=0, sticky="nsew")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_send_log.grid(row=0, column=0, padx=0, pady=0, sticky="nsew")
|
||||
self.textbox_message_send_log.configure(state='disabled')
|
||||
|
||||
# add textbox message log
|
||||
# add textbox message receive log
|
||||
self.textbox_message_receive_log = customtkinter.CTkTextbox(
|
||||
self.tabview_logs.tab("receive"),
|
||||
font=customtkinter.CTkFont(family=self.FONT_FAMILY)
|
||||
)
|
||||
self.textbox_message_receive_log.grid(row=0, column=0, padx=0, pady=0, sticky="nsew")
|
||||
self.textbox_message_receive_log.configure(state='disabled')
|
||||
# self.textbox_message_receive_log.configure(state='disabled')
|
||||
|
||||
# add textbox message system log
|
||||
self.textbox_message_system_log = customtkinter.CTkTextbox(
|
||||
self.tabview_logs.tab("system"),
|
||||
font=customtkinter.CTkFont(family=self.FONT_FAMILY)
|
||||
)
|
||||
self.textbox_message_system_log.grid(row=0, column=0, padx=0, pady=0, sticky="nsew")
|
||||
# self.textbox_message_system_log.configure(state='disabled')
|
||||
|
||||
# add entry message box
|
||||
self.entry_message_box = customtkinter.CTkEntry(
|
||||
@@ -252,10 +268,10 @@ class App(customtkinter.CTk):
|
||||
self.translator = translation.Translator()
|
||||
if self.translator.authentication(self.CHOICE_TRANSLATOR, self.AUTH_KEYS[self.CHOICE_TRANSLATOR]) is False:
|
||||
# error update Auth key
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_log.insert("end", f"[ERROR] Auth Keyを設定してないか間違っています\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
self.textbox_message_system_log.configure(state='normal')
|
||||
self.textbox_message_system_log.insert("end", f"[ERROR] Auth Keyを設定してないか間違っています\n")
|
||||
self.textbox_message_system_log.configure(state='disabled')
|
||||
self.textbox_message_system_log.see("end")
|
||||
|
||||
## set transcription instance
|
||||
self.vr = transcription.VoiceRecognizer()
|
||||
@@ -301,7 +317,10 @@ class App(customtkinter.CTk):
|
||||
|
||||
def button_config_callback(self):
|
||||
if self.config_window is None or not self.config_window.winfo_exists():
|
||||
try:
|
||||
self.config_window = window_config.ToplevelWindowConfig(self)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.config_window.focus()
|
||||
|
||||
def button_information_callback(self):
|
||||
@@ -311,30 +330,32 @@ class App(customtkinter.CTk):
|
||||
|
||||
def checkbox_translation_callback(self):
|
||||
self.ENABLE_TRANSLATION = self.checkbox_translation.get()
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_system_log.configure(state='normal')
|
||||
if self.ENABLE_TRANSLATION:
|
||||
self.textbox_message_log.insert("end", f"[INFO] start translation\n")
|
||||
self.textbox_message_system_log.insert("end", f"[INFO] start translation\n")
|
||||
else:
|
||||
self.textbox_message_log.insert("end", f"[INFO] stop translation\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
self.textbox_message_system_log.insert("end", f"[INFO] stop translation\n")
|
||||
self.textbox_message_system_log.configure(state='disabled')
|
||||
self.textbox_message_system_log.see("end")
|
||||
utils.save_json(self.PATH_CONFIG, "ENABLE_TRANSLATION", self.ENABLE_TRANSLATION)
|
||||
|
||||
def checkbox_transcription_callback(self):
|
||||
self.ENABLE_TRANSCRIPTION = self.checkbox_transcription.get()
|
||||
if self.ENABLE_TRANSCRIPTION is True:
|
||||
# start threading
|
||||
self.vr.set_mic(self.CHOICE_MIC_DEVICE)
|
||||
self.vr.init_mic(threshold=self.MIC_THRESHOLD, is_dynamic=self.ENABLE_MIC_IS_DYNAMIC)
|
||||
th_vr_listen_mic = threading.Thread(target = self.vr_listen_mic)
|
||||
th_vr_recognize_mic = threading.Thread(target = self.vr_recognize_mic)
|
||||
th_vr_listen_mic.start()
|
||||
th_vr_recognize_mic.start()
|
||||
self.vr.set_mic(self.CHOICE_MIC_DEVICE, threshold=self.INPUT_MIC_THRESHOLD, is_dynamic=self.INPUT_MIC_IS_DYNAMIC)
|
||||
self.vr.init_mic()
|
||||
|
||||
self.vr.set_spk(self.CHOICE_SPEAKER_DEVICE)
|
||||
self.vr.init_spk()
|
||||
|
||||
th_vr_listen_mic = threading.Thread(target = self.vr_listen_mic)
|
||||
th_vr_recognize_mic = threading.Thread(target = self.vr_recognize_mic)
|
||||
th_vr_listen_spk = threading.Thread(target = self.vr_listen_spk)
|
||||
th_vr_recognize_spk = threading.Thread(target = self.vr_recognize_spk)
|
||||
|
||||
th_vr_listen_mic.start()
|
||||
th_vr_recognize_mic.start()
|
||||
th_vr_listen_spk.start()
|
||||
th_vr_recognize_spk.start()
|
||||
|
||||
@@ -345,10 +366,10 @@ class App(customtkinter.CTk):
|
||||
self.vr.listen_mic()
|
||||
|
||||
def vr_recognize_mic(self):
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_log.insert("end", f"[INFO] start transcription\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
self.textbox_message_system_log.configure(state='normal')
|
||||
self.textbox_message_system_log.insert("end", f"[INFO] start transcription\n")
|
||||
self.textbox_message_system_log.configure(state='disabled')
|
||||
self.textbox_message_system_log.see("end")
|
||||
|
||||
while self.checkbox_transcription.get() is True:
|
||||
message = self.vr.recognize_mic(language=self.INPUT_MIC_VOICE_LANGUAGE)
|
||||
@@ -357,10 +378,10 @@ class App(customtkinter.CTk):
|
||||
if self.checkbox_translation.get() is False:
|
||||
voice_message = f"{message}"
|
||||
elif self.translator.translator_status[self.CHOICE_TRANSLATOR] is False:
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_log.insert("end", f"[ERROR] Auth Keyもしくは言語の設定が間違っています\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
self.textbox_message_system_log.configure(state='normal')
|
||||
self.textbox_message_system_log.insert("end", f"[ERROR] Auth Keyもしくは言語の設定が間違っています\n")
|
||||
self.textbox_message_system_log.configure(state='disabled')
|
||||
self.textbox_message_system_log.see("end")
|
||||
voice_message = f"{message}"
|
||||
else:
|
||||
result = self.translator.translate(
|
||||
@@ -375,10 +396,10 @@ class App(customtkinter.CTk):
|
||||
osc_tools.send_message(voice_message, self.OSC_IP_ADDRESS, self.OSC_PORT)
|
||||
|
||||
# update textbox message log
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_log.insert("end", f"[VOICE] {voice_message}\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
self.textbox_message_send_log.configure(state='normal')
|
||||
self.textbox_message_send_log.insert("end", f"[VOICE] {voice_message}\n")
|
||||
self.textbox_message_send_log.configure(state='disabled')
|
||||
self.textbox_message_send_log.see("end")
|
||||
|
||||
def vr_listen_spk(self):
|
||||
while self.checkbox_transcription.get() is True:
|
||||
@@ -392,10 +413,10 @@ class App(customtkinter.CTk):
|
||||
if self.checkbox_translation.get() is False:
|
||||
voice_message = f"{message}"
|
||||
elif self.translator.translator_status[self.CHOICE_TRANSLATOR] is False:
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_log.insert("end", f"[ERROR] Auth Keyもしくは言語の設定が間違っています\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
self.textbox_message_system_log.configure(state='normal')
|
||||
self.textbox_message_system_log.insert("end", f"[ERROR] Auth Keyもしくは言語の設定が間違っています\n")
|
||||
self.textbox_message_system_log.configure(state='disabled')
|
||||
self.textbox_message_system_log.see("end")
|
||||
voice_message = f"{message}"
|
||||
else:
|
||||
result = self.translator.translate(
|
||||
@@ -409,11 +430,11 @@ class App(customtkinter.CTk):
|
||||
# send OSC message
|
||||
osc_tools.send_message(voice_message, self.OSC_IP_ADDRESS, self.OSC_PORT)
|
||||
|
||||
# update textbox message log
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_log.insert("end", f"[VOICE] {voice_message}\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
# update textbox message receive log
|
||||
self.textbox_message_receive_log.configure(state='normal')
|
||||
self.textbox_message_receive_log.insert("end", f"[VOICE] {voice_message}\n")
|
||||
self.textbox_message_receive_log.configure(state='disabled')
|
||||
self.textbox_message_receive_log.see("end")
|
||||
|
||||
def checkbox_foreground_callback(self):
|
||||
self.ENABLE_FOREGROUND = self.checkbox_foreground.get()
|
||||
@@ -436,10 +457,10 @@ class App(customtkinter.CTk):
|
||||
if self.checkbox_translation.get() is False:
|
||||
chat_message = f"{message}"
|
||||
elif (self.translator.translator_status[self.CHOICE_TRANSLATOR] is False) or (self.INPUT_SOURCE_LANG == "None") or (self.INPUT_TARGET_LANG == "None"):
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_log.insert("end", f"[ERROR] Auth Keyもしくは言語の設定が間違っています\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
self.textbox_message_system_log.configure(state='normal')
|
||||
self.textbox_message_system_log.insert("end", f"[ERROR] Auth Keyもしくは言語の設定が間違っています\n")
|
||||
self.textbox_message_system_log.configure(state='disabled')
|
||||
self.textbox_message_system_log.see("end")
|
||||
chat_message = f"{message}"
|
||||
else:
|
||||
result = self.translator.translate(
|
||||
@@ -451,13 +472,13 @@ class App(customtkinter.CTk):
|
||||
chat_message = self.MESSAGE_FORMAT.replace("[message]", message).replace("[translation]", result)
|
||||
|
||||
# send OSC message
|
||||
osc_tools.send_message(chat_message, self.OSC_IP_ADDRESS, self.OSC_PORT)
|
||||
# osc_tools.send_message(chat_message, self.OSC_IP_ADDRESS, self.OSC_PORT)
|
||||
|
||||
# update textbox message log
|
||||
self.textbox_message_log.configure(state='normal')
|
||||
self.textbox_message_log.insert("end", f"[CHAT] {chat_message}\n")
|
||||
self.textbox_message_log.configure(state='disabled')
|
||||
self.textbox_message_log.see("end")
|
||||
self.textbox_message_receive_log.configure(state='normal')
|
||||
self.textbox_message_receive_log.insert("end", f"[CHAT] {chat_message}\n")
|
||||
self.textbox_message_receive_log.configure(state='disabled')
|
||||
self.textbox_message_receive_log.see("end")
|
||||
|
||||
# delete message in entry message box
|
||||
# self.entry_message_box.delete(0, customtkinter.END)
|
||||
|
||||
@@ -20,18 +20,18 @@ class VoiceRecognizer():
|
||||
"es-NI","es-PA","es-PY","es-PE","es-PR","es-ES","es-UY","es-US","es-VE","sv-SE","th-TH","tr-TR","uk-UA",
|
||||
"vi-VN","zu-ZA"
|
||||
]
|
||||
self.mic = None
|
||||
self.enable_mic_recognize = False
|
||||
self.queue_mic = queue.Queue()
|
||||
self.mic_device_name = None
|
||||
self.mic_threshold = 50
|
||||
self.mic_is_dynamic = False
|
||||
self.mic_queue = queue.Queue()
|
||||
|
||||
self.spk_device_name = None
|
||||
self.spk_sample_rate = 16000
|
||||
self.spk_interval = 3
|
||||
self.spk_buffer_size = 4096
|
||||
self.spk_language = "en-US"
|
||||
self.spk_audio = np.empty(self.spk_sample_rate * self.spk_interval + self.spk_buffer_size, dtype=np.float32)
|
||||
self.n = 0
|
||||
self.queue_spk = queue.Queue()
|
||||
self.spk_queue = queue.Queue()
|
||||
|
||||
def search_input_device(self):
|
||||
device_list = sd.query_devices()
|
||||
@@ -61,48 +61,34 @@ class VoiceRecognizer():
|
||||
|
||||
def set_mic(self, device_name, threshold=50, is_dynamic=False):
|
||||
input_device_list = self.search_input_device()
|
||||
if device_name in [input_device["name"] for input_device in input_device_list]:
|
||||
index = [device["index"] for device in input_device_list if device["name"] == device_name][0]
|
||||
self.mic_device_name = [device["index"] for device in input_device_list if device["name"] == device_name][0]
|
||||
self.mic_threshold = threshold
|
||||
self.mic_is_dynamic = is_dynamic
|
||||
|
||||
self.mic = sr.Microphone(device_index=index)
|
||||
self.r.energy_threshold = threshold
|
||||
if is_dynamic:
|
||||
def init_mic(self):
|
||||
self.r.energy_threshold = self.mic_threshold
|
||||
if self.mic_is_dynamic:
|
||||
with self.mic as source:
|
||||
self.r.adjust_for_ambient_noise(source, 3.0)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def init_mic(self, threshold=50, is_dynamic=False):
|
||||
if isinstance(self.mic, sr.Microphone):
|
||||
self.r.energy_threshold = threshold
|
||||
if is_dynamic:
|
||||
with self.mic as source:
|
||||
self.r.adjust_for_ambient_noise(source, 3.0)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def listen_mic(self):
|
||||
if self.mic != None:
|
||||
with self.mic as source:
|
||||
with sr.Microphone(device_index=self.mic_device_name) as source:
|
||||
audio = self.r.listen(source)
|
||||
self.queue_mic.put(audio)
|
||||
self.mic_queue.put(audio)
|
||||
|
||||
def recognize_mic(self, language):
|
||||
try:
|
||||
audio = self.queue_mic.get()
|
||||
audio = self.mic_queue.get()
|
||||
text = self.r.recognize_google(audio, language=language)
|
||||
except:
|
||||
text = ""
|
||||
return text
|
||||
|
||||
def set_spk(self, device_name=str(sc.default_speaker().name), sample_rate=16000, interval=3, buffer_size=4096, language="en-US"):
|
||||
def set_spk(self, device_name=str(sc.default_speaker().name), sample_rate=16000, interval=3, buffer_size=4096):
|
||||
self.spk_device_name = device_name
|
||||
self.spk_sample_rate = sample_rate
|
||||
self.spk_interval = interval
|
||||
self.spk_buffer_size = buffer_size
|
||||
self.spk_language = language
|
||||
|
||||
def init_spk(self):
|
||||
self.spk_audio = np.empty(self.spk_sample_rate * self.spk_interval + self.spk_buffer_size, dtype=np.float32)
|
||||
@@ -120,23 +106,23 @@ class VoiceRecognizer():
|
||||
vol = np.convolve(audio[m:n] ** 2, np.ones(100) / 100, 'same')
|
||||
m += vol.argmin()
|
||||
audio_prev = audio.copy()
|
||||
self.queue_spk.put(audio[:m])
|
||||
self.spk_queue.put(audio[:m])
|
||||
audio = np.empty(self.spk_sample_rate * self.spk_interval + self.spk_buffer_size, dtype=np.float32)
|
||||
audio[:n-m] = audio_prev[m:n]
|
||||
n = n-m
|
||||
self.spk_audio = audio
|
||||
self.n = n
|
||||
|
||||
def recognize_spk(self):
|
||||
def recognize_spk(self, language):
|
||||
try:
|
||||
audio = self.queue_spk.get()
|
||||
audio = self.spk_queue.get()
|
||||
with io.BytesIO() as memory_file:
|
||||
sf.write(file=memory_file, data=audio, format="WAV", samplerate=self.spk_sample_rate)
|
||||
memory_file.seek(0)
|
||||
with sr.AudioFile(memory_file) as source:
|
||||
audio = self.r.record(source)
|
||||
text = self.r.recognize_google(audio, language=self.spk_language)
|
||||
except Exception as e:
|
||||
text = self.r.recognize_google(audio, language=language)
|
||||
except:
|
||||
text = ""
|
||||
return text
|
||||
|
||||
|
||||
132
window_config.py
132
window_config.py
@@ -245,7 +245,7 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.checkbox_input_mic_is_dynamic.grid(row=2, column=1, columnspan=3 ,padx=5, pady=5, sticky="nsew")
|
||||
if self.parent.ENABLE_MIC_IS_DYNAMIC is True:
|
||||
if self.parent.INPUT_MIC_IS_DYNAMIC is True:
|
||||
self.checkbox_input_mic_is_dynamic.select()
|
||||
else:
|
||||
self.checkbox_input_mic_is_dynamic.deselect()
|
||||
@@ -263,7 +263,7 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
||||
from_=0,
|
||||
to=300,
|
||||
command=self.slider_input_mic_threshold_callback,
|
||||
variable=tk.DoubleVar(value=self.parent.MIC_THRESHOLD),
|
||||
variable=tk.DoubleVar(value=self.parent.INPUT_MIC_THRESHOLD),
|
||||
)
|
||||
self.slider_input_mic_threshold.grid(row=3, column=1, columnspan=3 ,padx=5, pady=10, sticky="nsew")
|
||||
|
||||
@@ -272,16 +272,15 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
||||
self.tabview_config.tab("Transcription"),
|
||||
text="Input Speaker Device:",
|
||||
fg_color="transparent",
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY, overstrike=True)
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.label_input_speaker_device.grid(row=4, column=0, columnspan=1, padx=5, pady=5, sticky="nsw")
|
||||
self.optionmenu_input_speaker_device = customtkinter.CTkOptionMenu(
|
||||
self.tabview_config.tab("Transcription"),
|
||||
values=self.parent.vr.search_output_device(),
|
||||
# command=self.optionmenu_input_speaker_device_callback,
|
||||
command=self.optionmenu_input_speaker_device_callback,
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY),
|
||||
variable=customtkinter.StringVar(value=self.parent.CHOICE_SPEAKER_DEVICE),
|
||||
state="disabled"
|
||||
)
|
||||
self.optionmenu_input_speaker_device.grid(row=4, column=1, columnspan=3 ,padx=5, pady=5, sticky="nsew")
|
||||
|
||||
@@ -290,59 +289,65 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
||||
self.tabview_config.tab("Transcription"),
|
||||
text="Input Speaker Voice Language:",
|
||||
fg_color="transparent",
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY, overstrike=True)
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.label_input_speaker_voice_language.grid(row=5, column=0, columnspan=1, padx=5, pady=5, sticky="nsw")
|
||||
self.optionmenu_input_speaker_voice_language = customtkinter.CTkOptionMenu(
|
||||
self.tabview_config.tab("Transcription"),
|
||||
values=list(self.parent.vr.languages),
|
||||
# command=self.optionmenu_input_speaker_voice_language_callback,
|
||||
command=self.optionmenu_input_speaker_voice_language_callback,
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY),
|
||||
variable=customtkinter.StringVar(value=self.parent.INPUT_SPEAKER_VOICE_LANGUAGE),
|
||||
state="disabled"
|
||||
)
|
||||
self.optionmenu_input_speaker_voice_language.grid(row=5, column=1, columnspan=3 ,padx=5, pady=5, sticky="nsew")
|
||||
|
||||
## checkbox input speaker in dynamic
|
||||
self.label_input_speaker_is_dynamic = customtkinter.CTkLabel(
|
||||
## entry input speaker sampling rate
|
||||
self.label_input_speaker_sampling_rate = customtkinter.CTkLabel(
|
||||
self.tabview_config.tab("Transcription"),
|
||||
text="Input Speaker IsDynamic:",
|
||||
text="Input Speaker SamplingRate:",
|
||||
fg_color="transparent",
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY, overstrike=True)
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.label_input_speaker_is_dynamic.grid(row=6, column=0, columnspan=1, padx=5, pady=5, sticky="nsw")
|
||||
self.checkbox_input_speaker_is_dynamic = customtkinter.CTkCheckBox(
|
||||
self.label_input_speaker_sampling_rate.grid(row=6, column=0, columnspan=1, padx=5, pady=5, sticky="nsw")
|
||||
self.entry_input_speaker_sampling_rate = customtkinter.CTkEntry(
|
||||
self.tabview_config.tab("Transcription"),
|
||||
text="",
|
||||
onvalue=True,
|
||||
offvalue=False,
|
||||
# command=self.checkbox_input_speaker_is_dynamic_callback,
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY),
|
||||
state="disabled"
|
||||
textvariable=customtkinter.StringVar(value=self.parent.INPUT_SPEAKER_SAMPLING_RATE),
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.checkbox_input_speaker_is_dynamic.grid(row=6, column=1, columnspan=3 ,padx=5, pady=5, sticky="nsew")
|
||||
if self.parent.ENABLE_SPEAKER_IS_DYNAMIC is True:
|
||||
self.checkbox_input_speaker_is_dynamic.select()
|
||||
else:
|
||||
self.checkbox_input_speaker_is_dynamic.deselect()
|
||||
self.entry_input_speaker_sampling_rate.grid(row=6, column=1, columnspan=3 ,padx=5, pady=5, sticky="nsew")
|
||||
self.entry_input_speaker_sampling_rate.bind("<Any-KeyRelease>", self.entry_input_speaker_sampling_rate_callback)
|
||||
|
||||
## slider input speaker threshold
|
||||
self.label_input_speaker_threshold = customtkinter.CTkLabel(
|
||||
## entry input speaker interval
|
||||
self.label_input_speaker_interval = customtkinter.CTkLabel(
|
||||
self.tabview_config.tab("Transcription"),
|
||||
text="Input Speaker Threshold:",
|
||||
text="Input Speaker Interval:",
|
||||
fg_color="transparent",
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY, overstrike=True)
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.label_input_speaker_threshold.grid(row=7, column=0, columnspan=1, padx=5, pady=5, sticky="nsw")
|
||||
self.slider_input_speaker_threshold = customtkinter.CTkSlider(
|
||||
self.label_input_speaker_interval.grid(row=7, column=0, columnspan=1, padx=5, pady=5, sticky="nsw")
|
||||
self.entry_input_speaker_interval = customtkinter.CTkEntry(
|
||||
self.tabview_config.tab("Transcription"),
|
||||
from_=0,
|
||||
to=300,
|
||||
# command=self.slider_input_speaker_threshold_callback,
|
||||
variable=tk.DoubleVar(value=self.parent.SPEAKER_THRESHOLD),
|
||||
state="disabled"
|
||||
textvariable=customtkinter.StringVar(value=self.parent.INPUT_SPEAKER_INTERVAL),
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.slider_input_speaker_threshold.grid(row=7, column=1, columnspan=3 ,padx=5, pady=10, sticky="nsew")
|
||||
self.entry_input_speaker_interval.grid(row=7, column=1, columnspan=3 ,padx=5, pady=5, sticky="nsew")
|
||||
self.entry_input_speaker_interval.bind("<Any-KeyRelease>", self.entry_input_speaker_interval_callback)
|
||||
|
||||
## entry input speaker buffer size
|
||||
self.label_input_speaker_buffer_size = customtkinter.CTkLabel(
|
||||
self.tabview_config.tab("Transcription"),
|
||||
text="Input Speaker BufferSize:",
|
||||
fg_color="transparent",
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.label_input_speaker_buffer_size.grid(row=8, column=0, columnspan=1, padx=5, pady=5, sticky="nsw")
|
||||
self.entry_input_speaker_buffer_size = customtkinter.CTkEntry(
|
||||
self.tabview_config.tab("Transcription"),
|
||||
textvariable=customtkinter.StringVar(value=self.parent.INPUT_SPEAKER_BUFFER_SIZE),
|
||||
font=customtkinter.CTkFont(family=self.parent.FONT_FAMILY)
|
||||
)
|
||||
self.entry_input_speaker_buffer_size.grid(row=8, column=1, columnspan=3 ,padx=5, pady=5, sticky="nsew")
|
||||
self.entry_input_speaker_buffer_size.bind("<Any-KeyRelease>", self.entry_input_speaker_buffer_size_callback)
|
||||
|
||||
# tab Parameter
|
||||
## entry ip address
|
||||
@@ -522,10 +527,10 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
||||
|
||||
def optionmenu_translation_translator_callback(self, choice):
|
||||
if self.parent.translator.authentication(choice, self.parent.AUTH_KEYS[choice]) is False:
|
||||
self.parent.textbox_message_log.configure(state='normal')
|
||||
self.parent.textbox_message_log.insert("end", f"[ERROR]Auth Keyを設定してないか間違っています\n")
|
||||
self.parent.textbox_message_log.configure(state='disabled')
|
||||
self.parent.textbox_message_log.see("end")
|
||||
self.parent.textbox_message_system_log.configure(state='normal')
|
||||
self.parent.textbox_message_system_log.insert("end", f"[ERROR]Auth Keyを設定してないか間違っています\n")
|
||||
self.parent.textbox_message_system_log.configure(state='disabled')
|
||||
self.parent.textbox_message_system_log.see("end")
|
||||
else:
|
||||
self.optionmenu_translation_input_source_language.configure(
|
||||
values=self.parent.translator.languages[choice],
|
||||
@@ -559,14 +564,34 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
||||
|
||||
def checkbox_input_mic_is_dynamic_callback(self):
|
||||
value = self.checkbox_input_mic_is_dynamic.get()
|
||||
self.parent.ENABLE_MIC_IS_DYNAMIC = value
|
||||
utils.save_json(self.parent.PATH_CONFIG, "ENABLE_MIC_IS_DYNAMIC", self.parent.ENABLE_MIC_IS_DYNAMIC)
|
||||
self.parent.vr.init_mic(threshold=self.parent.MIC_THRESHOLD, is_dynamic=self.parent.ENABLE_MIC_IS_DYNAMIC)
|
||||
self.parent.INPUT_MIC_IS_DYNAMIC = value
|
||||
utils.save_json(self.parent.PATH_CONFIG, "INPUT_MIC_IS_DYNAMIC", self.parent.INPUT_MIC_IS_DYNAMIC)
|
||||
self.parent.vr.set_mic(self.parent.CHOICE_MIC_DEVICE, threshold=self.parent.INPUT_MIC_THRESHOLD, is_dynamic=self.parent.INPUT_MIC_IS_DYNAMIC)
|
||||
|
||||
def slider_input_mic_threshold_callback(self, value):
|
||||
self.parent.MIC_THRESHOLD = value
|
||||
utils.save_json(self.parent.PATH_CONFIG, "MIC_THRESHOLD", self.parent.MIC_THRESHOLD)
|
||||
self.parent.vr.init_mic(threshold=self.parent.MIC_THRESHOLD, is_dynamic=self.parent.ENABLE_MIC_IS_DYNAMIC)
|
||||
self.parent.INPUT_MIC_THRESHOLD = value
|
||||
utils.save_json(self.parent.PATH_CONFIG, "INPUT_MIC_THRESHOLD", self.parent.INPUT_MIC_THRESHOLD)
|
||||
self.parent.vr.set_mic(self.parent.CHOICE_MIC_DEVICE, threshold=self.parent.INPUT_MIC_THRESHOLD, is_dynamic=self.parent.INPUT_MIC_IS_DYNAMIC)
|
||||
|
||||
def optionmenu_input_speaker_device_callback(self, choice):
|
||||
self.parent.CHOICE_SPEAKER_DEVICE = choice
|
||||
utils.save_json(self.parent.PATH_CONFIG, "CHOICE_SPEAKER_DEVICE", self.parent.CHOICE_SPEAKER_DEVICE)
|
||||
|
||||
def optionmenu_input_speaker_voice_language_callback(self, choice):
|
||||
self.parent.INPUT_SPEAKER_VOICE_LANGUAGE = choice
|
||||
utils.save_json(self.parent.PATH_CONFIG, "INPUT_SPEAKER_VOICE_LANGUAGE", self.parent.INPUT_SPEAKER_VOICE_LANGUAGE)
|
||||
|
||||
def entry_input_speaker_sampling_rate_callback(self, event):
|
||||
self.parent.INPUT_SPEAKER_SAMPLING_RATE = int(self.entry_input_speaker_sampling_rate.get())
|
||||
utils.save_json(self.parent.PATH_CONFIG, "INPUT_SPEAKER_SAMPLING_RATE", self.parent.INPUT_SPEAKER_SAMPLING_RATE)
|
||||
|
||||
def entry_input_speaker_interval_callback(self, event):
|
||||
self.parent.INPUT_SPEAKER_INTERVAL = int(self.entry_input_speaker_interval.get())
|
||||
utils.save_json(self.parent.PATH_CONFIG, "INPUT_SPEAKER_INTERVAL", self.parent.INPUT_SPEAKER_INTERVAL)
|
||||
|
||||
def entry_input_speaker_buffer_size_callback(self, event):
|
||||
self.parent.INPUT_SPEAKER_BUFFER_SIZE = int(self.entry_input_speaker_buffer_size.get())
|
||||
utils.save_json(self.parent.PATH_CONFIG, "INPUT_SPEAKER_BUFFER_SIZE", self.parent.INPUT_SPEAKER_BUFFER_SIZE)
|
||||
|
||||
def update_ip_address(self):
|
||||
value = self.entry_ip_address.get()
|
||||
@@ -583,19 +608,14 @@ class ToplevelWindowConfig(customtkinter.CTkToplevel):
|
||||
def update_authkey(self):
|
||||
value = self.entry_authkey.get()
|
||||
if len(value) > 0:
|
||||
self.parent.textbox_message_log.configure(state='normal')
|
||||
self.parent.textbox_message_log.delete("0.0", "end")
|
||||
self.parent.textbox_message_log.configure(state='disabled')
|
||||
self.parent.textbox_message_log.see("end")
|
||||
|
||||
if self.parent.translator.authentication(self.parent.CHOICE_TRANSLATOR, self.parent.AUTH_KEYS[self.parent.CHOICE_TRANSLATOR]) is True:
|
||||
self.parent.AUTH_KEYS["DeepL(auth)"] = value
|
||||
utils.save_json(self.parent.PATH_CONFIG, "AUTH_KEYS", self.parent.AUTH_KEYS)
|
||||
else:
|
||||
self.parent.textbox_message_log.configure(state='normal')
|
||||
self.parent.textbox_message_log.insert("end", f"[ERROR]Auth Keyを設定してないか間違っています\n")
|
||||
self.parent.textbox_message_log.configure(state='disabled')
|
||||
self.parent.textbox_message_log.see("end")
|
||||
self.parent.textbox_message_system_log.configure(state='normal')
|
||||
self.parent.textbox_message_system_log.insert("end", f"[ERROR]Auth Keyを設定してないか間違っています\n")
|
||||
self.parent.textbox_message_system_log.configure(state='disabled')
|
||||
self.parent.textbox_message_system_log.see("end")
|
||||
|
||||
def update_message_format(self):
|
||||
value = self.entry_message_format.get()
|
||||
|
||||
Reference in New Issue
Block a user