diff --git a/model.py b/model.py index 1da98538..bd60c615 100644 --- a/model.py +++ b/model.py @@ -9,7 +9,7 @@ from datetime import datetime from logging import getLogger, FileHandler, Formatter, INFO from time import sleep from queue import Queue -from threading import Thread, Event +from threading import Thread from requests import get as requests_get import webbrowser @@ -30,33 +30,30 @@ from config import config class threadFnc(Thread): 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.end_fnc = end_fnc - self._stop = Event() + self.loop = True + self._pause = False + def stop(self): - self._stop.set() - def stopped(self): - return self._stop.isSet() + self.loop = False + + def pause(self): + self._pause = True + + def resume(self): + self._pause = False + def run(self): - while True: - if self.stopped(): - if callable(self.end_fnc): - self.end_fnc() - return + while self.loop: self.fnc(*self._args, **self._kwargs) + while self._pause: + sleep(0.1) -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 + if callable(self.end_fnc): + self.end_fnc() + return class Model: _instance = None @@ -325,8 +322,8 @@ class Model: pass return - self.mic_audio_queue = ConditionalQueue() - # self.mic_energy_queue = ConditionalQueue() + self.mic_audio_queue = Queue() + # self.mic_energy_queue = Queue() self.changePutQueueMicAudio() mic_device = choice_mic_device[0] @@ -387,20 +384,27 @@ class Model: # self.mic_get_energy.start() def startPutQueueMicAudio(self): - if isinstance(self.mic_audio_queue, ConditionalQueue): + # キューをクリア + if isinstance(self.mic_audio_queue, Queue): while not self.mic_audio_queue.empty(): 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): - if isinstance(self.mic_audio_queue, ConditionalQueue): - self.mic_audio_queue.set_flag(False) - # queueを空にする場合を考慮 - if False: - while not self.mic_audio_queue.empty(): - self.mic_audio_queue.get() - # self.mic_energy_queue.set_flag(False) + # 文字起こしを一時停止 + # if isinstance(self.mic_print_transcript, threadFnc): + # self.mic_print_transcript.pause() + + # 音声のレコードを一時停止 + if isinstance(self.mic_audio_recorder, SelectedMicEnergyAndAudioRecorder): + self.mic_audio_recorder.pause() def changePutQueueMicAudio(self): if config.ENABLE_VRC_MIC_MUTE_SYNC is True: diff --git a/models/transcription/transcription_recorder.py b/models/transcription/transcription_recorder.py index 0128a37b..c5f6af56 100644 --- a/models/transcription/transcription_recorder.py +++ b/models/transcription/transcription_recorder.py @@ -115,9 +115,9 @@ class BaseEnergyAndAudioRecorder: energy_queue.put(energy) 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: - 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): def __init__(self, device, energy_threshold, dynamic_energy_threshold, record_timeout): diff --git a/requirements.txt b/requirements.txt index 9567870c..13fe8df2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,5 +13,5 @@ sentencepiece==0.1.99 ctranslate2==4.1.0 faster-whisper==1.0.1 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 \ No newline at end of file