From 930841cd7c2b2d5d6ef29ff170a188dd8a06b169 Mon Sep 17 00:00:00 2001 From: Greg Mousseau Date: Sat, 28 Feb 2026 12:58:14 -0500 Subject: [PATCH] fix(android): wire MP3 fallback call, prevent double-speaking - Codex P1: streamAndPlayMp3 was computed but never called after PCM failure. Now properly invoked as fallback. - Codex P2: MicCaptureManager.speakAssistantReply now skipped when TalkModeManager.ttsOnAllResponses is active, preventing both pipelines from speaking the same assistant reply. --- .../app/src/main/java/ai/openclaw/android/NodeRuntime.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt b/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt index 2f488b4686b..529085dbbc3 100644 --- a/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt +++ b/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt @@ -361,7 +361,11 @@ class NodeRuntime(context: Context) { parseChatSendRunId(response) ?: idempotencyKey }, speakAssistantReply = { text -> - voiceReplySpeaker.speakAssistantReply(text) + // Skip if TalkModeManager is handling TTS (ttsOnAllResponses) to avoid + // double-speaking the same assistant reply from both pipelines. + if (!talkMode.ttsOnAllResponses) { + voiceReplySpeaker.speakAssistantReply(text) + } }, ) }