import time from RealtimeTTS import TextToAudioStream, CoquiEngine from constants import * class TTS: def __init__(self, signals): self.stream = None self.signals = signals self.API = self.API(self) self.enabled = True engine = CoquiEngine( use_deepspeed=True, voice="./voices/" + VOICE_REFERENCE, speed=1.1, ) tts_config = { 'on_audio_stream_start': self.audio_started, 'on_audio_stream_stop': self.audio_ended, 'output_device_index': OUTPUT_DEVICE_INDEX, } self.stream = TextToAudioStream(engine, **tts_config) self.signals.tts_ready = True def play(self, message): if not self.enabled: return # If the message is only whitespace, don't attempt to play it if not message.strip(): return self.signals.sio_queue.put(("current_message", message)) self.stream.feed(message) self.stream.play_async() def stop(self): self.stream.stop() self.signals.AI_speaking = False def audio_started(self): self.signals.AI_speaking = True def audio_ended(self): self.signals.last_message_time = time.time() self.signals.AI_speaking = False class API: def __init__(self, outer): self.outer = outer def set_TTS_status(self, status): self.outer.enabled = status if not status: self.outer.stop() self.outer.signals.sio_queue.put(('TTS_status', status)) def get_TTS_status(self): return self.outer.enabled def abort_current(self): self.outer.stop()