我开发了一个Android应用程序,它使用tts (文本到语音)命令,然后使用语音识别意图听用户的声音回答。
显然,只有当tts结束说话时,语音识别的意图才会被抛出。有时,主要是当我从一个活动到另一个活动时,或者当我通过一个按钮激活这个过程时,语音识别器的意图在TTS结束之前就开始了!问题是,命令的相同文本随后被获取和分析,而不是用户的文字。代码中让语音识别器等待的部分是:
while(tts.isSpeaking()){
//DOING NOTHING
}
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
try {
startActivityForResult(intent, RESULT_SPEECH);
} catch (ActivityNotFoundException a) {
Toast t = Toast.makeText(getApplicationContext(),"Opps! Your device doesn't support Speech to Text", Toast.LENGTH_SHORT);
t.show();
} 有谁有解决办法吗?这似乎很随机。有时等待,有时不等待。谢谢大家!
发布于 2014-07-25 15:45:50
由于几个原因,使用tts.isSpeaking()是无用的,您可以阅读以下内容以获得详细信息:
Problem with isSpeaking() when using Text-to-Speech on Android
整数,您需要设置OnUtteranceProgressListener
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
// Nothing
}
@Override
public void onError(String utteranceId) {
// Nothing
}
@Override
public void onDone(String utteranceId) {
// Restart recognizer here请注意,要使此侦听器正常工作,需要在TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID调用中使用params设置tts.speak。
发布于 2017-05-24 06:30:17
这是样品。出于某些原因,您可能需要在主线程中启动speechRecognizer。
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
}
@Override
public void onDone(String utteranceId) {
if (utteranceId.contains(<utterance_id_you_set>)){
Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
//start your recognizer here
}
};
mainHandler.post(myRunnable);
}
}
@Override
public void onError(String utteranceId) {
}
});
}
});https://stackoverflow.com/questions/24956784
复制相似问题