5

Google サーバーで音声を認識するために、この質問に対するStephan回答で提案されているように、SpeechRecognizer クラスを RecognitionListener と組み合わせて使用​​します。さらに、次のように RecognitionListener から onBufferReceived() コールバックを使用して、認識されているオーディオ信号をキャプチャしようとします。

byte[] sig = new byte[500000] ;
int sigPos = 0 ;
...
public void onBufferReceived(byte[] buffer) {
  System.arraycopy(buffer, 0, sig, sigPos, buffer.length) ;
  sigPos += buffer.length ;
}
...

SpeechRecognizer が Google サーバーへの接続に失敗した場合、音声のチャンクが上記のsig配列にコピーされず、HTTP 接続タイムアウト例外がスローされた場合を除いて、これは正常に機能しているようです。SpeechRecognizer は最終的に Google サーバーに接続し、認識結果は完全な音声信号が受信されたことを示します。配列だけにsigいくつかのオーディオ チャンクがありません。

誰も同じ問題を経験していますか? 解決のヒントはありますか?ありがとうございました!

4

3 に答える 3

1

これは、認識サービスの動作の不一致である可能性があり、おそらく使用している Android バージョンのバグである可能性があると私は言いがちです。ただし、ドキュメントには、このメソッドが呼び出されることは保証されていないため、仕様に適合すると記載されています。これまでに気づいたことは次のとおりです(Android 2.3.4の場合):記録中にバイトを取得しますが、たとえば、ある場合、しばらくしてSocketTimeoutからデータをサーバーに再送信しようとしますがonBufferReceived、同じことを再度呼び出すことはありませんデータ。テストに使用されたコードは、投稿でリンクしたものと同じでした。

メソッドで受信した音声に一部のチャンクが欠けていると思いますが、それはなぜですか? いくつかのチャンクが欠落している場合でも、それらのチャンクが欠落しているにもかかわらず認識が機能した可能性があります。

于 2011-05-10T06:56:53.697 に答える
1

最新バージョンでは onBufferReceieved は機能しません。代わりに、音声認識インテントからオーディオの録音/保存を確認できます。

于 2016-02-03T15:26:38.973 に答える