|
""" 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 |
|
) |
|
|
|
|
|
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() |
|
|