2017-02-26 236 views
2

我一直在努力与谷歌语音API一段时间,并会爱一些建议。谷歌语音API - 识别base64编码音频

这里就是我想要做的事:

  1. 录制音频的浏览器
  2. 转换的记录为Base64发送到我的服务器
  3. 在服务器上,调用谷歌语音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}; 
     });; 

    } 
} 
+1

我从来没有尝试过在浏览器中这样做,所以我不确定。有什么方法可以将音频内容数据保存到文件中,以确保它可以播放(并且它是LINEAR16 16kHz)?如果你给它一个URI,相同的代码是否工作?如果是这样,似乎问题与音频“内容”。 – blambert

回答

2

从浏览器记录的数据可能不包含那些配置参数。

我遇到的另一个问题是,对于超过5秒的音频持续时间,超时启动并且到目前为止我还没有能够有效地更改API截止日期。这可能也是你的情况。

为了验证我的webapp音频的元数据我用ffmpeg:我会自动将文件保存到存储器中,脚本运行ffmpeg -i filename检索采样率,编码,信道和持续时间的数目。

请注意,同步语音识别请求有audio lenght limits。如果超过它们,我建议您使用异步方法(或将音频文件拆分为子文件)。在前一种情况下,你可能需要转换音频编码(幸运的是ffmpeg也可以为你做:))。在后一种情况下,您可以使用SoX将音频分为静音和分开处理。