Aller au contenu principal

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.

wss://
Protocole securise
50
Sessions par equipe
600 s
TTL par session
Texte illimite

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

ParametreRequisDefautDescription
languageOuiCode BCP-47 ou auto
voiceNoneveIdentifiant de la voix
codecNonmp3Format audio de sortie
sample_rateNon24000Frequence d’echantillonnage
bit_rateNon128000Debit 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 :

  1. Detecter la fermeture de connexion
  2. Se reconnecter automatiquement si necessaire
  3. 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

AspectHTTP unaireWebSocket
LatenceAudio complet apres traitementPremiers octets immediats
Texte max15 000 chars par requeteIllimite (deltas de 15 000 max)
Timeout15 minutesTTL 600 secondes
SessionsN/A50 par equipe
Cas d’usageBatch, fichiers audioTemps 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