Przejdź do nawigacji

WebSockety Text to Speech a Text to Dialogue

Ten przewodnik pomoże ci wybrać odpowiedni WebSocket do strumieniowania mowy i wyjaśnia różnice między tymi dwoma protokołami.

ElevenLabs oferuje dwie rodziny produktów WebSocket do strumieniowania syntezowanej mowy. Każda rodzina ma wariant pojedynczego strumienia i wariant wielu kontekstów, który multipleksuje kilka niezależnych strumieni przez jedno połączenie. Rozwiązują różne problemy, przyjmują różne formaty wiadomości i obsługują różne modele.

Którego WebSocketu użyć?

Użyj WebSocketu Text to Speech (TTS), gdy strumieniujesz zwykły tekst dla jednego głosu na połączenie (głos jest ustalony w URL) i potrzebujesz modeli innych niż v3, takich jak Flash lub Multilingual v2, opcjonalnego SSML, harmonogramów chunków albo wariantu wielu kontekstów do obsługi przerwań w stylu agenta.

Użyj WebSocketu Text to Dialogue (TTD), gdy potrzebujesz działania dialogów Eleven v3: ekspresyjnego sposobu mówienia, **voice_id dla każdego chunku **, granic tur (new_turn) i tego samego buforowania zorientowanego na dialog, którego serwer używa dla v3.

Użyj WebSocketu TTD z wieloma kontekstami, gdy potrzebujesz tego samego działania dialogów Eleven v3 oraz kilku równoczesnych lub przeplatanych strumieni w jednym połączeniu — na przykład agenta konwersacyjnego, który musi przerwać i wznowić dialog bez otwierania nowego socketu za każdym razem.

W przypadku wsadowego lub strumieniowanego przez HTTP dialogu (pełne żądanie w jednym wywołaniu) użyj Create dialogue lub Stream dialogue zamiast WebSocketu.

Porównanie

WebSocket Text to SpeechWebSocket Text to Dialogue
Dokumentacja APITTS stream-inputTTD WebSocket
URLwss://api.elevenlabs.io/v1/text-to-speech/{voice_id}/stream-inputwss://api.elevenlabs.io/v1/text-to-dialogue/stream-input
Wybór głosuJedno voice_id w ścieżce; cały strumieniowany tekst używa tego głosuPierwsza wiadomość rejestruje jeden lub więcej voices według ID; każdy wpis inputs[] wskazuje voice_id
ModeleFlash, Multilingual v2 i inne obsługiwane modele TTS. Bez eleven_v3 ani eleven_v4 w tym endpointcie.model_id musi zaczynać się od eleven_v3 lub eleven_v4 (na przykład eleven_v4 lub eleven_v4_turbo)
Pierwsza wiadomość klientaInicjalizuj spacją oraz opcjonalnie voice_settings / generation_config (zobacz przewodnik po TTS w czasie rzeczywistym)Musi zawierać voices (oraz dane uwierzytelniające, jeśli nie zostały już wysłane w nagłówkach lub zapytaniu)
Kolejny tekstWyślij ciąg text (zwykle z końcową spacją); opcjonalnie flush, try_trigger_generation itd.Wyślij inputs: obiekty { text, voice_id, new_turn? }; opcjonalnie flush, close_socket, keep_alive
Buforowanie / harmonogramHarmonogram długości chunków i powiązane kontrolki TTS WebSocketSerwer buforuje dane, aż zbierze wystarczająco dużo tekstu (około 40 znaków i 8 słów), zanim wyemituje audio, chyba że użyjesz flush
Wielu mówców w jednym sockecieUżyj WebSocketu wielu kontekstów dla wielu równoległych kontekstów TTS, a nie dla semantyki dialogu wielu mówcówDo 10 zarejestrowanych głosów dla eleven_v4; eleven_v4_turbo pozwala tylko na jeden zarejestrowany głos. Dla równoległych strumieni dialogu użyj WebSocketu TTD wielu kontekstów
NieaktywnośćKonfigurowalny inactivity_timeout (zapytanie TTS WebSocket)Stałe 20 s między wiadomościami klienta, chyba że wyślesz keep_alive
WspółbieżnośćTylko czas aktywnego generowania wlicza się do limitu współbieżności twojego planu; otwarty, bezczynny socket nie jest wliczanyKażde otwarte połączenie zajmuje jedną sesję dialogową z osobnej puli przez cały czas trwania; generowanie przez połączenie nie zużywa standardowej współbieżności
WyrównanieOpcjonalne sync_alignment (nazewnictwo pól TTS w dokumentacji API)Opcjonalne sync_alignment; JSON używa w odpowiedziach pól w formacie snake_case (na przykład is_final, char_start_times_ms)

Kiedy lepszy jest WebSocket TTS

  • Masz już integrację z Flash lub Multilingual v2 ze względu na opóźnienia albo obsługę języków.
  • Potrzebujesz jednego głosu narratora na połączenie i prostego protokołu tekstu na klatkę.
  • Potrzebujesz koordynacji wielu kontekstów dla wtrąceń i równoległych wypowiedzi (przewodnik po wielu kontekstach).

Pełny opis WebSocketu TTS znajdziesz w Generate audio in real-time.

Kiedy lepszy jest WebSocket TTD

  • Korzystasz z dialogów Eleven v4 (ekspresyjne tagi, konwersacyjne tempo, kwestie wielu mówców).
  • Strumieniujesz dialog napisany w skrypcie lub wygenerowany przez LLM, w którym głos mówiący może zmieniać się w każdej kwestii bez otwierania nowego połączenia.
  • Potrzebujesz przyrostowego wejścia w formacie WebSocketu z generowaniem dialogu wyłącznie w v4 na serwerze.

Aby przejść przez proces krok po kroku, użyj Realtime Text to Dialogue. Szczegóły protokołu znajdziesz w dokumentacji API.

WebSockety wielu kontekstów

Oba produkty oferują wariant wielu kontekstów, który multipleksuje kilka niezależnych strumieni przez jedno połączenie WebSocket. Każdy kontekst jest identyfikowany przez wybrane przez klienta context_id, buforuje własny tekst i emituje chunki audio oznaczone tym context_id. Konteksty TTS współdzielą voice_id z URL połączenia, natomiast konteksty TTD rejestrują własne głosy i ustawienia. Użyj tego formatu, gdy potrzebujesz równoczesnego lub przeplatanego generowania z obsługą przerwań — na przykład agent głosowy, który musi anulować trwającą wypowiedź i rozpocząć nową bez zamykania połączenia.

WebSocket TTS wielu kontekstówWebSocket TTD wielu kontekstów
Dokumentacja APITTS 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
ModeleFlash, Multilingual v2 i inne obsługiwane modele TTS. Bez eleven_v3 ani eleven_v4.model_id musi zaczynać się od eleven_v3 (na przykład eleven_v3 lub eleven_v3_conversational). eleven_v4 nie jest obsługiwany przez ten endpoint.
KontekstyWiele równoległych kontekstów TTS w jednym połączeniuDo 5 jednoczesnych kontekstów na połączenie
Głosy na kontekstJedno voice_id ustalone w URL dla każdego kontekstuRejestrowane w pierwszej wiadomości dla context_id: 1 dla eleven_v3_conversational, do 10 dla eleven_v3
Kierowanie wiadomościKażda wiadomość zawiera context_idKażda wiadomość zawiera context_id (wyjątkiem jest wiadomość zawierająca tylko close_socket)
Wiadomości sterująceflush, close_context, close_socket, keep_alive dla każdego kontekstuflush, close_context, close_socket, keep_alive dla każdego kontekstu
NieaktywnośćKonfigurowalny inactivity_timeout dla każdego kontekstuStałe 20 s dla każdego kontekstu, chyba że wyślesz keep_alive dla tego kontekstu
UwierzytelnianieNa poziomie połączenia (nagłówek, zapytanie lub pierwsza wiadomość)Na poziomie połączenia (nagłówek, zapytanie lub pierwsza wiadomość) — nie na poziomie kontekstu

Kiedy lepszy jest WebSocket TTD wielu kontekstów

  • Potrzebujesz działania dialogów Eleven v3 (ekspresyjnego sposobu mówienia, voice_id dla każdego chunku, granic tur) oraz równoczesnych lub przeplatanych strumieni w jednym połączeniu.
  • Tworzysz agenta konwersacyjnego, który musi przerwać i wznowić dialog bez otwierania nowego socketu za każdym razem.
  • Chcesz rozdzielić kilka niezależnych sesji dialogowych v3 — na przykład równoległe sceny lub mówców — przez jedno uwierzytelnione połączenie.

Informacje o jedno-strumieniowym WebSockecie TTD znajdziesz w Realtime Text to Dialogue. Informacje o WebSockecie TTS wielu kontekstów znajdziesz w przewodniku po WebSockecie wielu kontekstów. Szczegóły protokołu endpointu TTD wielu kontekstów znajdziesz w dokumentacji API.

Powiązane przewodniki