【问题标题】:TextToSpeech API文本转语音 API
【发布时间】:2018-03-29 22:33:24
【问题描述】:

在 Android TextToSpeech 中,我们怎么知道语音已经完成。我想在演讲结束后更改图标。我在 Button Onclick Listener 中声明了 tts.speak()。我使用线程后延迟处理程序在一段时间后更改图标。但是阅读的文字在不同的时间会有所不同。它没有成功。 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();
                }

【问题讨论】:

  • 你试过 setOnUtteranceProgressListener 了吗?
  • 我尝试使用 setOnUtterenceProgressListener。但它没有成功,我在 tts.speak() 旁边声明了以下内容: tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() { @Override public void onUtteranceCompleted(String utteranceId) { CheckThemeStop(); } })

标签: android text-to-speech


【解决方案1】:

您可以注册UtteranceProgressListener 以获取 tts 开始和结束时间以及错误处理。

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

        }

        @Override
        public void onDone(String s) {

        }

        @Override
        public void onError(String s) {

        }
      });

【讨论】:

  • 我也尝试过在 onStart() 中声明 speak() 并在 OnDone() 中更改图标。但他们都没有工作
  • 请放置日志并调试并检查它们是否被调用?或者把TTS的整个代码。
  • @ReyanshMishra 我签入了调试器。它没有进入 onStart(),onDone() 内部。我也尝试使用 setOnUtterenceCompletedListener()。这也行不通。
  • @RagavendraM 你能听到声音吗?
  • @kimkevin 当我在 onStart() 中声明时我没有听到。
【解决方案2】:

如果我们声明一个具有唯一字符串 ID 的 hasmap 参数,并将该 id 传递给比较 utterence id(如果匹配),则执行您在 onUtterenceCompletedListener() 中声明的内容。 下面是代码sn-p。

                    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();
                            }
                        }
                    });

【讨论】:

    猜你喜欢
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2023-03-03
    • 2014-07-02
    • 1970-01-01
    相关资源
    最近更新 更多