当同时使用两种语言时,TextToSpeech队列的性能很差

时间:2015-01-15 21:28:52

标签: android performance text-to-speech

我需要在Android上使用TTS同时说两种语言:EN中的一个短语和DE中的另一个短语。为此,我提供了TextToSpeech.OnInitListener的两种不同实现。到目前为止一切都有效。然后我试着说出它们,辅助功能:

// wait for speaker availability
public boolean isSpeakingWait(tts) {

    int N = 50;
    int i = 0;
    while( tts.isSpeaking() && i < N ) {
        i--;
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    return i == 50;
}

并呼吁发言:

isSpeakWait(ttsEN);
ttsEN.speak(strEN, TextToSpeech.QUEUE_FLUSH, null);
isSpeakWait(ttsDE);
ttsDE.speak(strDE, TextToSpeech.QUEUE_FLUSH, null);

看起来在推入队列之后我可能会在声音之前等待几秒钟,而en和de调用都会发生这种情况。

有时我可以在EN和DE短语之间看到以下错误:

W/TextToSpeech﹕ isSpeaking failed: not bound to TTS engine
W/TextToSpeech﹕ speak failed: not bound to TTS engine

我想,问题在于改变TTS的语言(因为EN我发射到用en-us初始化的TTS,而DE被发射到用de-de初始化的TTS)。有关提高绩效的任何建议吗?

更新 我注意到推动德语单词和生成语音后的静音时间大约是8秒,而英语单词大约是2秒

1 个答案:

答案 0 :(得分:0)

回答太迟了,但是,是的,TTS就像一个单身人士.5- 8秒是laтguage加载。因此,如果在每次发言之前有1个带tts.setLanguage()的实例,那么tts的2个实例是相同的。