Ali Abid
first commit
0534c31
raw
history blame contribute delete
No virus
1.11 kB
""" 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()