From a5be7df834d6ef2be2c6a949ccf02e05703c4c6f Mon Sep 17 00:00:00 2001
From: ValueOn AG
Date: Fri, 6 Mar 2026 14:32:59 +0100
Subject: [PATCH] commcoach: suspend speech recognition during TTS playback on
mobile
Made-with: Cursor
---
.../views/commcoach/CommcoachDossierView.tsx | 20 ++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/pages/views/commcoach/CommcoachDossierView.tsx b/src/pages/views/commcoach/CommcoachDossierView.tsx
index 450dc6f..d0f12bd 100644
--- a/src/pages/views/commcoach/CommcoachDossierView.tsx
+++ b/src/pages/views/commcoach/CommcoachDossierView.tsx
@@ -227,9 +227,10 @@ export const CommcoachDossierView: React.FC = () => {
recognition.onend = () => {
// #region agent log
- _dlog('REC-END', `cancelled=${cancelled} sameRef=${speechRecognitionRef.current===recognition}`);
+ _dlog('REC-END', `cancelled=${cancelled} sameRef=${speechRecognitionRef.current===recognition} tts=${coach.isTtsPlayingRef.current}`);
// #endregion
if (cancelled) return;
+ if (coach.isTtsPlayingRef.current) return;
if (speechRecognitionRef.current === recognition) {
try { recognition.start(); } catch { speechRecognitionRef.current = null; }
}
@@ -269,6 +270,23 @@ export const CommcoachDossierView: React.FC = () => {
};
}, [activeTab, coach.session?.id, coach.isMuted]);
+ // On mobile, SpeechRecognition and Audio output conflict for the audio session.
+ // Pause recognition while TTS plays, resume when it stops.
+ useEffect(() => {
+ if (!speechRecognitionRef.current) return;
+ if (isTtsPlaying) {
+ // #region agent log
+ _dlog('REC-SUSPEND', 'tts started, stopping recognition');
+ // #endregion
+ try { speechRecognitionRef.current.stop(); } catch { /* ignore */ }
+ } else {
+ // #region agent log
+ _dlog('REC-RESUME', 'tts ended, restarting recognition');
+ // #endregion
+ try { speechRecognitionRef.current.start(); } catch { /* ignore */ }
+ }
+ }, [isTtsPlaying, _dlog]);
+
// Reset mute when session ends
useEffect(() => {
if (!coach.session) coach.setMuted(false);