change mic/spk start/stop timing

This commit is contained in:
misyaguziya
2023-06-23 18:03:33 +09:00
parent b99b818cee
commit 80ab946d5f
2 changed files with 30 additions and 20 deletions

14
VRCT.py
View File

@@ -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,6 +445,7 @@ class App(customtkinter.CTk):
utils.save_json(self.PATH_CONFIG, "ENABLE_TRANSCRIPTION_RECEIVE", self.ENABLE_TRANSCRIPTION_RECEIVE)
def vr_listen_mic(self):
if self.checkbox_transcription_send.get() is True:
self.vr.listen_mic()
def vr_recognize_mic(self):
@@ -469,6 +466,8 @@ class App(customtkinter.CTk):
message=message
)
voice_message = self.MESSAGE_FORMAT.replace("[message]", message).replace("[translation]", result)
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
@@ -476,6 +475,7 @@ class App(customtkinter.CTk):
utils.print_textbox(self.textbox_message_send_log, f"{voice_message}", "SEND")
def vr_listen_spk(self):
if self.checkbox_transcription_receive.get() is True:
self.vr.listen_spk()
def vr_recognize_spk(self):
@@ -498,6 +498,8 @@ 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)
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")

View File

@@ -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)