Synthèse vocale en temps réel v3
Diffusez la parole avec le protocole WebSocket Realtime TTS v3 indépendant du fournisseur.
Realtime TTS v3 est recommandé pour les nouvelles intégrations. Tous les moteurs partagent les événements camelCase, l’authentification, la facturation et la récupération ; changer de moteur consiste uniquement à modifier modelId.
| Élément | Valeur |
|---|---|
| WebSocket | wss://realtime.fishaudio.org/v3/tts/live |
| Sous-protocole | realtime.tts.msgpack.v3 |
| Capacités | GET /v3/tts/capabilities sur l’hôte realtime |
Tous les messages sont des trames binaires MessagePack. Les clients backend envoient Authorization: Bearer API_KEY lors du handshake. Dans un navigateur, un backend approuvé crée un ticket à usage unique via POST /v3/tts/browser-tickets. Ne placez jamais les identifiants dans l’URL.
Le navigateur se connecte avec l’URL et le sous-protocole renvoyés, puis envoie { event: 'auth', token: 'rtv2_ticket_...' } comme première trame MessagePack.
{ event: 'start', mode: 'simple', request: {
voiceId: '00a1b221-6137-4b73-ad62-b0cbce134167',
modelId: 'fishaudio-s21pro-flash', format: 'mp3',
speed: 1, stability: 1, similarity: 1, language: 'fr',
chunkLength: 200, latency: 'balanced'
}}voiceId et modelId sont obligatoires. Capabilities définit les modèles, formats et contrôles ; ready.effectiveRequest indique les valeurs effectives. Envoyez le texte avec { event:'input', text:'Bonjour', commit:true }, puis terminez par stop.
Les principaux événements sont authenticated, ready, input_ack, segment_accepted, audio, usage, segment_completed, warning, error, finish et pong ; tous les champs sont camelCase.
En mode fiable, utilisez mode:'reliable' et un requestId stable. Statut : GET /v3/tts/requests/{requestId}. Audio : GET /v3/tts/requests/{requestId}/segments/{segmentId}/audio. Réessayez uniquement si error.retryable vaut true. Realtime v2 reste compatible, mais ne mélangez pas son snake_case avec v3.