feat(diagnostic): Speed-Slider im Voice-Preview-Modal (nicht persistiert)

Neue −0.1 / +0.1 Buttons im Preview-Modal mit aktuellem Wert-Label.
Bei jedem Oeffnen wird der Speed auf 1.0 zurueckgesetzt (bewusst kein
persist — nur zum Experimentieren waehrend das Modal offen ist).

- Range 0.1-5.0, gleiche wie in App-Settings
- Wird beim Play an f5tts-bridge als speed-Param mitgegeben
- Server clampt auf 0.1-5.0, Fallback 1.0

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-25 00:54:40 +02:00
parent b80b813703
commit feac7f2479
2 changed files with 41 additions and 5 deletions
+7 -4
View File
@@ -1469,7 +1469,7 @@ wss.on("connection", (ws) => {
} else if (msg.action === "test_tts") {
handleTestTTS(ws, msg.text || "Test");
} else if (msg.action === "preview_voice") {
handleVoicePreview(ws, msg.voice || "", msg.text || "Hallo.");
handleVoicePreview(ws, msg.voice || "", msg.text || "Hallo.", msg.speed);
} else if (msg.action === "check_tts") {
handleCheckTTS(ws);
} else if (msg.action === "check_desktop") {
@@ -1704,8 +1704,11 @@ function _handlePreviewChunk(payload) {
}
}
async function handleVoicePreview(clientWs, voice, text) {
async function handleVoicePreview(clientWs, voice, text, speed) {
try {
// Speed clampen — Browser-Slider ist 0.1-5.0
let spd = parseFloat(speed);
if (!isFinite(spd) || spd < 0.1 || spd > 5.0) spd = 1.0;
const requestId = crypto.randomUUID();
_previewPending.set(requestId, { clientWs, chunks: [], sampleRate: 0, channels: 0 });
// Timeout safety net
@@ -1720,10 +1723,10 @@ async function handleVoicePreview(clientWs, voice, text) {
}
}
}, 60000);
log("info", "server", `Voice-Preview: voice="${voice}" text="${text.slice(0, 60)}"`);
log("info", "server", `Voice-Preview: voice="${voice}" speed=${spd.toFixed(1)}x text="${text.slice(0, 60)}"`);
sendToRVS_raw({
type: "xtts_request",
payload: { text, language: "de", requestId, voice, speed: 1.0 },
payload: { text, language: "de", requestId, voice, speed: spd },
timestamp: Date.now(),
});
} catch (err) {