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