""" Text to speech module """ import threading from threading import Semaphore from autogpt.config import Config from autogpt.speech.brian import BrianSpeech from autogpt.speech.eleven_labs import ElevenLabsSpeech from autogpt.speech.gtts import GTTSVoice from autogpt.speech.macos_tts import MacOSTTS CFG = Config() DEFAULT_VOICE_ENGINE = GTTSVoice() VOICE_ENGINE = None if CFG.elevenlabs_api_key: VOICE_ENGINE = ElevenLabsSpeech() elif CFG.use_mac_os_tts == "True": VOICE_ENGINE = MacOSTTS() elif CFG.use_brian_tts == "True": VOICE_ENGINE = BrianSpeech() else: VOICE_ENGINE = GTTSVoice() QUEUE_SEMAPHORE = Semaphore( 1 ) # The amount of sounds to queue before blocking the main thread def say_text(text: str, voice_index: int = 0) -> None: """Speak the given text using the given voice index""" def speak() -> None: success = VOICE_ENGINE.say(text, voice_index) if not success: DEFAULT_VOICE_ENGINE.say(text) QUEUE_SEMAPHORE.release() QUEUE_SEMAPHORE.acquire(True) thread = threading.Thread(target=speak) thread.start()