diff --git a/VRCT.py b/VRCT.py index 727f53d9..864ca661 100644 --- a/VRCT.py +++ b/VRCT.py @@ -1,10 +1,8 @@ import os import json -import queue import tkinter as tk import customtkinter from PIL import Image -import pyaudiowpatch as pyaudio import utils import translation @@ -19,10 +17,7 @@ class App(customtkinter.CTk): # 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) + self.vr = transcription.VoiceRecognizer() # init config self.PATH_CONFIG = "./config.json" @@ -435,6 +430,7 @@ class App(customtkinter.CTk): interval=int(self.INPUT_SPEAKER_INTERVAL), language=self.INPUT_SPEAKER_VOICE_LANGUAGE, ) + self.vr.init_spk() self.vr.start_spk_recording() self.th_vr_recognize_spk = utils.thread_fnc(self.vr_recognize_spk) self.th_vr_recognize_spk.start() @@ -449,7 +445,8 @@ class App(customtkinter.CTk): utils.save_json(self.PATH_CONFIG, "ENABLE_TRANSCRIPTION_RECEIVE", self.ENABLE_TRANSCRIPTION_RECEIVE) def vr_listen_mic(self): - self.vr.listen_mic() + if self.checkbox_transcription_send.get() is True: + self.vr.listen_mic() def vr_recognize_mic(self): message = self.vr.recognize_mic() @@ -469,14 +466,17 @@ class App(customtkinter.CTk): message=message ) voice_message = self.MESSAGE_FORMAT.replace("[message]", message).replace("[translation]", result) - # send OSC message - osc_tools.send_message(voice_message, self.OSC_IP_ADDRESS, self.OSC_PORT) - # update textbox message log - utils.print_textbox(self.textbox_message_log, f"{voice_message}", "SEND") - utils.print_textbox(self.textbox_message_send_log, f"{voice_message}", "SEND") + + if self.checkbox_transcription_send.get() is True: + # send OSC message + osc_tools.send_message(voice_message, self.OSC_IP_ADDRESS, self.OSC_PORT) + # update textbox message log + utils.print_textbox(self.textbox_message_log, f"{voice_message}", "SEND") + utils.print_textbox(self.textbox_message_send_log, f"{voice_message}", "SEND") def vr_listen_spk(self): - self.vr.listen_spk() + if self.checkbox_transcription_receive.get() is True: + self.vr.listen_spk() def vr_recognize_spk(self): message = self.vr.recognize_spk() @@ -498,9 +498,11 @@ class App(customtkinter.CTk): voice_message = self.MESSAGE_FORMAT.replace("[message]", message).replace("[translation]", result) # send OSC message # osc_tools.send_message(voice_message, self.OSC_IP_ADDRESS, self.OSC_PORT) - # update textbox message receive log - utils.print_textbox(self.textbox_message_log, f"{voice_message}", "RECEIVE") - utils.print_textbox(self.textbox_message_receive_log, f"{voice_message}", "RECEIVE") + + if self.checkbox_transcription_receive.get() is True: + # update textbox message receive log + utils.print_textbox(self.textbox_message_log, f"{voice_message}", "RECEIVE") + utils.print_textbox(self.textbox_message_receive_log, f"{voice_message}", "RECEIVE") def checkbox_foreground_callback(self): self.ENABLE_FOREGROUND = self.checkbox_foreground.get() diff --git a/transcription.py b/transcription.py index 9a746d79..e09842a2 100644 --- a/transcription.py +++ b/transcription.py @@ -1,12 +1,13 @@ +import queue import sounddevice as sd import speech_recognition as sr import pyaudiowpatch as pyaudio # VoiceRecognizer class VoiceRecognizer(): - def __init__(self, p_audio, mic_queue, spk_queue): + def __init__(self): self.r = sr.Recognizer() - self.p = p_audio + self.p = pyaudio.PyAudio() self.languages = [ "ja-JP","en-US","en-GB","af-ZA","ar-DZ","ar-BH","ar-EG","ar-IL","ar-IQ","ar-JO","ar-KW","ar-LB","ar-MA", @@ -22,13 +23,13 @@ class VoiceRecognizer(): self.mic_threshold = 50 self.mic_is_dynamic = False self.mic_language = "ja-JP" - self.mic_queue = mic_queue + self.mic_queue = queue.Queue() self.spk_device = None self.spk_interval = 3 self.spk_language = "ja-JP" self.spk_stream = None - self.spk_queue = spk_queue + self.spk_queue = queue.Queue() def search_input_device(self): devices = [] @@ -72,6 +73,9 @@ class VoiceRecognizer(): self.mic_language = language def init_mic(self): + while self.mic_queue.empty() is False: + self.mic_queue.get() + self.r.energy_threshold = self.mic_threshold if self.mic_is_dynamic: with self.mic as source: @@ -96,6 +100,10 @@ class VoiceRecognizer(): self.spk_interval = interval self.spk_language = language + def init_spk(self): + while self.spk_queue.empty() is False: + self.spk_queue.get() + def spk_record_callback(self, in_data, frame_count, time_info, status): self.spk_queue.put(in_data) return (in_data, pyaudio.paContinue)