teachingAssistant / utils /tts_factory.py
Michael Hu
refactor tts
60bd17d
raw
history blame
2.07 kB
import logging
from typing import Optional, List
# Configure logging
logger = logging.getLogger(__name__)
# Import the base class
from utils.tts_base import TTSEngineBase, DummyTTSEngine
class TTSFactory:
"""Factory class for creating TTS engines
This class is responsible for creating the appropriate TTS engine based on
availability and configuration.
"""
@staticmethod
def create_engine(engine_type: Optional[str] = None, lang_code: str = 'z') -> TTSEngineBase:
"""Create a TTS engine instance
Args:
engine_type (str, optional): Type of engine to create ('kokoro', 'kokoro_space', 'dia', 'dummy')
If None, the best available engine will be used
lang_code (str): Language code for the engine
Returns:
TTSEngineBase: An instance of a TTS engine
"""
from utils.tts_engines import get_available_engines, create_engine
# Get available engines
available_engines = get_available_engines()
logger.info(f"Available TTS engines: {available_engines}")
# If engine_type is specified, try to create that specific engine
if engine_type is not None:
if engine_type in available_engines:
logger.info(f"Creating requested engine: {engine_type}")
return create_engine(engine_type, lang_code)
else:
logger.warning(f"Requested engine '{engine_type}' is not available")
# Try to create the best available engine
# Priority: kokoro > kokoro_space > dia > dummy
for engine in ['kokoro', 'kokoro_space', 'dia']:
if engine in available_engines:
logger.info(f"Creating best available engine: {engine}")
return create_engine(engine, lang_code)
# Fall back to dummy engine
logger.warning("No TTS engines available, falling back to dummy engine")
return DummyTTSEngine(lang_code)