Connexion WebSocket TTS
Synthese vocale en temps reel avec WebSocket
L’API TTS de Grok propose un mode WebSocket pour la synthese vocale en streaming. Contrairement au mode HTTP unaire qui attend la fin du traitement pour retourner l’audio complet, le WebSocket envoie les morceaux audio au fur et a mesure de leur generation. C’est ideal pour les applications interactives ou la latence percue doit etre minimale.
Endpoint WebSocket
La connexion se fait sur wss://api.x.ai/v1/tts. Les parametres de configuration sont passes en query string lors de la connexion initiale.
Parametres de connexion
| Parametre | Requis | Defaut | Description |
|---|---|---|---|
language | Oui | — | Code BCP-47 ou auto |
voice | Non | eve | Identifiant de la voix |
codec | Non | mp3 | Format audio de sortie |
sample_rate | Non | 24000 | Frequence d’echantillonnage |
bit_rate | Non | 128000 | Debit binaire (MP3 uniquement) |
URL de connexion complete
wss://api.x.ai/v1/tts?language=fr&voice=rex&codec=mp3&sample_rate=24000
Etablir la connexion
En JavaScript (navigateur ou Node.js)
const ws = new WebSocket(
"wss://api.x.ai/v1/tts?language=fr&voice=rex&codec=mp3",
{
headers: {
"Authorization": `Bearer ${API_KEY}`
}
}
);
ws.onopen = () => {
console.log("Connexion TTS etablie");
};
ws.onerror = (error) => {
console.error("Erreur WebSocket:", error);
};
Note importante : dans un navigateur, l’API WebSocket native ne supporte pas les en-tetes personnalises. Vous devrez passer par votre backend pour la connexion (voir la lecon sur la production).
En Python avec websockets
import asyncio
import websockets
import json
async def connect_tts():
uri = "wss://api.x.ai/v1/tts?language=fr&voice=rex&codec=mp3"
headers = {"Authorization": f"Bearer {api_key}"}
async with websockets.connect(uri, extra_headers=headers) as ws:
print("Connexion TTS etablie")
# Envoyer du texte et recevoir de l'audio...
Gestion de la session
Duree de vie (TTL)
Chaque session WebSocket a une duree de vie de 600 secondes (10 minutes). Passe ce delai, le serveur ferme la connexion. Votre application doit :
- Detecter la fermeture de connexion
- Se reconnecter automatiquement si necessaire
- Reprendre l’envoi de texte la ou il s’etait arrete
Sessions concurrentes
Votre equipe (compte API) est limitee a 50 sessions WebSocket simultanees. Au-dela, les nouvelles connexions sont refusees. Gerez un pool de connexions pour les applications a fort trafic.
Pas de timeout d’inactivite
Contrairement au mode HTTP unaire (timeout de 15 minutes), le WebSocket n’a pas de timeout d’inactivite. La session reste ouverte pendant ses 600 secondes de TTL meme si vous n’envoyez rien.
Differences entre HTTP unaire et WebSocket
| Aspect | HTTP unaire | WebSocket |
|---|---|---|
| Latence | Audio complet apres traitement | Premiers octets immediats |
| Texte max | 15 000 chars par requete | Illimite (deltas de 15 000 max) |
| Timeout | 15 minutes | TTL 600 secondes |
| Sessions | N/A | 50 par equipe |
| Cas d’usage | Batch, fichiers audio | Temps reel, streaming |
Quand utiliser le WebSocket
Le WebSocket est le bon choix quand :
- L’utilisateur attend une reponse vocale immediate : chatbots, assistants vocaux
- Le texte est genere progressivement : sortie d’un LLM streamee vers le TTS
- Le texte est tres long : pas de limite globale, seuls les deltas individuels sont limites a 15 000 caracteres
- Vous voulez commencer la lecture avant la fin de la generation : experience utilisateur fluide
Le mode HTTP unaire reste preferable pour :
- La generation de fichiers audio en batch
- Les cas ou vous avez besoin du fichier complet avant de le traiter
- Les architectures simples sans gestion d’etat
Points cles a retenir
- Le WebSocket TTS est accessible sur
wss://api.x.ai/v1/tts - Les parametres sont passes en query string a la connexion
- Chaque session dure 600 secondes maximum
- La limite est de 50 sessions concurrentes par equipe
- Le texte est illimite (envoye par deltas de 15 000 caracteres max)
- Utilisez le WebSocket pour le temps reel, le HTTP pour le batch