From 3b32b208b64d54309f26d938f46ba3997f85c38a Mon Sep 17 00:00:00 2001 From: Bruno Deanoz Date: Wed, 24 Jun 2026 13:06:31 +0200 Subject: [PATCH] fix Live Call: drop all audio chunks during ducking The old ducking logic only skipped chunks below a threshold (RMS < 0.10), but the S25 Ultra speakers leak enough audio into the mic to exceed that. Gemini's server-side VAD picks it up as user speech, triggers interrupts, and the model starts hallucinating a conversation with itself. Now: when ducking is active (model speaking), NO mic chunks are sent. The server-side VAD handles the real speech detection after ducking ends. --- app/src/main/java/dev/kaizen/app/live/AudioPipeline.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/dev/kaizen/app/live/AudioPipeline.kt b/app/src/main/java/dev/kaizen/app/live/AudioPipeline.kt index 9d626a0..064b276 100644 --- a/app/src/main/java/dev/kaizen/app/live/AudioPipeline.kt +++ b/app/src/main/java/dev/kaizen/app/live/AudioPipeline.kt @@ -101,7 +101,7 @@ class AudioPipeline(private val context: Context) { val rms = computeRms(buffer, read) onAmplitude?.invoke(rms) - if (ducking && rms < DUCKING_GAIN) continue + if (ducking) continue byteBuffer.clear() for (i in 0 until read) byteBuffer.putShort(buffer[i])