From 0623de32a022e2b431d920d98a201aeeb2a6a8b4 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Wed, 22 Apr 2026 18:08:10 +0200 Subject: [PATCH] tune: stream_chunk_size 200 -> 100 gegen 6s Initial-Latenz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mit RTF 1.48 (RTX 3060) rechnet XTTS fuer 200 chars ca. 6s bis erster PCM-Chunk rauskommt — User wartet nach ARIA-Antwort 6s auf Sprachausgabe. stream_chunk_size=100: Erster Chunk in ~3s bereit, reduziert Initial-Latenz um ~50%. 100 chars sind auch noch gross genug dass der AudioTrack-Buffer (128KB ≈ 2.7s Audio) zwischen Render-Chunks nicht leerlaeuft → kein mid-sentence Abbruch wie bei 40. Falls bei bestimmten Texten doch Gaps: stream_chunk_size zurueck auf 150, oder pre-roll im Android PcmStreamPlayer einbauen (nur starten wenn X ms gepuffert sind). Co-Authored-By: Claude Opus 4.7 (1M context) --- xtts/bridge.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/xtts/bridge.js b/xtts/bridge.js index 1fef8d0..da2a5eb 100644 --- a/xtts/bridge.js +++ b/xtts/bridge.js @@ -216,13 +216,15 @@ 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). + // stream_chunk_size=100: Kompromiss zwischen first-audio-latency und + // gap-risk. Bei RTX 3060 (RTF 1.48) ~3s bis erster Audio, Chunks gross + // genug dass der AudioTrack-Buffer (128KB ≈ 2.7s) zwischen Chunks nicht + // leerlauft. const qs = new URLSearchParams(); qs.set("text", text); qs.set("language", language || "de"); qs.set("speaker_wav", speakerWav || ""); - qs.set("stream_chunk_size", "200"); + qs.set("stream_chunk_size", "100"); const url = new URL(XTTS_API_URL); const fullPath = `/tts_stream?${qs.toString()}`;