🚧[WIP/TEST] Model : mute同期処理で文字起こしの同期をQueueからpause/resumeの関数に変更

This commit is contained in:
misyaguziya
2024-05-07 10:15:38 +09:00
parent 1401562ddb
commit 8b866e1577
3 changed files with 41 additions and 37 deletions

View File

@@ -9,7 +9,7 @@ from datetime import datetime
from logging import getLogger, FileHandler, Formatter, INFO from logging import getLogger, FileHandler, Formatter, INFO
from time import sleep from time import sleep
from queue import Queue from queue import Queue
from threading import Thread, Event from threading import Thread
from requests import get as requests_get from requests import get as requests_get
import webbrowser import webbrowser
@@ -30,33 +30,30 @@ from config import config
class threadFnc(Thread): class threadFnc(Thread):
def __init__(self, fnc, end_fnc=None, daemon=True, *args, **kwargs): def __init__(self, fnc, end_fnc=None, daemon=True, *args, **kwargs):
super(threadFnc, self).__init__(daemon=daemon, *args, **kwargs) super(threadFnc, self).__init__(daemon=daemon, target=fnc, *args, **kwargs)
self.fnc = fnc self.fnc = fnc
self.end_fnc = end_fnc self.end_fnc = end_fnc
self._stop = Event() self.loop = True
self._pause = False
def stop(self): def stop(self):
self._stop.set() self.loop = False
def stopped(self):
return self._stop.isSet() def pause(self):
self._pause = True
def resume(self):
self._pause = False
def run(self): def run(self):
while True: while self.loop:
if self.stopped(): self.fnc(*self._args, **self._kwargs)
while self._pause:
sleep(0.1)
if callable(self.end_fnc): if callable(self.end_fnc):
self.end_fnc() self.end_fnc()
return return
self.fnc(*self._args, **self._kwargs)
class ConditionalQueue(Queue):
def __init__(self, flag=True, *args, **kwargs):
super().__init__(*args, **kwargs)
self.flag = flag
def put(self, item, block=True, timeout=None):
if self.flag is True:
super().put(item, block, timeout)
def set_flag(self, value):
self.flag = value
class Model: class Model:
_instance = None _instance = None
@@ -325,8 +322,8 @@ class Model:
pass pass
return return
self.mic_audio_queue = ConditionalQueue() self.mic_audio_queue = Queue()
# self.mic_energy_queue = ConditionalQueue() # self.mic_energy_queue = Queue()
self.changePutQueueMicAudio() self.changePutQueueMicAudio()
mic_device = choice_mic_device[0] mic_device = choice_mic_device[0]
@@ -387,20 +384,27 @@ class Model:
# self.mic_get_energy.start() # self.mic_get_energy.start()
def startPutQueueMicAudio(self): def startPutQueueMicAudio(self):
if isinstance(self.mic_audio_queue, ConditionalQueue): # キューをクリア
if isinstance(self.mic_audio_queue, Queue):
while not self.mic_audio_queue.empty(): while not self.mic_audio_queue.empty():
self.mic_audio_queue.get() self.mic_audio_queue.get()
self.mic_audio_queue.set_flag(True)
# self.mic_energy_queue.set_flag(True) # 文字起こしを再開
# if isinstance(self.mic_print_transcript, threadFnc):
# self.mic_print_transcript.resume()
# 音声のレコードを再開
if isinstance(self.mic_audio_recorder, SelectedMicEnergyAndAudioRecorder):
self.mic_audio_recorder.resume()
def stopPutQueueMicAudio(self): def stopPutQueueMicAudio(self):
if isinstance(self.mic_audio_queue, ConditionalQueue): # 文字起こしを一時停止
self.mic_audio_queue.set_flag(False) # if isinstance(self.mic_print_transcript, threadFnc):
# queueを空にする場合を考慮 # self.mic_print_transcript.pause()
if False:
while not self.mic_audio_queue.empty(): # 音声のレコードを一時停止
self.mic_audio_queue.get() if isinstance(self.mic_audio_recorder, SelectedMicEnergyAndAudioRecorder):
# self.mic_energy_queue.set_flag(False) self.mic_audio_recorder.pause()
def changePutQueueMicAudio(self): def changePutQueueMicAudio(self):
if config.ENABLE_VRC_MIC_MUTE_SYNC is True: if config.ENABLE_VRC_MIC_MUTE_SYNC is True:

View File

@@ -115,9 +115,9 @@ class BaseEnergyAndAudioRecorder:
energy_queue.put(energy) energy_queue.put(energy)
if isinstance(energy_queue, Queue): if isinstance(energy_queue, Queue):
self.stop = self.recorder.listen_energy_and_audio_in_background(self.source, audioRecordCallback, phrase_time_limit=self.record_timeout, callback_energy=energyRecordCallback) self.stop, self.pause, self.resume = self.recorder.listen_energy_and_audio_in_background(self.source, audioRecordCallback, phrase_time_limit=self.record_timeout, callback_energy=energyRecordCallback)
else: else:
self.stop = self.recorder.listen_energy_and_audio_in_background(self.source, audioRecordCallback, phrase_time_limit=self.record_timeout) self.stop, self.pause, self.resume = self.recorder.listen_energy_and_audio_in_background(self.source, audioRecordCallback, phrase_time_limit=self.record_timeout)
class SelectedMicEnergyAndAudioRecorder(BaseEnergyAndAudioRecorder): class SelectedMicEnergyAndAudioRecorder(BaseEnergyAndAudioRecorder):
def __init__(self, device, energy_threshold, dynamic_energy_threshold, record_timeout): def __init__(self, device, energy_threshold, dynamic_energy_threshold, record_timeout):

View File

@@ -13,5 +13,5 @@ sentencepiece==0.1.99
ctranslate2==4.1.0 ctranslate2==4.1.0
faster-whisper==1.0.1 faster-whisper==1.0.1
translators @ git+https://github.com/misyaguziya/translators@5.8.9 translators @ git+https://github.com/misyaguziya/translators@5.8.9
SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.2 SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4
tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.2 tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.2