"""TTS-модуль: текст → звук. Использование из других модулей: from modules.tts import get_provider tts = get_provider("edge") # онлайн, голос MS tts = get_provider("piper", model_path="...") # офлайн-фолбэк result = tts.synthesize("Привет! Как дела?") # result.audio (float32), result.samplerate, result.generation_sec """ from __future__ import annotations from .base import SynthResult, TtsProvider from .config import make_tts from .provider_edge import EdgeTtsProvider from .provider_piper import PiperTtsProvider from .text_split import split_sentences __all__ = [ "SynthResult", "TtsProvider", "EdgeTtsProvider", "PiperTtsProvider", "make_tts", "split_sentences", "get_provider", ] _PROVIDERS = { EdgeTtsProvider.name: EdgeTtsProvider, PiperTtsProvider.name: PiperTtsProvider, } def get_provider(name: str, **kwargs) -> TtsProvider: """Фабрика провайдеров по имени (выбор из конфига).""" try: provider_cls = _PROVIDERS[name] except KeyError: raise ValueError( f"Неизвестный TTS-провайдер: {name!r}. Доступны: {sorted(_PROVIDERS)}" ) from None return provider_cls(**kwargs)