Google 音声検索では、startActivityForResult() を介して呼び出した瞬間から、ダイアログ ボックスが表示されて音声を受け取る準備ができるまで、大幅な遅延が発生します。
これにより、ユーザーは話す前に常に画面を見て、ダイアログ ボックスが表示されるのを待つ必要があります。
そこで、次のスニペットのように、RecognitionListener を実装し、onReadyForSpeech() で DTMF トーンを鳴らすことによって、ダイアログ ボックスの代わりに可聴信号を生成することを考えていました。
@Override
public void onReadyForSpeech(Bundle params) {
Log.d(LCTAG, "Called when the endpointer is ready for the user to start speaking.");
mToneGenerator.startTone(ToneGenerator.TONE_DTMF_1);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
Log.e(LCTAG, "InterruptedException while in Thread.sleep(50).");
e.printStackTrace();
} // SystemClock.sleep(50);
mToneGenerator.stopTone();
}
トーンは美しく聞こえますが...マイクにも「聞こえ」、音声認識サービスに到着し、常に認識エラーERROR_NO_MATCHが生成されます。
これを回避する方法はありますか?