[Update] change transcription_recorder.py/transcription_transcriber.py/notification.py func name
This commit is contained in:
40
model.py
40
model.py
@@ -10,7 +10,7 @@ from models.osc.osc_tools import sendTyping, sendMessage, sendTestAction, receiv
|
|||||||
from models.transcription.transcription_recorder import SelectedMicRecorder, SelectedSpeakerRecorder
|
from models.transcription.transcription_recorder import SelectedMicRecorder, SelectedSpeakerRecorder
|
||||||
from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakeEnergyRecorder
|
from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakeEnergyRecorder
|
||||||
from models.transcription.transcription_transcriber import AudioTranscriber
|
from models.transcription.transcription_transcriber import AudioTranscriber
|
||||||
from models.xsoverlay.notification import notification_xsoverlay_for_vrct
|
from models.xsoverlay.notification import xsoverlayForVRCT
|
||||||
from config import config
|
from config import config
|
||||||
|
|
||||||
class threadFnc(Thread):
|
class threadFnc(Thread):
|
||||||
@@ -162,19 +162,19 @@ class Model:
|
|||||||
config.INPUT_MIC_DYNAMIC_ENERGY_THRESHOLD,
|
config.INPUT_MIC_DYNAMIC_ENERGY_THRESHOLD,
|
||||||
config.INPUT_MIC_RECORD_TIMEOUT,
|
config.INPUT_MIC_RECORD_TIMEOUT,
|
||||||
)
|
)
|
||||||
self.mic_audio_recorder.record_into_queue(mic_audio_queue)
|
self.mic_audio_recorder.recordIntoQueue(mic_audio_queue)
|
||||||
mic_transcriber = AudioTranscriber(
|
mic_transcriber = AudioTranscriber(
|
||||||
speaker=False,
|
speaker=False,
|
||||||
source=self.mic_audio_recorder.source,
|
source=self.mic_audio_recorder.source,
|
||||||
phrase_timeout=config.INPUT_MIC_PHRASE_TIMEOUT,
|
phrase_timeout=config.INPUT_MIC_PHRASE_TIMEOUT,
|
||||||
max_phrases=config.INPUT_MIC_MAX_PHRASES,
|
max_phrases=config.INPUT_MIC_MAX_PHRASES,
|
||||||
)
|
)
|
||||||
def mic_transcript_to_chatbox():
|
def sendMicTranscript():
|
||||||
mic_transcriber.transcribe_audio_queue(mic_audio_queue, config.INPUT_MIC_VOICE_LANGUAGE)
|
mic_transcriber.transcribeAudioQueue(mic_audio_queue, config.INPUT_MIC_VOICE_LANGUAGE)
|
||||||
message = mic_transcriber.get_transcript()
|
message = mic_transcriber.getTranscript()
|
||||||
fnc(message)
|
fnc(message)
|
||||||
|
|
||||||
self.mic_print_transcript = threadFnc(mic_transcript_to_chatbox)
|
self.mic_print_transcript = threadFnc(sendMicTranscript)
|
||||||
self.mic_print_transcript.daemon = True
|
self.mic_print_transcript.daemon = True
|
||||||
self.mic_print_transcript.start()
|
self.mic_print_transcript.start()
|
||||||
|
|
||||||
@@ -186,7 +186,7 @@ class Model:
|
|||||||
self.mic_audio_recorder.stop = None
|
self.mic_audio_recorder.stop = None
|
||||||
|
|
||||||
def startCheckMicEnergy(self, fnc):
|
def startCheckMicEnergy(self, fnc):
|
||||||
def progressBarInputMicEnergyPlot():
|
def sendMicEnergy():
|
||||||
if mic_energy_queue.empty() is False:
|
if mic_energy_queue.empty() is False:
|
||||||
energy = mic_energy_queue.get()
|
energy = mic_energy_queue.get()
|
||||||
fnc(energy)
|
fnc(energy)
|
||||||
@@ -194,8 +194,8 @@ class Model:
|
|||||||
mic_energy_queue = Queue()
|
mic_energy_queue = Queue()
|
||||||
mic_device = [device for device in getInputDevices()[config.CHOICE_MIC_HOST] if device["name"] == config.CHOICE_MIC_DEVICE][0]
|
mic_device = [device for device in getInputDevices()[config.CHOICE_MIC_HOST] if device["name"] == config.CHOICE_MIC_DEVICE][0]
|
||||||
self.mic_energy_recorder = SelectedMicEnergyRecorder(mic_device)
|
self.mic_energy_recorder = SelectedMicEnergyRecorder(mic_device)
|
||||||
self.mic_energy_recorder.record_into_queue(mic_energy_queue)
|
self.mic_energy_recorder.recordIntoQueue(mic_energy_queue)
|
||||||
self.mic_energy_plot_progressbar = threadFnc(progressBarInputMicEnergyPlot)
|
self.mic_energy_plot_progressbar = threadFnc(sendMicEnergy)
|
||||||
self.mic_energy_plot_progressbar.daemon = True
|
self.mic_energy_plot_progressbar.daemon = True
|
||||||
self.mic_energy_plot_progressbar.start()
|
self.mic_energy_plot_progressbar.start()
|
||||||
|
|
||||||
@@ -214,19 +214,19 @@ class Model:
|
|||||||
config.INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD,
|
config.INPUT_SPEAKER_DYNAMIC_ENERGY_THRESHOLD,
|
||||||
config.INPUT_SPEAKER_RECORD_TIMEOUT,
|
config.INPUT_SPEAKER_RECORD_TIMEOUT,
|
||||||
)
|
)
|
||||||
self.spk_audio_recorder.record_into_queue(spk_audio_queue)
|
self.spk_audio_recorder.recordIntoQueue(spk_audio_queue)
|
||||||
spk_transcriber = AudioTranscriber(
|
spk_transcriber = AudioTranscriber(
|
||||||
speaker=True,
|
speaker=True,
|
||||||
source=self.spk_audio_recorder.source,
|
source=self.spk_audio_recorder.source,
|
||||||
phrase_timeout=config.INPUT_SPEAKER_PHRASE_TIMEOUT,
|
phrase_timeout=config.INPUT_SPEAKER_PHRASE_TIMEOUT,
|
||||||
max_phrases=config.INPUT_SPEAKER_MAX_PHRASES,
|
max_phrases=config.INPUT_SPEAKER_MAX_PHRASES,
|
||||||
)
|
)
|
||||||
def spk_transcript_to_textbox():
|
def sendSpkTranscript():
|
||||||
spk_transcriber.transcribe_audio_queue(spk_audio_queue, config.INPUT_SPEAKER_VOICE_LANGUAGE)
|
spk_transcriber.transcribeAudioQueue(spk_audio_queue, config.INPUT_SPEAKER_VOICE_LANGUAGE)
|
||||||
message = spk_transcriber.get_transcript()
|
message = spk_transcriber.getTranscript()
|
||||||
fnc(message)
|
fnc(message)
|
||||||
|
|
||||||
self.spk_print_transcript = threadFnc(spk_transcript_to_textbox)
|
self.spk_print_transcript = threadFnc(sendSpkTranscript)
|
||||||
self.spk_print_transcript.daemon = True
|
self.spk_print_transcript.daemon = True
|
||||||
self.spk_print_transcript.start()
|
self.spk_print_transcript.start()
|
||||||
|
|
||||||
@@ -238,13 +238,13 @@ class Model:
|
|||||||
self.spk_audio_recorder.stop = None
|
self.spk_audio_recorder.stop = None
|
||||||
|
|
||||||
def startCheckSpeakerEnergy(self, fnc):
|
def startCheckSpeakerEnergy(self, fnc):
|
||||||
def progressBar_input_speaker_energy_plot():
|
def sendSpeakerEnergy():
|
||||||
if speaker_energy_queue.empty() is False:
|
if speaker_energy_queue.empty() is False:
|
||||||
energy = speaker_energy_queue.get()
|
energy = speaker_energy_queue.get()
|
||||||
fnc(energy)
|
fnc(energy)
|
||||||
sleep(0.01)
|
sleep(0.01)
|
||||||
|
|
||||||
def progressBar_input_speaker_energy_get():
|
def getSpeakerEnergy():
|
||||||
with self.speaker_energy_recorder.source as source:
|
with self.speaker_energy_recorder.source as source:
|
||||||
energy = self.speaker_energy_recorder.recorder.listen_energy(source)
|
energy = self.speaker_energy_recorder.recorder.listen_energy(source)
|
||||||
speaker_energy_queue.put(energy)
|
speaker_energy_queue.put(energy)
|
||||||
@@ -252,10 +252,10 @@ class Model:
|
|||||||
speaker_device = [device for device in getOutputDevices() if device["name"] == config.CHOICE_SPEAKER_DEVICE][0]
|
speaker_device = [device for device in getOutputDevices() if device["name"] == config.CHOICE_SPEAKER_DEVICE][0]
|
||||||
speaker_energy_queue = Queue()
|
speaker_energy_queue = Queue()
|
||||||
self.speaker_energy_recorder = SelectedSpeakeEnergyRecorder(speaker_device)
|
self.speaker_energy_recorder = SelectedSpeakeEnergyRecorder(speaker_device)
|
||||||
self.speaker_energy_get_progressbar = threadFnc(progressBar_input_speaker_energy_get)
|
self.speaker_energy_get_progressbar = threadFnc(getSpeakerEnergy)
|
||||||
self.speaker_energy_get_progressbar.daemon = True
|
self.speaker_energy_get_progressbar.daemon = True
|
||||||
self.speaker_energy_get_progressbar.start()
|
self.speaker_energy_get_progressbar.start()
|
||||||
self.speaker_energy_plot_progressbar = threadFnc(progressBar_input_speaker_energy_plot)
|
self.speaker_energy_plot_progressbar = threadFnc(sendSpeakerEnergy)
|
||||||
self.speaker_energy_plot_progressbar.daemon = True
|
self.speaker_energy_plot_progressbar.daemon = True
|
||||||
self.speaker_energy_plot_progressbar.start()
|
self.speaker_energy_plot_progressbar.start()
|
||||||
|
|
||||||
@@ -265,7 +265,7 @@ class Model:
|
|||||||
if self.speaker_energy_plot_progressbar != None:
|
if self.speaker_energy_plot_progressbar != None:
|
||||||
self.speaker_energy_plot_progressbar.stop()
|
self.speaker_energy_plot_progressbar.stop()
|
||||||
|
|
||||||
def notificationXsoverlay(self, message):
|
def notificationXSOverlay(self, message):
|
||||||
notification_xsoverlay_for_vrct(content=f"{message}")
|
xsoverlayForVRCT(content=f"{message}")
|
||||||
|
|
||||||
model = Model()
|
model = Model()
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ class BaseRecorder:
|
|||||||
|
|
||||||
self.source = source
|
self.source = source
|
||||||
|
|
||||||
def adjust_for_noise(self):
|
def adjustForNoise(self):
|
||||||
with self.source:
|
with self.source:
|
||||||
self.recorder.adjust_for_ambient_noise(self.source)
|
self.recorder.adjust_for_ambient_noise(self.source)
|
||||||
|
|
||||||
def record_into_queue(self, audio_queue):
|
def recordIntoQueue(self, audio_queue):
|
||||||
def record_callback(_, audio):
|
def record_callback(_, audio):
|
||||||
audio_queue.put((audio.get_raw_data(), datetime.now()))
|
audio_queue.put((audio.get_raw_data(), datetime.now()))
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ class SelectedMicRecorder(BaseRecorder):
|
|||||||
sample_rate=int(device["defaultSampleRate"]),
|
sample_rate=int(device["defaultSampleRate"]),
|
||||||
)
|
)
|
||||||
super().__init__(source=source, energy_threshold=energy_threshold, dynamic_energy_threshold=dynamic_energy_threshold, record_timeout=record_timeout)
|
super().__init__(source=source, energy_threshold=energy_threshold, dynamic_energy_threshold=dynamic_energy_threshold, record_timeout=record_timeout)
|
||||||
# self.adjust_for_noise()
|
# self.adjustForNoise()
|
||||||
|
|
||||||
class SelectedSpeakerRecorder(BaseRecorder):
|
class SelectedSpeakerRecorder(BaseRecorder):
|
||||||
def __init__(self, device, energy_threshold, dynamic_energy_threshold, record_timeout):
|
def __init__(self, device, energy_threshold, dynamic_energy_threshold, record_timeout):
|
||||||
@@ -44,7 +44,7 @@ class SelectedSpeakerRecorder(BaseRecorder):
|
|||||||
channels=device["maxInputChannels"]
|
channels=device["maxInputChannels"]
|
||||||
)
|
)
|
||||||
super().__init__(source=source, energy_threshold=energy_threshold, dynamic_energy_threshold=dynamic_energy_threshold, record_timeout=record_timeout)
|
super().__init__(source=source, energy_threshold=energy_threshold, dynamic_energy_threshold=dynamic_energy_threshold, record_timeout=record_timeout)
|
||||||
# self.adjust_for_noise()
|
# self.adjustForNoise()
|
||||||
|
|
||||||
class BaseEnergyRecorder:
|
class BaseEnergyRecorder:
|
||||||
def __init__(self, source):
|
def __init__(self, source):
|
||||||
@@ -59,15 +59,15 @@ class BaseEnergyRecorder:
|
|||||||
|
|
||||||
self.source = source
|
self.source = source
|
||||||
|
|
||||||
def adjust_for_noise(self):
|
def adjustForNoise(self):
|
||||||
with self.source:
|
with self.source:
|
||||||
self.recorder.adjust_for_ambient_noise(self.source)
|
self.recorder.adjust_for_ambient_noise(self.source)
|
||||||
|
|
||||||
def record_into_queue(self, energy_queue):
|
def recordIntoQueue(self, energy_queue):
|
||||||
def record_callback(_, energy):
|
def recordCallback(_, energy):
|
||||||
energy_queue.put(energy)
|
energy_queue.put(energy)
|
||||||
|
|
||||||
self.stop = self.recorder.listen_energy_in_background(self.source, record_callback)
|
self.stop = self.recorder.listen_energy_in_background(self.source, recordCallback)
|
||||||
|
|
||||||
class SelectedMicEnergyRecorder(BaseEnergyRecorder):
|
class SelectedMicEnergyRecorder(BaseEnergyRecorder):
|
||||||
def __init__(self, device):
|
def __init__(self, device):
|
||||||
@@ -76,7 +76,7 @@ class SelectedMicEnergyRecorder(BaseEnergyRecorder):
|
|||||||
sample_rate=int(device["defaultSampleRate"]),
|
sample_rate=int(device["defaultSampleRate"]),
|
||||||
)
|
)
|
||||||
super().__init__(source=source)
|
super().__init__(source=source)
|
||||||
# self.adjust_for_noise()
|
# self.adjustForNoise()
|
||||||
|
|
||||||
class SelectedSpeakeEnergyRecorder(BaseEnergyRecorder):
|
class SelectedSpeakeEnergyRecorder(BaseEnergyRecorder):
|
||||||
def __init__(self, device):
|
def __init__(self, device):
|
||||||
@@ -88,4 +88,4 @@ class SelectedSpeakeEnergyRecorder(BaseEnergyRecorder):
|
|||||||
channels=device["maxInputChannels"]
|
channels=device["maxInputChannels"]
|
||||||
)
|
)
|
||||||
super().__init__(source=source)
|
super().__init__(source=source)
|
||||||
# self.adjust_for_noise()
|
# self.adjustForNoise()
|
||||||
@@ -24,13 +24,13 @@ class AudioTranscriber:
|
|||||||
"last_sample": bytes(),
|
"last_sample": bytes(),
|
||||||
"last_spoken": None,
|
"last_spoken": None,
|
||||||
"new_phrase": True,
|
"new_phrase": True,
|
||||||
"process_data_func": self.process_speaker_data if speaker else self.process_speaker_data
|
"process_data_func": self.processSpeakerData if speaker else self.processSpeakerData
|
||||||
}
|
}
|
||||||
|
|
||||||
def transcribe_audio_queue(self, audio_queue, language):
|
def transcribeAudioQueue(self, audio_queue, language):
|
||||||
# while True:
|
# while True:
|
||||||
audio, time_spoken = audio_queue.get()
|
audio, time_spoken = audio_queue.get()
|
||||||
self.update_last_sample_and_phrase_status(audio, time_spoken)
|
self.updateLastSampleAndPhraseStatus(audio, time_spoken)
|
||||||
|
|
||||||
text = ''
|
text = ''
|
||||||
try:
|
try:
|
||||||
@@ -45,9 +45,9 @@ class AudioTranscriber:
|
|||||||
# os.unlink(path)
|
# os.unlink(path)
|
||||||
|
|
||||||
if text != '':
|
if text != '':
|
||||||
self.update_transcript(text)
|
self.updateTranscript(text)
|
||||||
|
|
||||||
def update_last_sample_and_phrase_status(self, data, time_spoken):
|
def updateLastSampleAndPhraseStatus(self, data, time_spoken):
|
||||||
source_info = self.audio_sources
|
source_info = self.audio_sources
|
||||||
if source_info["last_spoken"] and time_spoken - source_info["last_spoken"] > timedelta(seconds=self.phrase_timeout):
|
if source_info["last_spoken"] and time_spoken - source_info["last_spoken"] > timedelta(seconds=self.phrase_timeout):
|
||||||
source_info["last_sample"] = bytes()
|
source_info["last_sample"] = bytes()
|
||||||
@@ -58,11 +58,11 @@ class AudioTranscriber:
|
|||||||
source_info["last_sample"] += data
|
source_info["last_sample"] += data
|
||||||
source_info["last_spoken"] = time_spoken
|
source_info["last_spoken"] = time_spoken
|
||||||
|
|
||||||
def process_mic_data(self):
|
def processMicData(self):
|
||||||
audio_data = AudioData(self.audio_sources["last_sample"], self.audio_sources["sample_rate"], self.audio_sources["sample_width"])
|
audio_data = AudioData(self.audio_sources["last_sample"], self.audio_sources["sample_rate"], self.audio_sources["sample_width"])
|
||||||
return audio_data
|
return audio_data
|
||||||
|
|
||||||
def process_speaker_data(self):
|
def processSpeakerData(self):
|
||||||
temp_file = BytesIO()
|
temp_file = BytesIO()
|
||||||
with wave.open(temp_file, 'wb') as wf:
|
with wave.open(temp_file, 'wb') as wf:
|
||||||
wf.setnchannels(self.audio_sources["channels"])
|
wf.setnchannels(self.audio_sources["channels"])
|
||||||
@@ -74,7 +74,7 @@ class AudioTranscriber:
|
|||||||
audio = self.audio_recognizer.record(source)
|
audio = self.audio_recognizer.record(source)
|
||||||
return audio
|
return audio
|
||||||
|
|
||||||
def update_transcript(self, text):
|
def updateTranscript(self, text):
|
||||||
source_info = self.audio_sources
|
source_info = self.audio_sources
|
||||||
transcript = self.transcript_data
|
transcript = self.transcript_data
|
||||||
|
|
||||||
@@ -85,14 +85,14 @@ class AudioTranscriber:
|
|||||||
else:
|
else:
|
||||||
transcript[0] = text
|
transcript[0] = text
|
||||||
|
|
||||||
def get_transcript(self):
|
def getTranscript(self):
|
||||||
if len(self.transcript_data) > 0:
|
if len(self.transcript_data) > 0:
|
||||||
text = self.transcript_data.pop(-1)
|
text = self.transcript_data.pop(-1)
|
||||||
else:
|
else:
|
||||||
text = ""
|
text = ""
|
||||||
return text
|
return text
|
||||||
|
|
||||||
def clear_transcript_data(self):
|
def clearTranscriptData(self):
|
||||||
self.transcript_data.clear()
|
self.transcript_data.clear()
|
||||||
self.audio_sources["last_sample"] = bytes()
|
self.audio_sources["last_sample"] = bytes()
|
||||||
self.audio_sources["new_phrase"] = True
|
self.audio_sources["new_phrase"] = True
|
||||||
@@ -19,7 +19,7 @@ import socket
|
|||||||
import json
|
import json
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
def notification_xsoverlay(
|
def XSOverlay(
|
||||||
endpoint:tuple=("127.0.0.1", 42069), messageType:int=1, index:int=0, timeout:float=2,
|
endpoint:tuple=("127.0.0.1", 42069), messageType:int=1, index:int=0, timeout:float=2,
|
||||||
height:float=120.0, opacity:float=1.0, volume:float=0.0, audioPath:str="",
|
height:float=120.0, opacity:float=1.0, volume:float=0.0, audioPath:str="",
|
||||||
title:str="", content:str="", useBase64Icon:bool=False, icon:str="default", sourceApp:str=""
|
title:str="", content:str="", useBase64Icon:bool=False, icon:str="default", sourceApp:str=""
|
||||||
@@ -58,8 +58,8 @@ def notification_xsoverlay(
|
|||||||
sock.close()
|
sock.close()
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def notification_xsoverlay_for_vrct(content:str="") -> int:
|
def xsoverlayForVRCT(content:str="") -> int:
|
||||||
response = notification_xsoverlay(
|
response = XSOverlay(
|
||||||
title="VRCT",
|
title="VRCT",
|
||||||
content=content,
|
content=content,
|
||||||
useBase64Icon=True,
|
useBase64Icon=True,
|
||||||
@@ -69,4 +69,4 @@ def notification_xsoverlay_for_vrct(content:str="") -> int:
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
notification_xsoverlay_for_vrct(content="notification test")
|
xsoverlayForVRCT(content="notification test")
|
||||||
Reference in New Issue
Block a user