"""
Contrat d'interface abstraite pour les moteurs de synthese vocale (TTS).
"""
from abc import ABC, abstractmethod
import numpy as np
[docs]
class BaseTts(ABC):
"""
Interface abstraite pour tous les moteurs TTS (Text-to-Speech).
Permet d'interchanger un modele on-premise (Kokoro ONNX) et un service cloud (Edge-TTS).
"""
[docs]
@abstractmethod
async def synthesizeAsync(self, text: str) -> tuple[np.ndarray | None, int | None]:
"""
Synthese asynchrone non-bloquante.
Parameters
----------
text : str
Texte a synthetiser vocalement.
Returns
-------
tuple[np.ndarray | None, int | None]
Tuple contenant le tableau audio (float32) et le taux d'echantillonnage en Hz,
ou (None, None) en cas d'erreur.
"""
[docs]
@abstractmethod
def synthesize(self, text: str) -> tuple[np.ndarray | None, int | None]:
"""
Wrapper synchrone pour la synthese vocale.
Parameters
----------
text : str
Texte a synthetiser vocalement.
Returns
-------
tuple[np.ndarray | None, int | None]
Tuple contenant le tableau audio (float32) et le taux d'echantillonnage en Hz,
ou (None, None) en cas d'erreur.
"""
[docs]
def warmUp(self) -> None:
"""Prechauffe le modele TTS si applicable."""
return None
[docs]
def unload(self) -> None:
"""
Libere le modele en memoire.
Par defaut sans effet : un moteur qui ne detient aucun poids local
(synthese cloud) n'a rien a liberer.
"""
return None
@property
def isLoaded(self) -> bool:
"""
Indique si des poids resident actuellement en memoire.
Vrai par defaut : un moteur sans etat local (synthese cloud) n'a rien
a charger.
"""
return True