语音识别意图在TTS结束讲话之前开始

时间:2014-07-25 13:23:18

标签: android text-to-speech voice-recognition speech

我开发了一个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();
}    

有人有解决方案吗?这似乎很随机。有时它等待,有时不等。 谢谢大家!!

2 个答案:

答案 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