Skip to navigation

Text to Speech versus Text to Dialogue WebSockets

In deze gids lees je hoe je de juiste WebSocket voor streaming spraak kiest en waarin de twee protocollen verschillen.

ElevenLabs biedt twee groepen WebSocket-producten voor het streamen van gesynthetiseerde spraak. Elke groep heeft een variant met één stream en een variant met meerdere contexten, die verschillende onafhankelijke streams via één verbinding multiplexeert. Ze lossen verschillende problemen op, accepteren verschillende berichtstructuren en zijn gericht op verschillende modellen.

Welke WebSocket moet ik gebruiken?

Gebruik de Text to Speech (TTS)-WebSocket wanneer je gewone tekst streamt voor één stem per verbinding (de stem is vastgelegd in de URL) en je niet-v3-modellen wilt gebruiken, zoals Flash of Multilingual v2, optionele SSML, chunkschema’s of de variant met meerdere contexten voor het afhandelen van onderbrekingen in agentstijl.

Gebruik de Text to Dialogue (TTD)-WebSocket wanneer je Eleven v3-dialooggedrag nodig hebt: expressieve weergave, **voice_id per chunk **, beurtgrenzen (new_turn) en dezelfde op dialoog gerichte buffering die op de server voor v3 wordt gebruikt.

Gebruik de TTD-WebSocket met meerdere contexten wanneer je hetzelfde Eleven v3-dialooggedrag nodig hebt én meerdere gelijktijdige of door elkaar lopende streams op één verbinding — bijvoorbeeld voor een conversationele agent die een dialoog moet onderbreken en opnieuw starten zonder telkens een nieuwe socket te openen.

Gebruik voor batch- of HTTP-streaming van dialoog (de volledige request in één aanroep) Create dialogue of Stream dialogue in plaats van een WebSocket.

Vergelijking

Text to Speech-WebSocketText to Dialogue-WebSocket
API-referentieTTS stream-inputTTD WebSocket
URLwss://api.elevenlabs.io/v1/text-to-speech/{voice_id}/stream-inputwss://api.elevenlabs.io/v1/text-to-dialogue/stream-input
StemselectieEén voice_id in het pad; alle gestreamde tekst gebruikt die stemHet eerste bericht registreert één of meer voices op ID; elke inputs[]-vermelding bevat een voice_id
ModellenFlash, Multilingual v2 en andere ondersteunde TTS-modellen. Geen eleven_v3 of eleven_v4 op dit endpoint.model_id moet beginnen met eleven_v3 of eleven_v4 (bijvoorbeeld eleven_v4 of eleven_v4_turbo)
Eerste clientberichtInitialiseer met een spatie en optionele voice_settings / generation_config (zie de realtime TTS-gids)Moet voices bevatten (en inloggegevens als die nog niet via headers of query zijn verzonden)
Doorlopende tekstStuur een text-string (meestal met een spatie aan het eind); optioneel flush, try_trigger_generation, enzovoortStuur inputs: objecten { text, voice_id, new_turn? }; optioneel flush, close_socket, keep_alive
Buffering / planningChunkschema voor lengte en gerelateerde TTS-WebSocket-besturingselementenDe server buffert totdat er voldoende tekst is (ongeveer 40 tekens en 8 woorden) voordat audio wordt verstuurd, tenzij je flush gebruikt
Meerdere sprekers op één socketGebruik WebSocket met meerdere contexten voor meerdere parallelle TTS-contexten, niet voor dialoogsemantiek met meerdere sprekersMaximaal 10 geregistreerde stemmen voor eleven_v4; eleven_v4_turbo staat slechts één geregistreerde stem toe. Gebruik voor parallelle dialoogstreams de TTD-WebSocket met meerdere contexten
InactiviteitConfigureerbare inactivity_timeout (TTS-WebSocket-query)Vaste 20 s tussen clientberichten, tenzij je keep_alive verstuurt
GelijktijdigheidAlleen actieve generatietijd telt mee voor de gelijktijdigheidslimiet van je abonnement; een open maar inactieve socket telt niet meeElke open verbinding houdt gedurende de hele levensduur één dialoogsessie uit een aparte pool vast; generatie via de verbinding verbruikt geen standaardgelijktijdigheid
UitlijningOptionele sync_alignment (TTS-veldnaamgeving in de API-referentie)Optionele sync_alignment; JSON gebruikt snake_case-velden in responses (bijvoorbeeld is_final, char_start_times_ms)

Wanneer de TTS-WebSocket beter past

  • Je integreert al Flash of Multilingual v2 vanwege latentie of taalondersteuning.
  • Je wilt één vertelstem per verbinding en een eenvoudig tekst-per-frame-protocol.
  • Je hebt multi-context-orkestratie nodig voor onderbrekingen en parallelle uitingen (multi-context-gids).

Zie Audio in realtime genereren voor een volledige uitleg van de TTS-WebSocket.

Wanneer de TTD-WebSocket beter past

  • Je richt je op Eleven v4-dialoog (expressieve tags, conversationeel tempo, regels met meerdere sprekers).
  • Je streamt gescripte of door een LLM gegenereerde dialoog waarbij de sprekende stem per regel kan veranderen zonder een nieuwe verbinding te openen.
  • Je wilt stapsgewijze input in WebSocket-vorm met dialooggeneratie die alleen voor v4 beschikbaar is op de server.

Gebruik voor een praktische uitleg Realtime Text to Dialogue. Protocolinformatie vind je in de API-referentie.

WebSockets met meerdere contexten

Beide producten bieden een variant met meerdere contexten, die verschillende onafhankelijke streams via één WebSocket-verbinding multiplexeert. Elke context wordt geïdentificeerd door een door de client gekozen context_id, buffert zijn eigen tekst en stuurt audiochunks met die context_id. TTS-contexten delen de voice_id uit de URL van de verbinding, terwijl TTD-contexten hun eigen stemmen en instellingen registreren. Gebruik deze indeling wanneer je gelijktijdige of door elkaar lopende generatie met onderbrekingsafhandeling nodig hebt — bijvoorbeeld voor een spraakagent die een lopende uiting moet annuleren en een nieuwe moet starten zonder de verbinding te verbreken.

TTS-WebSocket met meerdere contextenTTD-WebSocket met meerdere contexten
API-referentieTTS multi-stream-inputTTD multi-stream-input
URLwss://api.elevenlabs.io/v1/text-to-speech/{voice_id}/multi-stream-inputwss://api.elevenlabs.io/v1/text-to-dialogue/multi-stream-input
ModellenFlash, Multilingual v2 en andere ondersteunde TTS-modellen. Geen eleven_v3 of eleven_v4.model_id moet beginnen met eleven_v3 (bijvoorbeeld eleven_v3 of eleven_v3_conversational). eleven_v4 wordt niet ondersteund op dit endpoint.
ContextenMeerdere parallelle TTS-contexten op één verbindingMaximaal 5 gelijktijdige contexten per verbinding
Stemmen per contextEén voice_id die voor elke context is vastgelegd in de URLGeregistreerd in het eerste bericht voor een context_id: 1 voor eleven_v3_conversational, maximaal 10 voor eleven_v3
Routing per berichtElk bericht bevat context_idElk bericht bevat context_id (een bericht dat alleen close_socket bevat, is de uitzondering)
Besturingsberichtenflush, close_context, close_socket, keep_alive per contextflush, close_context, close_socket, keep_alive per context
InactiviteitConfigureerbare inactivity_timeout per contextVaste 20 s per context, tenzij je keep_alive voor die context verstuurt
AuthenticatieOp verbindingsniveau (header, query of eerste bericht)Op verbindingsniveau (header, query of eerste bericht) — niet per context

Wanneer de TTD-WebSocket met meerdere contexten beter past

  • Je hebt Eleven v3-dialooggedrag nodig (expressieve weergave, voice_id per chunk, beurtgrenzen) én gelijktijdige of door elkaar lopende streams op één verbinding.
  • Je bouwt een conversationele agent die een dialoog moet onderbreken en opnieuw starten zonder telkens een nieuwe socket te openen.
  • Je wilt verschillende onafhankelijke v3-dialoogsessies via één geauthenticeerde verbinding distribueren — bijvoorbeeld parallelle scènes of sprekers.

Zie voor de TTD-WebSocket met één stream Realtime Text to Dialogue. Zie voor de TTS-WebSocket met meerdere contexten de gids voor de WebSocket met meerdere contexten. Protocolinformatie voor het TTD-endpoint met meerdere contexten vind je in de API-referentie.

Gerelateerde gidsen