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