TextToSpeech API

时间:2017-10-18 05:52:36

标签: android text-to-speech

在Android TextToSpeech中,我们怎么知道Speech已经完成。我想在演讲结束后改变图标。我在Button Onclick Listener中声明了tts.speak()。我使用线程postdelayed处理程序一段时间后更改图标。但是阅读的文字在不同的时间有所不同。它没有成功。 CheckThemestart(),ChangeThemeStop()是更改图标的功能。

我在OnCreate()中声明了以下内容:

            tts = new TextToSpeech(getContext(), new 
                         TextToSpeech.OnInitListener() {
           @Override
           public void onInit(int status) {
            if (status != TextToSpeech.ERROR) {
                tts.setLanguage(Locale.UK);
            tts.speak("",TextToSpeech.QUEUE_FLUSH,null);
            }

Button-onClickListener:

 if (!tts.isSpeaking()) {
                    CheckThemeStart();
                    tts.speak(plainText, TextToSpeech.QUEUE_FLUSH, null);

                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                             //change icon after spoken
                            CheckThemeStop();

                        }
                    }, 15000);

                } else {
                    CheckThemeStop();
                    tts.stop();
                }

2 个答案:

答案 0 :(得分:1)

您可以注册UtteranceProgressListener以查看开始和结束时间以及错误处理。

tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
        @Override
        public void onStart(String s) {

        }

        @Override
        public void onDone(String s) {

        }

        @Override
        public void onError(String s) {

        }
      });

答案 1 :(得分:1)

如果我们声明一个带有唯一字符串ID的hasmap参数并传递该id来比较utterence id,如果匹配则执行你在onUtterenceCompletedListener()中声明的内容。 以下是代码段。

                    HashMap<String,String> params=new HashMap<String, String>();
                    params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"SpeakID");
                    tts.speak(plainText, TextToSpeech.QUEUE_FLUSH,params);
                    tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() {
                        @Override
                        public void onUtteranceCompleted(String utteranceId) {
                            if(utteranceId.equals("SpeakID"))
                            {
                                    CheckThemeStop();
                            }
                        }
                    });