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

34
VRCT.py
View File

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

View File

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