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 ea310ceb410..be572576599 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 @@ -24,6 +24,7 @@ import io.ktor.client.plugins.websocket.ClientWebSocketSession import io.ktor.websocket.Frame import io.ktor.websocket.close import io.ktor.websocket.readBytes +import java.io.ByteArrayOutputStream import java.util.concurrent.ConcurrentLinkedQueue import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineScope @@ -141,16 +142,14 @@ internal constructor( } private suspend fun sendAudioDataToServer() { - var offset = 0 - val audioBuffer = ByteArray(MIN_BUFFER_SIZE * 2) + + val audioBufferStream = ByteArrayOutputStream() while (isRecording) { val receivedAudio = audioQueue.poll() ?: continue - receivedAudio.copyInto(audioBuffer, offset) - offset += receivedAudio.size - if (offset >= MIN_BUFFER_SIZE) { - sendMediaStream(listOf(MediaData(audioBuffer, "audio/pcm"))) - audioBuffer.fill(0) - offset = 0 + audioBufferStream.write(receivedAudio) + if (audioBufferStream.size() >= MIN_BUFFER_SIZE) { + sendMediaStream(listOf(MediaData(audioBufferStream.toByteArray(), "audio/pcm"))) + audioBufferStream.reset() } } }