谷歌语音API - 识别base64编码音频
问题描述:
我一直在努力与谷歌语音API一段时间,并会爱一些建议。谷歌语音API - 识别base64编码音频
这里就是我想要做的事:
- 录制音频的浏览器
- 转换的记录为Base64发送到我的服务器
- 在服务器上,调用谷歌语音API的syncRecognize功能,传入我的基地64编码音频
我总是收到一个空的结果对象。
当我按照这个getting started tutorial虽然一切工作正常。
我在做什么错?
任何提示/想法将非常感激。
const Speech = require('@google-cloud/speech');
const SpeechV1beta1 = require('@google-cloud/speech/src/v1beta1')
module.exports = {
syncRecognize: function(base64Encoding) {
const speech = Speech();
const speechV1beta1 = SpeechV1beta1();
const client = speechV1beta1.speechClient();
const body = {
"config": {
"encoding":"LINEAR16",
"sampleRate":16000,
"languageCode":"en-US"
},
"audio": {
"content": base64Encoding
}
}
return client.syncRecognize(body)
.then((results) => {
console.log('results', results)
return {transcription: results[0]};
}).catch(function(error) {
return {error: error};
});;
}
}
答
从浏览器记录的数据可能不包含那些配置参数。
我遇到的另一个问题是,对于超过5秒的音频持续时间,超时启动并且到目前为止我还没有能够有效地更改API截止日期。这可能也是你的情况。
为了验证我的webapp音频的元数据我用ffmpeg:我会自动将文件保存到存储器中,脚本运行ffmpeg -i filename
检索采样率,编码,信道和持续时间的数目。
请注意,同步语音识别请求有audio lenght limits。如果超过它们,我建议您使用异步方法(或将音频文件拆分为子文件)。在前一种情况下,你可能需要转换音频编码(幸运的是ffmpeg也可以为你做:))。在后一种情况下,您可以使用SoX将音频分为静音和分开处理。
我从来没有尝试过在浏览器中这样做,所以我不确定。有什么方法可以将音频内容数据保存到文件中,以确保它可以播放(并且它是LINEAR16 16kHz)?如果你给它一个URI,相同的代码是否工作?如果是这样,似乎问题与音频“内容”。 – blambert