diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/AudioHelper.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/AudioHelper.kt
index 35edac88db0..07219617cee 100644
--- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/AudioHelper.kt
+++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/AudioHelper.kt
@@ -69,6 +69,21 @@ internal class AudioHelper {
     }
   }
 
+  fun stopRecording() {
+    if (
+      ::audioRecord.isInitialized && audioRecord.recordingState == AudioRecord.RECORDSTATE_RECORDING
+    ) {
+      audioRecord.stop()
+    }
+  }
+
+  fun start() {
+    if (
+      ::audioRecord.isInitialized && audioRecord.recordingState != AudioRecord.RECORDSTATE_RECORDING
+    ) {
+      audioRecord.startRecording()
+    }
+  }
   @RequiresPermission(Manifest.permission.RECORD_AUDIO)
   fun startRecording(): Flow<ByteArray> {
 
@@ -110,10 +125,16 @@ internal class AudioHelper {
     return flow {
       val buffer = ByteArray(bufferSize)
       while (!stopRecording) {
-        val bytesRead = audioRecord.read(buffer, 0, buffer.size)
-        if (bytesRead > 0) {
-          emit(buffer.copyOf(bytesRead))
+        if (audioRecord.recordingState != AudioRecord.RECORDSTATE_RECORDING) {
+          buffer.fill(0x00)
+          continue
         }
+        try {
+          val bytesRead = audioRecord.read(buffer, 0, buffer.size)
+          if (bytesRead > 0) {
+            emit(buffer.copyOf(bytesRead))
+          }
+        } catch (_: Exception) {}
       }
     }
   }
diff --git a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/LiveSession.kt b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/LiveSession.kt
index b3bdae1f707..ea310ceb410 100644
--- a/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/LiveSession.kt
+++ b/firebase-vertexai/src/main/kotlin/com/google/firebase/vertexai/type/LiveSession.kt
@@ -183,8 +183,13 @@ internal constructor(
   private fun playServerResponseAudio() {
     CoroutineScope(backgroundDispatcher).launch {
       while (isRecording) {
-        val x = playBackQueue.poll() ?: continue
-        audioHelper?.playAudio(x)
+        val data = playBackQueue.poll()
+        if (data == null) {
+          audioHelper?.start()
+          continue
+        }
+        audioHelper?.stopRecording()
+        audioHelper?.playAudio(data)
       }
     }
   }