| 1234567891011121314151617181920212223242526272829303132333435 |
- from pathlib import Path
- from typing import Optional
- import tempfile
- from TTS.api import TTS
- _TTS_CACHE = {}
- def _get_tts_model(lang_code: str) -> TTS:
- """
- Retourne un modèle TTS en fonction de la langue.
- - Français: modèle VITS fr
- - Sinon: modèle multilingue générique
- """
- if lang_code not in _TTS_CACHE:
- if lang_code.startswith("fr"):
- model_name = "tts_models/fr/css10/vits"
- else:
- # Multilingue par défaut
- model_name = "tts_models/multilingual/multi-dataset/your_tts"
- _TTS_CACHE[lang_code] = TTS(model_name=model_name)
- return _TTS_CACHE[lang_code]
- def synthesize(text: str, lang_code: str, out_dir: Path) -> Path:
- out_dir.mkdir(parents=True, exist_ok=True)
- tmp = Path(tempfile.mkstemp(suffix=".wav")[1])
- tts = _get_tts_model(lang_code)
- tts.tts_to_file(text=text, file_path=str(tmp))
- # Renomme vers un nom stable
- target = out_dir / f"output_{tmp.name.split('.')[-2]}.wav"
- tmp.rename(target)
- return target
|