change mic/spk start/stop timing
This commit is contained in:
34
VRCT.py
34
VRCT.py
@@ -1,10 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import queue
|
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import customtkinter
|
import customtkinter
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
import pyaudiowpatch as pyaudio
|
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
import translation
|
import translation
|
||||||
@@ -19,10 +17,7 @@ class App(customtkinter.CTk):
|
|||||||
|
|
||||||
# init instance
|
# init instance
|
||||||
self.translator = translation.Translator()
|
self.translator = translation.Translator()
|
||||||
self.mic_queue = queue.Queue()
|
self.vr = transcription.VoiceRecognizer()
|
||||||
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"
|
||||||
@@ -435,6 +430,7 @@ class App(customtkinter.CTk):
|
|||||||
interval=int(self.INPUT_SPEAKER_INTERVAL),
|
interval=int(self.INPUT_SPEAKER_INTERVAL),
|
||||||
language=self.INPUT_SPEAKER_VOICE_LANGUAGE,
|
language=self.INPUT_SPEAKER_VOICE_LANGUAGE,
|
||||||
)
|
)
|
||||||
|
self.vr.init_spk()
|
||||||
self.vr.start_spk_recording()
|
self.vr.start_spk_recording()
|
||||||
self.th_vr_recognize_spk = utils.thread_fnc(self.vr_recognize_spk)
|
self.th_vr_recognize_spk = utils.thread_fnc(self.vr_recognize_spk)
|
||||||
self.th_vr_recognize_spk.start()
|
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)
|
utils.save_json(self.PATH_CONFIG, "ENABLE_TRANSCRIPTION_RECEIVE", self.ENABLE_TRANSCRIPTION_RECEIVE)
|
||||||
|
|
||||||
def vr_listen_mic(self):
|
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):
|
def vr_recognize_mic(self):
|
||||||
message = self.vr.recognize_mic()
|
message = self.vr.recognize_mic()
|
||||||
@@ -469,14 +466,17 @@ class App(customtkinter.CTk):
|
|||||||
message=message
|
message=message
|
||||||
)
|
)
|
||||||
voice_message = self.MESSAGE_FORMAT.replace("[message]", message).replace("[translation]", result)
|
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)
|
if self.checkbox_transcription_send.get() is True:
|
||||||
# update textbox message log
|
# send OSC message
|
||||||
utils.print_textbox(self.textbox_message_log, f"{voice_message}", "SEND")
|
osc_tools.send_message(voice_message, self.OSC_IP_ADDRESS, self.OSC_PORT)
|
||||||
utils.print_textbox(self.textbox_message_send_log, f"{voice_message}", "SEND")
|
# 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):
|
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):
|
def vr_recognize_spk(self):
|
||||||
message = self.vr.recognize_spk()
|
message = self.vr.recognize_spk()
|
||||||
@@ -498,9 +498,11 @@ class App(customtkinter.CTk):
|
|||||||
voice_message = self.MESSAGE_FORMAT.replace("[message]", message).replace("[translation]", result)
|
voice_message = self.MESSAGE_FORMAT.replace("[message]", message).replace("[translation]", result)
|
||||||
# send OSC message
|
# send OSC message
|
||||||
# osc_tools.send_message(voice_message, self.OSC_IP_ADDRESS, self.OSC_PORT)
|
# 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")
|
if self.checkbox_transcription_receive.get() is True:
|
||||||
utils.print_textbox(self.textbox_message_receive_log, f"{voice_message}", "RECEIVE")
|
# 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):
|
def checkbox_foreground_callback(self):
|
||||||
self.ENABLE_FOREGROUND = self.checkbox_foreground.get()
|
self.ENABLE_FOREGROUND = self.checkbox_foreground.get()
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
|
import queue
|
||||||
import sounddevice as sd
|
import sounddevice as sd
|
||||||
import speech_recognition as sr
|
import speech_recognition as sr
|
||||||
import pyaudiowpatch as pyaudio
|
import pyaudiowpatch as pyaudio
|
||||||
|
|
||||||
# VoiceRecognizer
|
# VoiceRecognizer
|
||||||
class VoiceRecognizer():
|
class VoiceRecognizer():
|
||||||
def __init__(self, p_audio, mic_queue, spk_queue):
|
def __init__(self):
|
||||||
self.r = sr.Recognizer()
|
self.r = sr.Recognizer()
|
||||||
self.p = p_audio
|
self.p = pyaudio.PyAudio()
|
||||||
|
|
||||||
self.languages = [
|
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",
|
"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_threshold = 50
|
||||||
self.mic_is_dynamic = False
|
self.mic_is_dynamic = False
|
||||||
self.mic_language = "ja-JP"
|
self.mic_language = "ja-JP"
|
||||||
self.mic_queue = mic_queue
|
self.mic_queue = queue.Queue()
|
||||||
|
|
||||||
self.spk_device = None
|
self.spk_device = None
|
||||||
self.spk_interval = 3
|
self.spk_interval = 3
|
||||||
self.spk_language = "ja-JP"
|
self.spk_language = "ja-JP"
|
||||||
self.spk_stream = None
|
self.spk_stream = None
|
||||||
self.spk_queue = spk_queue
|
self.spk_queue = queue.Queue()
|
||||||
|
|
||||||
def search_input_device(self):
|
def search_input_device(self):
|
||||||
devices = []
|
devices = []
|
||||||
@@ -72,6 +73,9 @@ class VoiceRecognizer():
|
|||||||
self.mic_language = language
|
self.mic_language = language
|
||||||
|
|
||||||
def init_mic(self):
|
def init_mic(self):
|
||||||
|
while self.mic_queue.empty() is False:
|
||||||
|
self.mic_queue.get()
|
||||||
|
|
||||||
self.r.energy_threshold = self.mic_threshold
|
self.r.energy_threshold = self.mic_threshold
|
||||||
if self.mic_is_dynamic:
|
if self.mic_is_dynamic:
|
||||||
with self.mic as source:
|
with self.mic as source:
|
||||||
@@ -96,6 +100,10 @@ class VoiceRecognizer():
|
|||||||
self.spk_interval = interval
|
self.spk_interval = interval
|
||||||
self.spk_language = language
|
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):
|
def spk_record_callback(self, in_data, frame_count, time_info, status):
|
||||||
self.spk_queue.put(in_data)
|
self.spk_queue.put(in_data)
|
||||||
return (in_data, pyaudio.paContinue)
|
return (in_data, pyaudio.paContinue)
|
||||||
|
|||||||
Reference in New Issue
Block a user