Merge branch 'bugfix_speakerdevice' into develop

This commit is contained in:
misyaguziya
2024-05-06 03:21:30 +09:00
3 changed files with 32 additions and 25 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
@@ -33,22 +33,20 @@ 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
def stop(self): def stop(self):
self._stop.set() self.loop = False
def stopped(self):
return self._stop.is_set()
def run(self): def run(self):
while True: while self.loop:
if self.stopped(): self.fnc(*self._args, **self._kwargs)
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 Model: class Model:
_instance = None _instance = None
@@ -392,7 +390,8 @@ class Model:
) )
def sendMicTranscript(): def sendMicTranscript():
try: try:
self.mic_transcriber.transcribeAudioQueue(mic_audio_queue, config.SOURCE_LANGUAGE, config.SOURCE_COUNTRY) res = self.mic_transcriber.transcribeAudioQueue(mic_audio_queue, config.SOURCE_LANGUAGE, config.SOURCE_COUNTRY)
if res:
message = self.mic_transcriber.getTranscript() message = self.mic_transcriber.getTranscript()
fnc(message) fnc(message)
except Exception: except Exception:
@@ -425,9 +424,10 @@ class Model:
def stopMicTranscript(self): def stopMicTranscript(self):
if isinstance(self.mic_print_transcript, threadFnc): if isinstance(self.mic_print_transcript, threadFnc):
self.mic_print_transcript.stop() self.mic_print_transcript.stop()
self.mic_print_transcript.join()
self.mic_print_transcript = None self.mic_print_transcript = None
if isinstance(self.mic_audio_recorder, SelectedMicEnergyAndAudioRecorder): if isinstance(self.mic_audio_recorder, SelectedMicEnergyAndAudioRecorder):
self.mic_audio_recorder.stop(wait_for_stop=False, forced_stop=True) self.mic_audio_recorder.stop()
self.mic_audio_recorder = None self.mic_audio_recorder = None
# if isinstance(self.mic_get_energy, threadFnc): # if isinstance(self.mic_get_energy, threadFnc):
# self.mic_get_energy.stop() # self.mic_get_energy.stop()
@@ -465,7 +465,7 @@ class Model:
self.mic_energy_plot_progressbar.stop() self.mic_energy_plot_progressbar.stop()
self.mic_energy_plot_progressbar = None self.mic_energy_plot_progressbar = None
if isinstance(self.mic_energy_recorder, SelectedMicEnergyRecorder): if isinstance(self.mic_energy_recorder, SelectedMicEnergyRecorder):
self.mic_energy_recorder.stop(wait_for_stop=False, forced_stop=True) self.mic_energy_recorder.stop()
self.mic_energy_recorder = None self.mic_energy_recorder = None
def startSpeakerTranscript(self, fnc, error_fnc=None): def startSpeakerTranscript(self, fnc, error_fnc=None):
@@ -505,7 +505,8 @@ class Model:
) )
def sendSpeakerTranscript(): def sendSpeakerTranscript():
try: try:
self.speaker_transcriber.transcribeAudioQueue(speaker_audio_queue, config.TARGET_LANGUAGE, config.TARGET_COUNTRY) res = self.speaker_transcriber.transcribeAudioQueue(speaker_audio_queue, config.TARGET_LANGUAGE, config.TARGET_COUNTRY)
if res:
message = self.speaker_transcriber.getTranscript() message = self.speaker_transcriber.getTranscript()
fnc(message) fnc(message)
except Exception: except Exception:
@@ -538,9 +539,10 @@ class Model:
def stopSpeakerTranscript(self): def stopSpeakerTranscript(self):
if isinstance(self.speaker_print_transcript, threadFnc): if isinstance(self.speaker_print_transcript, threadFnc):
self.speaker_print_transcript.stop() self.speaker_print_transcript.stop()
self.speaker_print_transcript.join()
self.speaker_print_transcript = None self.speaker_print_transcript = None
if isinstance(self.speaker_audio_recorder, SelectedSpeakerEnergyAndAudioRecorder): if isinstance(self.speaker_audio_recorder, SelectedSpeakerEnergyAndAudioRecorder):
self.speaker_audio_recorder.stop(wait_for_stop=False, forced_stop=True) self.speaker_audio_recorder.stop()
self.speaker_audio_recorder = None self.speaker_audio_recorder = None
# if isinstance(self.speaker_get_energy, threadFnc): # if isinstance(self.speaker_get_energy, threadFnc):
# self.speaker_get_energy.stop() # self.speaker_get_energy.stop()
@@ -578,7 +580,7 @@ class Model:
self.speaker_energy_plot_progressbar.stop() self.speaker_energy_plot_progressbar.stop()
self.speaker_energy_plot_progressbar = None self.speaker_energy_plot_progressbar = None
if isinstance(self.speaker_energy_recorder, SelectedSpeakerEnergyRecorder): if isinstance(self.speaker_energy_recorder, SelectedSpeakerEnergyRecorder):
self.speaker_energy_recorder.stop(wait_for_stop=False, forced_stop=True) self.speaker_energy_recorder.stop()
self.speaker_energy_recorder = None self.speaker_energy_recorder = None
def notificationXSOverlay(self, message): def notificationXSOverlay(self, message):

View File

@@ -1,3 +1,4 @@
import time
from io import BytesIO from io import BytesIO
from threading import Event from threading import Event
import wave import wave
@@ -38,6 +39,9 @@ class AudioTranscriber:
self.transcription_engine = "Whisper" self.transcription_engine = "Whisper"
def transcribeAudioQueue(self, audio_queue, language, country): def transcribeAudioQueue(self, audio_queue, language, country):
if audio_queue.empty():
time.sleep(0.01)
return False
audio, time_spoken = audio_queue.get() audio, time_spoken = audio_queue.get()
self.updateLastSampleAndPhraseStatus(audio, time_spoken) self.updateLastSampleAndPhraseStatus(audio, time_spoken)
@@ -75,6 +79,7 @@ class AudioTranscriber:
if text != '': if text != '':
self.updateTranscript(text) self.updateTranscript(text)
return True
def updateLastSampleAndPhraseStatus(self, data, time_spoken): def updateLastSampleAndPhraseStatus(self, data, time_spoken):
source_info = self.audio_sources source_info = self.audio_sources

View File

@@ -14,5 +14,5 @@ ctranslate2==4.1.0
faster-whisper==1.0.1 faster-whisper==1.0.1
openvr==1.26.701 openvr==1.26.701
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.3 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