2017-02-26 23 views
2

私はしばらくの間、Google Speech APIに苦労してきました。ここでGoogle Speech API - base64でエンコードされた音声を認識

は私がやろうとしているものです:ブラウザで

  1. 録音オーディオ
  2. BASE64に記録を変換し、サーバ上で私のサーバー
  3. に送信、Googleの音声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

あなたがブラウザから記録しているものは、それらの設定パラメータではありません。

私が遭遇したもう1つの問題は、オーディオの持続時間が5秒を超えるとタイムアウトが発生し、これまでAPIの締め切りを効果的に変更できなかったことです。これもあなたのケースかもしれません。

ウェブアプリケーションでオーディオのメタデータを確認するには、ffmpegを使用します:ファイルに保存されたファイルを自動的に保存し、ffmpeg -i filenameをスクリプトで実行して、サンプラート、エンコード、チャンネル数、期間を取得します。

同期音声認識要求にはaudio lenght limitsがあることに注意してください。それを超える場合は、非同期メソッドを使用することをお勧めします(または、サブファイルでオーディオファイルを分割する)。前者の場合は、おそらくオーディオエンコーディングを変換する必要があります(幸運なことにffmpegもそれを行うことができます:))。後者の場合は、SoXを使用して、音声を無音で分割し、別々に処理することができます。