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