Streama dialog i realtid
Den här guiden visar hur du streamar ljud för Eleven v3-dialog via Text to Dialogue WebSocket.
Text to Dialogue WebSocket (/v1/text-to-dialogue/stream-input) håller en enda anslutning öppen medan du skickar dialograder och tar emot base64-kodade ljudsegment. Den är endast avsedd för dialogmodellerna Eleven v3 och Eleven v4 (model_id måste börja med eleven_v3 eller eleven_v4).
Den här guiden handlar om WebSocket för Text to Dialogue. För Flash, Multilingual v2 eller andra TTS-modeller som inte är v3 använder du Realtime TTS WebSocket. För en jämförelse sida vid sida av båda protokollen, se Text to Speech- och Text to Dialogue- WebSockets.
Krav
- Ett ElevenLabs-konto med en API-nyckel (autentisering).
- API-nyckeln måste ha behörighet för
Text to Speech. - Python eller Node.js installerat på din dator.
Konfiguration
Skapa en .env-fil:
Välj ett röst-ID från Voice Library. Exemplen nedan använder eleven_v4_turbo, som tillåter en registrerad röst per anslutning.
Öppna WebSocket-anslutningen
Anslut till wss://api.elevenlabs.io/v1/text-to-dialogue/stream-input med frågeparametrar som model_id och output_format. Du kan skicka API-nyckeln i headern xi-api-key eller i det första JSON-meddelandet (visas här i brödtexten för ett enhetligt mönster mellan språk).
Registrera röster och streama text
Skicka ett första meddelande som innehåller voices (obligatoriskt) och xi_api_key om du inte har angett headern xi-api-key. Skicka sedan en eller flera ramar med inputs: varje objekt har text, voice_id och valfritt new_turn.
Servern buffrar text tills den har tillräckligt med kontext (cirka 40 tecken och 8 ord) och skickar sedan audio-segment. Svarsfälten använder snake_case (till exempel is_final).
close_socket tömmer all buffrad text, skickar återstående ljud och sedan en sista ram med is_final: true innan anslutningen stängs. Om du vill hålla anslutningen öppen mellan rader utelämnar du close_socket tills sessionen avslutas. Använd flush för att framtvinga ljud för kortare buffertar utan att stänga anslutningen.
Kör skriptet
Du bör få en MP3-fil under output/ (med filnamnet från exemplet ovan).
Anmärkningar om beteende
Buffring
Till skillnad från TTS WebSocket chunk_length_schedule använder dialogstreaming ett fast tröskelvärde på servern (antal tecken och ord) före det första partiella ljudet. Om du skickar korta rader och hör fördröjningar kan du samla lite mer text per inputs-ram eller skicka flush: true för att framtvinga generering utan att stänga socketen.
Turordningar och röster
Ange new_turn: true när en talare avslutar en tur så att prosodin återställs korrekt. Att ändra voice_id mellan inputs-poster startar också en ny tur. Med eleven_v4_turbo registrerar du exakt en röst i voices; eleven_v4 har stöd för upp till 10 registrerade röster.
Inaktivitet
Om servern inte tar emot något klientmeddelande på 20 sekunder avslutas anslutningen. Skicka {"keep_alive": true} för att återställa timern utan att syntetisera ljud.
Samtidighet
Varje öppen anslutning håller en dialogs-session så länge den är öppen och hämtas från en dedikerad pool som är separat från din plans vanliga samtidighetsgräns. Ljud som genereras via anslutningen räknas inte mot standardgränsen för samtidighet. Se samtidighet för Text to Dialogue.
Justering
Lägg till sync_alignment=true i frågesträngen för att ta emot alignment-objekt (tidsmatriser i snake_case) i segment när de är tillgängliga. Se API-referensen.