mirror of
https://github.com/kimjammer/Neuro
synced 2025-05-16 07:30:25 -04:00
78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
import logging
|
|
import time
|
|
from RealtimeSTT import AudioToTextRecorder
|
|
from constants import *
|
|
|
|
|
|
class STT:
|
|
def __init__(self, signals):
|
|
self.recorder = None
|
|
self.signals = signals
|
|
self.API = self.API(self)
|
|
self.enabled = True
|
|
|
|
def process_text(self, text):
|
|
if not self.enabled:
|
|
return
|
|
|
|
print("STT OUTPUT: " + text)
|
|
self.signals.history.append({"role": "user", "content": text})
|
|
|
|
self.signals.last_message_time = time.time()
|
|
if not self.signals.AI_speaking:
|
|
self.signals.new_message = True
|
|
|
|
def recording_start(self):
|
|
self.signals.human_speaking = True
|
|
|
|
def recording_stop(self):
|
|
self.signals.human_speaking = False
|
|
|
|
def feed_audio(self, data):
|
|
self.recorder.feed_audio(data)
|
|
|
|
def listen_loop(self):
|
|
print("STT Starting")
|
|
recorder_config = {
|
|
'spinner': False,
|
|
'language': 'en',
|
|
'use_microphone': True,
|
|
'input_device_index': INPUT_DEVICE_INDEX,
|
|
'silero_sensitivity': 0.6,
|
|
'silero_use_onnx': True,
|
|
'post_speech_silence_duration': 0.4,
|
|
'min_length_of_recording': 0,
|
|
'min_gap_between_recordings': 0.2,
|
|
'enable_realtime_transcription': True,
|
|
'realtime_processing_pause': 0.2,
|
|
'realtime_model_type': 'tiny.en',
|
|
'compute_type': 'auto',
|
|
'on_recording_start': self.recording_start,
|
|
'on_recording_stop': self.recording_stop,
|
|
'level': logging.ERROR
|
|
}
|
|
|
|
with AudioToTextRecorder(**recorder_config) as recorder:
|
|
self.recorder = recorder
|
|
print("STT Ready")
|
|
self.signals.stt_ready = True
|
|
while not self.signals.terminate:
|
|
if not self.enabled:
|
|
time.sleep(0.2)
|
|
continue
|
|
recorder.text(self.process_text)
|
|
|
|
class API:
|
|
def __init__(self, outer):
|
|
self.outer = outer
|
|
|
|
def set_STT_status(self, status):
|
|
self.outer.enabled = status
|
|
self.outer.signals.sio_queue.put(('STT_status', status))
|
|
|
|
def get_STT_status(self):
|
|
return self.outer.enabled
|
|
|
|
def shutdown(self):
|
|
self.outer.recorder.stop()
|
|
self.outer.recorder.interrupt_stop_event.set()
|