Source code for manim_voiceover.services.pyttsx3
from pathlib import Path
from manim import logger
from manim_voiceover.helper import prompt_ask_missing_extras
try:
from pyttsx3 import Engine
except ImportError:
logger.error(
'Missing packages. Run `pip install "manim-voiceover[pyttsx3]"` to use PyTTSX3Service.'
)
from manim_voiceover.services.base import SpeechService
[docs]class PyTTSX3Service(SpeechService):
"""Speech service class for pyttsx3."""
def __init__(self, engine=None, **kwargs):
""""""
prompt_ask_missing_extras("pyttsx3", "pyttsx3", "PyTTSX3Service")
if engine is None:
engine = Engine()
self.engine = engine
SpeechService.__init__(self, **kwargs)
def generate_from_text(
self, text: str, cache_dir: str = None, path: str = None
) -> dict:
""""""
if cache_dir is None:
cache_dir = self.cache_dir
input_data = {"input_text": text, "service": "pyttsx3"}
cached_result = self.get_cached_result(input_data, cache_dir)
if cached_result is not None:
return cached_result
if path is None:
audio_path = self.get_audio_basename(input_data) + ".mp3"
else:
audio_path = path
self.engine.save_to_file(text, str(Path(cache_dir) / audio_path))
self.engine.runAndWait()
self.engine.stop()
json_dict = {
"input_text": text,
"input_data": input_data,
"original_audio": audio_path,
}
return json_dict