Code source de mirza.engine.interfaces.baseTts

"""
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