我开发了一个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();
}
有人有解决方案吗?这似乎很随机。有时它等待,有时不等。 谢谢大家!!
答案 0 :(得分:2)
由于多种原因,使用tts.isSpeaking()
是无用的,您可以阅读此内容以获取详细信息:
Problem with isSpeaking() when using Text-to-Speech on Android
Intead,您需要设置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
请注意,要使此侦听器正常工作,您需要在tts.speak调用中使用params设置TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID
。
答案 1 :(得分:1)
这是一个样本。出于某些原因,您可能需要在主线程中启动speechRecognizer。
declare @Salestable table(Customer_id int, Tax_percent numeric(5,2), Tax_amount numeric(5,2))
insert into @Salestable values( 100 , 5 , 2.50)
insert into @Salestable values( 100 , 14.5 , 6.75)
insert into @Salestable values( 101 , 5 , 1.25)
insert into @Salestable values( 102 , 5 , 2.00)
insert into @Salestable values( 101 , 14.5 , 9.50)
select Tax_percent,sum(Tax_amount) from @Salestable group by Tax_percent