fix: Streaming TTS nutzt jetzt echt den /tts_stream Endpoint von XTTS
Vorher: /tts_to_audio/ — XTTS rendert kompletten WAV BEVOR es antwortet. Mein "streaming" war nur fake-chunking des fertigen WAV. Time-to-first-audio = komplette Render-Zeit (2-4s), dann Burst, dann Stille. Plus bei langen Antworten: Queue blockiert. Jetzt: /tts_stream — daswer123's chunked-transfer endpoint. Samples flutschen waehrend der Generierung durch die Response raus. Parameter: - stream_chunk_size=40 → XTTS rendert in ~40-char Haeppchen intern, time-to-first-audio ~300-500ms statt 2-4s - WAV-Header kommt wie gewohnt am Anfang (44 Bytes), danach raw PCM → mein existierender Header-Parser + 8KB-Chunker passen weiter Voraussetzung: daswer123/xtts-api-server hat diesen Endpoint (ab Version ~0.8.x). Sollte bei der aktuellen Version drin sein. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
79ba7b8487
commit
59c8d36a3d
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue