diff --git a/xtts/bridge.js b/xtts/bridge.js index 3ec7655..b48bcbd 100644 --- a/xtts/bridge.js +++ b/xtts/bridge.js @@ -195,16 +195,12 @@ async function _runTTSRequest(payload) { } /** - * Ruft /tts_to_audio/ auf und streamt das resultierende WAV bereits waehrend - * des Empfangs in PCM-Frames an den Callback. Der WAV-Header wird einmal - * geparst, danach werden nur noch raw PCM-Samples weitergeleitet. + * Ruft /tts_stream auf — echter Streaming-Endpoint von daswer123. + * Chunked Transfer-Encoding: Samples kommen WAEHREND XTTS rendert, + * nicht erst am Ende. Time-to-first-audio ~300-500ms statt 2-3s. * - * Warum nicht echtes /tts_stream/? daswer123 hat den Endpoint, aber die - * Audio-Quality ist dort niedriger und er produziert beim ersten Chunk - * oft Artefakte. Pragmatischer Weg: /tts_to_audio/ + Response-Stream - * chunkweise auslesen. Das ist zwar kein echtes Server-Streaming, aber - * gibt uns deutlich kleinere Netzwerk-Haeppchen und die App kann via - * AudioTrack MODE_STREAM sofort nahtlos abspielen. + * stream_chunk_size = Characters pro Render-Iteration. + * 40 = guter Kompromiss zwischen Schnellstart und GPU-Effizienz. */ function streamXTTSAsPCM(text, language, speakerWav, onPcmChunk) { return new Promise((resolve, reject) => { @@ -212,9 +208,10 @@ function streamXTTSAsPCM(text, language, speakerWav, onPcmChunk) { text, language, speaker_wav: speakerWav || "", + stream_chunk_size: 40, }); - const url = new URL(`${XTTS_API_URL}/tts_to_audio/`); + const url = new URL(`${XTTS_API_URL}/tts_stream`); const options = { hostname: url.hostname, port: url.port,