首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >语音识别意图在TTS结束之前开始。

语音识别意图在TTS结束之前开始。
EN

Stack Overflow用户
提问于 2014-07-25 13:23:17
回答 2查看 1.3K关注 0票数 2

我开发了一个Android应用程序,它使用tts (文本到语音)命令,然后使用语音识别意图听用户的声音回答。

显然,只有当tts结束说话时,语音识别的意图才会被抛出。有时,主要是当我从一个活动到另一个活动时,或者当我通过一个按钮激活这个过程时,语音识别器的意图在TTS结束之前就开始了!问题是,命令的相同文本随后被获取和分析,而不是用户的文字。代码中让语音识别器等待的部分是:

代码语言:javascript
复制
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();
}    

有谁有解决办法吗?这似乎很随机。有时等待,有时不等待。谢谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-25 15:45:50

由于几个原因,使用tts.isSpeaking()是无用的,您可以阅读以下内容以获得详细信息:

Problem with isSpeaking() when using Text-to-Speech on Android

整数,您需要设置OnUtteranceProgressListener

代码语言:javascript
复制
    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。

票数 3
EN

Stack Overflow用户

发布于 2017-05-24 06:30:17

这是样品。出于某些原因,您可能需要在主线程中启动speechRecognizer。

代码语言:javascript
复制
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) {

                }
            });
        }
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24956784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档