44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
"""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) |