我试图使用JSON和下面的代码片段发送POST请求到https://speech.googleapis.com/v1/speech:recognize。不知何故,谷歌回应说,在我的请求中无法解码Base 64。Google语音API的Base64解码失败
{ “配置”:{ “编码”: “LINEAR16”, “sampleRateHertz”:16000, “语言代码”: “JA-JP”, “maxAlternatives”:5, “profanityFilter”:假 }, “音频”:{ “内容”: “ZXCVBNM” }, }
String pcmFilePath = "/storage/emulated/0/Download/voice8K16bitmono.pcm";
File rawFile = new File(pcmFilePath);
byte[] rawData = new byte[(int) rawFile.length()];
DataInputStream input = null;
try {
input = new DataInputStream(new FileInputStream(rawFile));
int readResult = input.read(rawData);
} catch (Exception ex) {
ex.printStackTrace();
}
if (input != null) {
input.close();
};
String base64 = Base64.encodeToString(rawData, Base64.DEFAULT);
String completePostBody = postBody.replace("ZXCVBNM" , base64);
“代码”:400, “消息”:“在 'audio.content' 的值无效(TYPE_BYTE S),Base64解码失败,因为“...
有没有人有任何建议?
本质上,它在消息中所说的。 'ZXCVBNM'无效(不完整)base64编码(部分解码为'epò',但不完整)。 Base-64将源(二进制)数据的每三个字符编码为4个编码数据字符。您只有七个字符,因此不完整(并且对于任何类型的音频表示也是可疑的短)。 – TripeHound
我后来意识到,你正在用你的文件内容替换'ZXCVBNM'(我不知道Android足以知道你的代码是否正确读取文件)。然而,问题仍然是谷歌收到的是不是有效的base-64。尝试记录你实际发送的有效载荷中是否有意义。 (或者,可以想象,Googole并不期待base64(链接给我404)。 – TripeHound
对于迟到的回复,我发送POST请求后跟随此文档:https://cloud.google.com/speech/reference/rest/v1/speech/recognition。可能是你想要访问的链接不是用于浏览器的,下面是我实际发送的有效负载的日志记录:http://www.mediafire.com/file/9qzxyzexlxc7jr1/ – ZodiacLeo123