bra*_*all 8 java android text-to-speech google-text-to-speech
多年来(从字面上看),我的应用程序遭遇了性能不佳的文本到语音引擎的困境,特别是调用时的初始化时间:
tts = new TextToSpeech(context, myOnInitListener);
Run Code Online (Sandbox Code Playgroud)
以上可能导致UI滞后,如果您在SO上搜索"文本到语音初始化缓慢",您会发现很多帖子.嵌入式高品质IVONA声音曾经是最糟糕的罪魁祸首,但Google TTS引擎现已获此殊荣.
他们最近的APK更新导致初始化时出现严重滞后 - 无需测试此代码,您可以转到Android文本到语音设置并尝试在可用引擎之间切换,同时按"收听样本",显示延迟很好".
为了尝试解决这个问题,我实施了以下内容:
private volatile TextToSpeech tts;
AsyncTask.execute(new Runnable() {
@Override
public void run() {
tts = new TextToSpeech(context, volatileOnInitListener);
}
});
Run Code Online (Sandbox Code Playgroud)
这完全解决了初始化的滞后问题,但我担心这可能会产生副作用,我没有考虑过?任何人都可以想到吗?
我也很困惑,因为我相信TextToSpeech构造函数是异步的,因此将此构造函数移动到工作线程应该没有区别?如果这种实现是前进的方向,那么Google为什么不在TextToSpeechSettings中实现它呢?
希望有人能澄清以上内容.提前致谢.
编辑 - 当我说"构造函数是异步的"时,我真的指的是它启动的引擎初始化过程,以及最终调用onInit
F43*_*d1r -1
我曾相信 TextToSpeech 构造函数是异步的
这只是部分正确。许多初始化是同步执行的。这是来源
如果这种实现是前进的方向,那么 Google 为什么不在他们的 TextToSpeechSettings 中实现它呢?
谷歌似乎很少检查他们的代码在中低端设备上的运行情况,我想在高端设备上不会出现延迟。(发生这种情况的另一个例子可以在当前的 YouTube 应用程序中看到,我个人可以确认中型设备上有延迟,而高端设备上没有延迟。)这纯粹是猜测,因为我不隶属于谷歌。
我担心这可能会有我没有考虑到的副作用?有人能想到吗?
唯一(明显)的副作用是您无法同步使用 tts 引擎,而必须等待异步任务完成。但无论如何,情况已经如此了。您要做的唯一一件事就是在 UI 线程之外执行一些代码,这些代码不希望在 UI 线程上运行。这永远不应该是一个问题。即使出现问题,您也只能通过在应用程序中测试来发现它。
一般来说,你可以走了。
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |