【问题标题】:Text-To-Speech Initialization Delay文字转语音初始化延迟
【发布时间】:2016-01-19 19:04:40
【问题描述】:

我正在尝试将文本转语音功能添加到我的应用程序中,并且在我从 Google Play 商店更新 TTS 之前它工作正常。

在 onCreate 方法中初始化 TTS 没有任何延迟。 更新后,此 TTS 需要 3-5 秒才能完成初始化。 基本上,文本转语音直到 3-5 秒后才准备好。

谁能告诉我我做错了什么?

private HashMap<String, String> TTS_ID = new HashMap<String, String>(); 

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    .....

    .....

    TextToSpeech_Initialize();
}

public void TextToSpeech_Initialize() {
    TTS_ID.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "UniqueID");     
    speech = new TextToSpeech(MainActivity.this, new TextToSpeech.OnInitListener() {
         @Override
         public void onInit(int status) {
            if(status == TextToSpeech.SUCCESS) {
               speech.setSpeechRate(SpeechRateValue);
               speech.speak(IntroSpeech, TextToSpeech.QUEUE_FLUSH, TTS_ID);
           }
         }
    });

}

非常感谢

【问题讨论】:

  • speak() 方法将在onInit() 方法完成后运行。因为,当您创建TextToSpeech 实例时,您的应用程序会尝试将系统中的tts 服务与TextToSpeech.OnInitListener 连接。所以我建议在onInit() 方法完全完成后调用speak() 方法。另外,在使用speak()选择语音之前,您应该调用setLanguage()
  • 我尝试运行 speak();在 onInit() 方法完成之后,就像你提到的那样,但它仍然给我同样的巨大延迟问题。谢谢
  • 嗯.. 目标 API 是什么?是否超过 API 21?
  • Android 4.3 和 Android 5.1.1。没关系,因为它与 Google TTS 更新有关。他们在更新中添加了更多语言,但由于增加了初始化延迟而搞砸了。与苹果相比,谷歌的表现令人沮丧!
  • 看来这是更新的问题。检查 TTS 设置中的“收听样本”,看看它是否也出现在那里。

标签: android text-to-speech speech-to-text google-text-to-speech


【解决方案1】:

确认!这是 Google 文本到语音引擎的问题,如果您尝试任何其他 tts,延迟就会消失,例如 Pico tts。

【讨论】:

    【解决方案2】:

    我之前偶然发现过这个问题,但现在我找到了一个合适的解决方案..

    您可以像这样在 onCreate() 中初始化 TextToSpeach:

    TextToSpeach textToSpeech = new TextToSpeech(this, this);
    

    但首先你需要implement TextToSpeech.OnInitListener,然后你需要重写onInit()方法:

    @Override
    public void onInit(int status) {
    
        if (status == TextToSpeech.SUCCESS) {
            int result = tts.setLanguage(Locale.US);
    
            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Toast.makeText(getApplicationContext(), "Language not supported", Toast.LENGTH_SHORT).show();
            } else {
                button.setEnabled(true);
            }
    
        } else {
            Toast.makeText(getApplicationContext(), "Init failed", Toast.LENGTH_SHORT).show();
        }
    }
    

    我还注意到,如果您没有在 onInit() 中设置语言,将会有延迟!!

    现在你可以编写说出文本的方法了:

    private void speakOut(final String detectedText){
            if(textToSpeech !=null){
                textToSpeech.stop(); //stop and say the new word
                textToSpeech.speak(detectedText ,TextToSpeech.QUEUE_FLUSH, null, null);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2019-02-18
      • 2020-05-10
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2017-11-11
      • 1970-01-01
      相关资源
      最近更新 更多