Source code for spokestack.tts.manager

"""
This module contains the Spokestack text to speech manager which handles a
text to speech client, decodes the returned audio, and writes the audio to
the specified output.
"""
from typing import Any

from streamp3 import MP3Decoder


[docs]class TextToSpeechManager: """Manages tts client and io target. Args: client: Text to speech client that returns encoded mp3 audio output: Audio io target """ def __init__(self, client: Any, output: Any) -> None: self._client = client self._output = output
[docs] def synthesize(self, utterance: str, mode: str, voice: str) -> None: """Synthesizes the given utterance with the voice and format provided. Args: utterance (str): string that needs to be rendered as speech. mode (str): synthesis mode to use with utterance. text, ssml, markdown, etc. voice (str): name of the tts voice. """ stream = self._client.synthesize(utterance, mode, voice) stream = SequenceIO(stream) for frame in MP3Decoder(stream): self._output.write(frame)
[docs] def close(self) -> None: """ Closes the client and output. """ self._client = None self._output = None
[docs]class SequenceIO: """ Wrapper that allows for incrementally received audio to be decoded. """ def __init__(self, sequence: Any) -> None: self._sequence = iter(sequence) def read(self, size: Any = None) -> bytes: try: return next(self._sequence) except StopIteration: return b""