Audio integration with Gemini not working in MediaPlayer

Problem:
I’m unable to successfully integrate audio playback with Gemini for transcription using MediaPlayer. When I send the audio file path to the ViewModel for transcription, I received this error in logcat

Error: Unexpected Response:
{
  "error": {
    "code": 400,
    "message": "Invalid or unsupported file URI: /storage/emulated/0/Android/data/com.martialcoder.whatsappaudiopoc/files/Music/klt.mp3",
    "status": "INVALID_ARGUMENT"
  }
}

kotlinx.serialization.MissingFieldException: Field 'details' is required for type with serial name 'com.google.ai.client.generativeai.common.server.GRpcError', but it was missing at path: $.error

This is how I’m using it inside my MainActivity + ViewModel
I have two functions startPlaying and stopPlaying.
Whenever i click on stop playing i am basically sending my audio file in videModel and calling it withViewModel

private fun stopPlaying() {
    player?.release()
    player = null

    try {
        viewModel.summarizeAudioStreaming(fileName)
        Log.d(LOG_TAG, "Audio file: $fileName")

    } catch (e: IOException) {
        // Handle file reading exceptions
        Log.e(LOG_TAG, "Error reading audio file: ${e.message}")
        Toast.makeText(this, "Error reading audio file", Toast.LENGTH_SHORT).show()
    }

}

This is myViewModel function sumarizeAudioStreaming

    fun summarizeAudioStreaming(audioFilePath: String) {
        _uiState.value = SummarizeUiState.Loading

        // Extract audio bytes from BlobPart
        //val audioBytes = audioBlobPart.blob

        val prompt =
            "Please correct the following text for any spelling and grammatical errors, and slightly paraphrase it while keeping the original language and the markdown format:\n: $audioFilePath"

        val mimeType = "audio/mp3"

        viewModelScope.launch {
            try {
                val inputContent = content {
                    fileData(audioFilePath, mimeType)
                    text(prompt)
                }

                var outputContent = ""

                generativeModel.generateContentStream(inputContent).catch {
                    // Handle exceptions
                    Log.d("SummarizeViewModel", "Error: ${it.localizedMessage}")
                    _uiState.value = SummarizeUiState.Error(it.localizedMessage ?: "")
                }.collect { response ->
                    outputContent += response.text

                    Log.d("SummarizeViewModel", "TextUpdatedEventBus: $outputContent")

                    // log values
                    Log.d("SummarizeViewModel", "outputContent: $outputContent")

                    _uiState.value = SummarizeUiState.Success(outputContent)
                    Log.d("SummarizeViewModel", "outputContent: $outputContent")
                }
            } catch (e: Exception) {
                _uiState.value = SummarizeUiState.Error(e.localizedMessage ?: "")
                Log.d("SummarizeViewModel", "Error: ${e.localizedMessage}")
            }
        }

    }

As per docs of Content.kt og GenerativeModel i am using correct format please let me know what’s wrong here.

    [@JvmName("addFileData")
    fun fileData(uri: String, mimeType: String) = part(FileDataPart(uri, mimeType))](https://github.com/google-gemini/generative-ai-android/blob/b5d2e5610d19522ad10e6dc7e98236689aaa3587/generativeai/src/main/java/com/google/ai/client/generativeai/type/Content.kt#L44)

Error Message:

Error: Unexpected Response:
                                                                                                    {
                                                                                                      "error": {
                                                                                                        "code": 400,
                                                                                                        "message": "Invalid or unsupported file uri: /storage/emulated/0/Android/data/com.martialcoder.whatsappaudiopoc/files/Music/klt.mp3",
                                                                                                        "status": "INVALID_ARGUMENT"
                                                                                                      }
                                                                                                    }
                                                                                                       
 kotlinx.serialization.MissingFieldException: Field 'details' is required for type with serial name 'com.google.ai.client.generativeai.common.server.GRpcError', but it was missing at path: $.error
1 Like