From 97442198ecc10da0900d51a4ca3a4e8b68578801 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 10 May 2026 12:39:33 +0200 Subject: [PATCH] fix(audio): neue ARIA-Antwort verwirft pending Auto-Resume MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stefans Edge-Case: waehrend des Telefonats stellt der User eine neue Text-Frage. Die neue ARIA-Antwort startet sofort (offhook→offhook loest keinen halt aus). Vorher haette resumeFromInterruption nach Anruf-Ende noch die ALTE Antwort (die unterbrochen wurde) ab Position spielen wollen — Konflikt mit der neuen Antwort. Fix: in _handlePcmChunkImpl beim Wechsel zu einer neuen messageId: - laufenden resumeSound stoppen - pausedMessageId = '' wenn != neue messageId Damit gewinnt immer die neueste Antwort. Co-Authored-By: Claude Opus 4.7 (1M context) --- android/src/services/audio.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/android/src/services/audio.ts b/android/src/services/audio.ts index 280fca3..4852bd4 100644 --- a/android/src/services/audio.ts +++ b/android/src/services/audio.ts @@ -814,6 +814,21 @@ class AudioService { this.pcmBuffer = []; this.pcmBytesCollected = 0; } + // Resume-Sound stoppen falls noch aktiv (User hat nach Anruf eine + // neue Frage gestellt — die alte interruptierte Antwort ist obsolet). + if (this.resumeSound) { + try { this.resumeSound.stop(); this.resumeSound.release(); } catch {} + this.resumeSound = null; + } + // Pending Auto-Resume verwerfen wenn die neue Antwort eine andere + // messageId hat. Sonst spielt nach 30s-Wartezeit der Resume die + // ueberholte Antwort ab. + if (this.pausedMessageId && this.pausedMessageId !== messageId) { + console.log('[Audio] Neue TTS-Antwort (msgId=%s) — Auto-Resume fuer %s verworfen', + messageId, this.pausedMessageId); + this.pausedMessageId = ''; + this.pausedPosition = 0; + } this.pcmStreamActive = true; this.pcmMessageId = messageId; this.pcmSampleRate = sampleRate;