tts.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from pathlib import Path
  2. from typing import Optional
  3. import tempfile
  4. from TTS.api import TTS
  5. _TTS_CACHE = {}
  6. def _get_tts_model(lang_code: str) -> TTS:
  7. """
  8. Retourne un modèle TTS en fonction de la langue.
  9. - Français: modèle VITS fr
  10. - Sinon: modèle multilingue générique
  11. """
  12. if lang_code not in _TTS_CACHE:
  13. if lang_code.startswith("fr"):
  14. model_name = "tts_models/fr/css10/vits"
  15. else:
  16. # Multilingue par défaut
  17. model_name = "tts_models/multilingual/multi-dataset/your_tts"
  18. _TTS_CACHE[lang_code] = TTS(model_name=model_name)
  19. return _TTS_CACHE[lang_code]
  20. def synthesize(text: str, lang_code: str, out_dir: Path) -> Path:
  21. out_dir.mkdir(parents=True, exist_ok=True)
  22. tmp = Path(tempfile.mkstemp(suffix=".wav")[1])
  23. tts = _get_tts_model(lang_code)
  24. tts.tts_to_file(text=text, file_path=str(tmp))
  25. # Renomme vers un nom stable
  26. target = out_dir / f"output_{tmp.name.split('.')[-2]}.wav"
  27. tmp.rename(target)
  28. return target