From cd5e6e7ee638963857efc8af5268a8f838abec19 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Wed, 22 Apr 2026 18:06:25 +0200 Subject: [PATCH] fix: stream_chunk_size 40 -> 200 gegen Audio-Abbrueche mid-sentence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bei stream_chunk_size=40 teilte XTTS Text in ~40-char Batches. Zwischen Batches pausiert XTTS (RTF 1.48 auf RTX 3060 → langsamer als Realtime-Wiedergabe). AudioTrack-Buffer lief leer, Track stoppte, nachkommender PCM kam zu spaet → Audio bricht mid-sentence ab (User-Bug: bei 73-char Text Abbruch nach Wort 'diesmal' was genau an der 40-char Grenze lag). stream_chunk_size=200: - Kurze Saetze (<200 chars) komplett in einem Render → kein Abbruch - Laengere Texte: groessere Chunks, laenger Audio pro Chunk als Render-Pause → Buffer bleibt gefuellt - Kompromiss: first-audio-latency etwas hoeher, aber keine Abbrueche Wenn spaeter Audio-Abbrueche bei langen Texten: stream_chunk_size noch groesser setzen ODER einen "pre-roll" Buffer in der App. Co-Authored-By: Claude Opus 4.7 (1M context) --- xtts/bridge.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xtts/bridge.js b/xtts/bridge.js index e5ad399..1fef8d0 100644 --- a/xtts/bridge.js +++ b/xtts/bridge.js @@ -216,11 +216,13 @@ function streamXTTSAsPCM(text, language, speakerWav, onPcmChunk) { return new Promise((resolve, reject) => { // Wichtig: speaker_wav MUSS als Query-Key dabei sein (Pydantic required) — // auch bei default-voice mit leerem Wert. Sonst gibt's HTTP 422. + // stream_chunk_size=200: XTTS rendert groessere Text-Happen, d.h. weniger + // Pausen zwischen Chunks (wenn RTF > 1 ist der Buffer sonst oft leer). const qs = new URLSearchParams(); qs.set("text", text); qs.set("language", language || "de"); qs.set("speaker_wav", speakerWav || ""); - qs.set("stream_chunk_size", "40"); + qs.set("stream_chunk_size", "200"); const url = new URL(XTTS_API_URL); const fullPath = `/tts_stream?${qs.toString()}`;