Поскольку вы используете PCM 16 бит, запишите звук в буфер ShortArray (его размер должен быть вдвое меньше размера буфера, так как short равен 16 бит или 2 байта), и конвертируйте буфер в ByteArray, используя эту функцию:
private fun short2byte(sData:ShortArray):ByteArray {
val shortArrsize = sData.size
val bytes = ByteArray(shortArrsize * 2)
for (i in 0 until shortArrsize)
{
bytes[i * 2] = (sData[i] and 0x00FF).toByte()
bytes[(i * 2) + 1] = (sData[i] shr 8).toByte()
sData[i] = 0
}
return bytes
}
Google Cloud API использует безопасную URL-кодировку Base64, поэтому добавьте ее в качестве одного из флагов для функции encodeString.
val audioContent: String = Base64.encodeToString(data, Base64.URL_SAFE | Base64.NO_WRAP);
Вместо записи аудио в файл, вы можете напрямую записать его вByteArrayOutputStream в памяти, если аудио имеет небольшой размер.