Synthèse ponctuelle d'un texte complet ?
Pour un usage simple du type « texte en entrée, fichier en sortie »,
utilisez l’endpoint REST POST : un seul appel HTTP, sans WebSocket à gérer.
Démarrage rapide
Ouvrez un flux TTS en temps réel, envoyez du texte et lisez les fragments audio dès que le modèle les produit.Choisir l’API du SDK
Le SDK Python propose trois formes d’API TTS. Toutes les API WebSocket communiquent avecwss://api.gradium.ai/api/speech/tts.
Utilisez
tts_realtime pour les agents vocaux, le streaming de tokens
LLM, les passerelles navigateur ou téléphonie, et tout flux de travail
où les boucles d’envoi et de réception s’exécutent simultanément.
Utilisez tts_stream lorsque votre entrée prend la forme d’un itérable
et que vous n’avez qu’à consommer des octets. Utilisez tts pour les
scripts et les tests où attendre le résultat complet ne pose pas de
problème.
Appel bufferisé simplifié
client.tts(...) utilise toujours le protocole de streaming en interne ;
il met en tampon les fragments audio et renvoie un unique TTSResult.
Choix du modèle
Définissezmodel_name au premier niveau du setup TTS, à côté de
voice_id, en dehors de json_config.
Le nouveau modèle TTS est sélectionné par "default". Vous pouvez omettre
model_name pour l’utiliser. "gradium-tts-beta" redirige également vers
ce modèle jusqu’à la sortie de la prochaine bêta TTS. Conservez cet alias
pour suivre les futurs modèles bêta, ou passez à "default" pour rester
sur les versions stables.
Avec le SDK Python, passez model_name à tts_realtime, ou dans setup
pour tts et tts_stream. Avec une connexion WebSocket directe,
incluez-le dans le premier message setup. Avec
REST POST, incluez-le au premier niveau
du corps JSON de la requête.
Paramètres de setup
model_name: le modèle TTS à utiliser (par défaut :"default"). Voir Choix du modèle.voice_id: l’identifiant de la voix à utiliser. Vous le trouverez dans la section bibliothèque de voix de cette documentation ou dans le Studio.output_format: format audio des données de sortie (formats pris en charge :"pcm","wav","opus", …)json_config: réglages avancés de la voix, comme la température, la vitesse et les règles de réécriture. Voir Réglages de la voix.pronunciation_id: dictionnaire de prononciation facultatif à appliquer à cette requête.client_req_idetclose_ws_on_eos: utilisés pour les connexions WebSocket réutilisables et multiplexées. Voir Multiplexage.
"pcm", l’audio respecte les spécifications
suivantes :
- Fréquence d’échantillonnage : 48000 Hz (48kHz)
- Format : PCM (Pulse Code Modulation)
- Profondeur de bits : entier signé 16 bits
- Canaux : canal unique (mono)
- Taille des fragments : 3840 échantillons par fragment (80ms à 48kHz)
"wav", les fragments audio sont au format WAV,
à 48kHz, en entier signé 16 bits, mono.
Avec le format de sortie "opus", les fragments audio utilisent le codec
Opus encapsulé dans un conteneur Ogg.
Les autres formats de sortie disponibles sont "ulaw_8000", "alaw_8000",
"pcm_8000", "pcm_16000" et "pcm_24000".
Synthèse vocale en streaming
Utiliseztts_stream lorsque vous disposez d’une chaîne, d’une liste ou
d’un générateur asynchrone et que vous voulez un itérateur asynchrone
d’octets audio.
Utiliser des voix personnalisées
Formats de sortie
Flush et pauses
Le modèle ne génère de l’audio que lorsqu’il dispose de suffisamment de contexte : l’audio a donc généralement quelques mots de retard sur le texte reçu. La balise<flush> permet de forcer le modèle à produire
l’audio de tout le texte reçu jusqu’ici.
Texte horodaté
Le modèle renvoie des horodatages pour chaque segment de texte émis (généralement alignés sur les limites de mots).text, start_s et stop_s : les instants de
début et de fin, en secondes, dans l’audio généré. Au cours d’une session
de streaming, les mêmes informations sont transmises sous forme de
messages text (voir la
référence TTS WebSocket).
Les horodatages sont émis à la granularité du segment (généralement
alignés sur les limites de mots). Pour obtenir des positions plus fines,
au niveau du caractère, déduisez-les du texte du segment.
Entrée par générateur asynchrone
Utilisez un générateur asynchrone lorsque le texte est produit au fur et à mesure, par exemple par un LLM ou un autre service de streaming.Découpez les fragments de texte sur les espaces, jamais au milieu d’un
mot ni juste avant un signe de ponctuation. Lorsque le texte est envoyé
progressivement (par des appels successifs à
send_text sur le flux
temps réel Python, par un générateur asynchrone comme ci-dessus, ou par
plusieurs messages {"type": "text"} via l’API WebSocket), le serveur
insère une espace entre les contenus de deux messages consécutifs.Ainsi, envoyer "foo" puis "bar" revient à envoyer "foo bar" (une
espace est ajoutée entre les deux), et non "foobar". Couper un mot
sur deux messages modifie sa prononciation.Pour la même raison, n’isolez pas la ponctuation dans un message
distinct : envoyer "foo" puis "." produit "foo ." et non "foo.".
Laissez la ponctuation finale attachée au mot qui la précède (par exemple,
envoyez "foo." en un seul message, ou "foo. " suivi du fragment
suivant).Dictionnaires de prononciation
Les dictionnaires de prononciation vous permettent de personnaliser la prononciation de certains mots ou expressions dans la sortie TTS. Ils sont particulièrement utiles pour :- les noms de marque, termes techniques ou noms propres ;
- les acronymes qui doivent être prononcés d’une façon précise ;
- les mots dont la prononciation est inhabituelle dans votre cas d’usage.
pronunciation_id dans le message de setup, comme pour le voice_id :
WebSocket direct
Si vous ne souhaitez pas utiliser le SDK gradium, par exemple parce que vous appelez l’API depuis un autre environnement que Python ou que vous voulez un contrôle total sur les échanges, vous pouvez utiliser directement le protocole WebSocket. Les messages ont exactement la même forme que ceux envoyés par le SDK. Pour tester de façon interactive depuis un terminal,wscat est le moyen le plus rapide
de vérifier la connectivité et d’envoyer les messages un par un à la
main :
websockets en
Python) :
Étapes suivantes
Référence TTS WebSocket
Schéma complet du protocole : chaque type de message, chaque champ,
chaque code d’erreur.
REST en un appel
Synthétisez un bloc de texte complet en une seule requête HTTP.
Multiplexage
Exécutez plusieurs requêtes de synthèse simultanées sur une seule
session WebSocket.
Réglages de la voix
Vitesse, température et règles de réécriture.