|
"""Base class for all voice classes.""" |
|
import abc |
|
from threading import Lock |
|
|
|
from autogpt.config import AbstractSingleton |
|
|
|
|
|
class VoiceBase(AbstractSingleton): |
|
""" |
|
Base class for all voice classes. |
|
""" |
|
|
|
def __init__(self): |
|
""" |
|
Initialize the voice class. |
|
""" |
|
self._url = None |
|
self._headers = None |
|
self._api_key = None |
|
self._voices = [] |
|
self._mutex = Lock() |
|
self._setup() |
|
|
|
def say(self, text: str, voice_index: int = 0) -> bool: |
|
""" |
|
Say the given text. |
|
|
|
Args: |
|
text (str): The text to say. |
|
voice_index (int): The index of the voice to use. |
|
""" |
|
with self._mutex: |
|
return self._speech(text, voice_index) |
|
|
|
@abc.abstractmethod |
|
def _setup(self) -> None: |
|
""" |
|
Setup the voices, API key, etc. |
|
""" |
|
pass |
|
|
|
@abc.abstractmethod |
|
def _speech(self, text: str, voice_index: int = 0) -> bool: |
|
""" |
|
Play the given text. |
|
|
|
Args: |
|
text (str): The text to play. |
|
""" |
|
pass |
|
|