文字转语音(TTS)会延迟3秒才能朗读文字

时间:2018-12-12 07:56:28

标签: java android text-to-speech

我在我的android应用程序中使用TextToSpeak功能,并意识到在说出实际单词之前需要花费一些时间。

onCreate(){
 textToSpeech = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status != TextToSpeech.ERROR) {
                textToSpeech.setLanguage(Locale.UK);
            }
        }
    });

 textToSpeech.speak("Hello World", TextToSpeech.QUEUE_FLUSH, null, null);
 performAction();
}

performAction(){…}

您可以看到,在使用TTS .speak()方法之后,我立即调用了performAction方法,但是3秒的延迟会导致一些不准确。

如何立即说出单词立即触发performAction方法。

1 个答案:

答案 0 :(得分:0)

这可能不是最有效的方法,但是我有一个与此类似的问题,并使用处理程序来解决。

onCreate(){
  textToSpeech = new TextToSpeech(getApplicationContext(), new 
  TextToSpeech.OnInitListener() {
    @Override
    public void onInit(int status) {
        if (status != TextToSpeech.ERROR) {
            textToSpeech.setLanguage(Locale.UK);
        }
    }
  });

  textToSpeech.speak("Hello World", TextToSpeech.QUEUE_FLUSH, null, null);
  checkIfTTSIsSpeaking();
}

checkIfTTSIsSpeaking() {
    new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
      if(textToSpeech.isSpeaking()){
         performAction();
      }else{
         checkIfTTSIsSpeaking();
      }
     }
    },10);
}


performAction(){…}

TextToSpeech引擎具有方法isSpeaking(),该方法返回一个布尔值,无论是否说出该单词。

TextToSpeech reference