【发布时间】:2016-07-01 00:43:44
【问题描述】:
多年来(从字面上看),我的应用程序一直因文本到语音引擎性能不佳而陷入困境,特别是调用时的初始化时间:
tts = new TextToSpeech(context, myOnInitListener);
上述情况可能会导致 UI 滞后,如果您在 SO 上搜索“文本到语音初始化缓慢”,您会发现很多帖子。嵌入的高品质 IVONA 声音曾经是最糟糕的罪魁祸首,但 Google TTS engine 现在已获得大奖。
他们最近的 APK 更新导致初始化时出现严重滞后 - 无需代码来测试这一点,您可以转到 Android 文本到语音设置并尝试在可用引擎之间切换,同时按“收听示例”,滞后表现得“很好”。
为了尝试解决这个问题,我实现了以下功能:
private volatile TextToSpeech tts;
AsyncTask.execute(new Runnable() {
@Override
public void run() {
tts = new TextToSpeech(context, volatileOnInitListener);
}
});
这已经完全解决了初始化的滞后问题,但我担心这可能会产生我没有考虑过的副作用?谁能想到?
我也很困惑,因为我相信TextToSpeech Constructor 是异步的,因此将这个构造函数移动到工作线程应该没有区别吗?如果这个实现是前进的方向,那么谷歌为什么不在他们的TextToSpeechSettings 中实现它呢?
希望有人能澄清以上内容。提前致谢。
编辑 - 当我说“构造函数是异步的”时,我实际上指的是它启动的引擎初始化过程,以及对 onInit 的最终调用
【问题讨论】:
-
我认为你是对的。
标签: java android text-to-speech google-text-to-speech