Fish Audio Docs
Référence APISynthèse vocaleSynthèse vocale en temps réel
Back to site

Synthèse vocale en temps réel v2

Diffusez la voix avec le protocole WebSocket public Realtime TTS v2.

Realtime TTS v2 est conservé pour les clients existants. Les nouvelles intégrations doivent utiliser la page v3 parente.

Points de terminaison et protocole

MarquePoint de terminaison
Fish Audiowss://realtime.fishaudio.org/v2/tts/live

Demandez le sous-protocole realtime.tts.msgpack.v2. Tous les messages applicatifs sont des trames binaires MessagePack, et non du texte JSON. Les intégrations /v1/tts/live existantes restent disponibles pour compatibilité ; les nouvelles doivent utiliser le contrat v3 parent. Cette page sert uniquement à maintenir les clients v2.

Authentification

Authorization: Bearer API_KEY
Sec-WebSocket-Protocol: realtime.tts.msgpack.v2

Ne transmettez pas de clé API durable au navigateur. Un backend de confiance l’échange via POST /v2/tts/browser-tickets contre un ticket court, à usage unique et lié à l’Origin. Le navigateur envoie { event: 'auth', event_id, token: 'rtv2_ticket_...' } comme première trame MessagePack. Ne placez jamais d’identifiant dans l’URL.

Flux et paramètres

connect → authenticated → start → ready → input → audio → finish

Le mode simple par défaut ne requiert aucun identifiant client. Après ready, envoyez { event: 'input', text } :

{
  event: 'start',
  request: {
    voice_id: 'PUBLIC_VOICE_UUID',
    model: 'fishaudio-s21pro-flash',
    format: 'mp3',
    speed: 1,
    volume: 0,
    language: 'fr',
    chunk_length: 200,
    latency: 'normal'
  }
}

Utilisez start.mode='reliable' uniquement pour la segmentation explicite, l’idempotence et la reprise. Ce mode exige event_id, request_id, text.sequence et flush.segment_id.

Les événements client sont auth, start, input, text, flush, stop et ping. Le mode simple utilise normalement uniquement start et input.

Paramètres des événements client

Chaque événement est une map MessagePack et les champs inconnus sont refusés. En mode reliable, event_id devient obligatoire à partir de start ; le auth précédent peut l’omettre.

ÉvénementModeChamps obligatoiresFacultatifs et valeurs par défautContraintes et comportement
authAvant le modeevent, tokenevent_idUniquement pour un ticket navigateur sans en-tête Authorization.
startsimple, reliableevent, requestmode: "simple", event_id, request_id, retry_failedReliable exige event_id et request_id ; la reprise est réservée à reliable.
inputsimpleevent, textevent_id, commit: trueTexte non vide ; 10 000 caractères maximum dans la requête tamponnée.
textreliableevent, event_id, sequence, textAucunsequence positive et consécutive ; 2 000 caractères maximum par trame.
flushreliableevent, event_id, segment_idAucunValide un tampon non vide ; segment_id unique de 1 à 128 caractères.
stopreliableevent, event_idAucunTermine après tous les segments acceptés.
pingsimple, reliableevent ; en reliable aussi event_idevent_id en simple, timestampLe serveur répond avec pong.

Les réponses PCM incluent sample_rate, channels et bit_depth.

Les formats actuels sont mp3, wav, opus. speed va de 0.5 à 2, volume de 0 à 10 et chunk_length de 50 à 1000 lorsque le fournisseur et le modèle les prennent en charge. Un paramètre non pris en charge renvoie unsupported_parameter.

Sans parameter_profile, v2 conserve son comportement historique : volume va de 0 à 10 et les champs inconnus ou non pris en charge sont rejetés. Avec parameter_profile: "product_v1", volume va de -20 à 20 et les champs stability, similarity, pitch, text_normalization, language, latency, emotion, instructions, optimize_instructions et chunk_length sont également disponibles. Le serveur borne les valeurs prises en charge, ignore les contrôles non pris en charge par le modèle et renvoie le résultat dans ready.effective_request.

La voice_id publique doit correspondre au modèle. Les fournisseurs actuels sont FishAudio et les modèles sont fishaudio-s21pro-flash. Consultez GET /v2/tts/capabilities avant la connexion pour connaître les formats et paramètres pris en charge par Fish Audio.

Le serveur émet authenticated, ready, input_ack, segment_accepted, audio, usage, segment_completed, request_status, warning, error, finish et pong. Un client simple ne traite que ready, audio, error et finish ; un client reliable attend input_ack et segment_completed. audio.audio contient des octets bruts dans MessagePack.

Les codes d’erreur stables incluent authentication_failed, authentication_required, already_authenticated, permission_denied, invalid_message, invalid_messagepack, invalid_state, idempotency_conflict, empty_segment, segment_too_large, session_limit_exceeded, quota_exceeded, client_backpressure, unsupported_parameter, voice_not_found, model_not_found, provider_unavailable, provider_timeout, generation_failed, billing_failed, connection_closed et internal_error.