0

我的应用录制视频并使用TextToSpeech ->android.speech.tts.TextToSpeech。同时说()。

如果我在 1.5 ghz 的 4 处理器等高设备上运行,则可以。但是如果我在 2 个处理器中使用 1.1 ghz 设备 ui 线程会非常慢,冻结 2-6 秒。

我知道问题出在 TextToSpeech 中,因为如果我不使用它并录制视频,则 ui 线程在低端设备中可以非常流畅地工作。如果我使用 TextToSpeech + 录制视频 ui 线程不起作用并且语音冻结 1-2 段。

有什么方法可以提高 TextToSpeech.speak() 的性能?

4

2 回答 2

1

您同时使用文本转语音和视频录制?你对它的缓慢感到惊讶吗?这两者都占用了大量的 CPU 资源。有些事情只需要处理能力。尽量不要同时使用它们,你会得到更好的结果。

如果您需要同时使用它们,请先尝试使用 synthesizeToFile 将声音片段写入文件,然后在录制时播放声音片段。这样,您就不会在录制的同时尝试生成音素。

于 2015-12-17T21:34:09.643 回答
0

如果您在说“处理器”时指的是“核心”?似乎您正在执行应该在 3 个不同线程上运行的活动。

主线程应该永远是空闲的。尽量不要让它陷入困境......永远!

扩展 AsyncTask 类。AsyncTask 将允许您在不阻塞主线程的情况下做一些需要很长时间的事情。

由于这一切都在虚拟机上运行(准确地说是 Dalvik),我们必须假设线程也是虚拟的。这意味着如果您在两个内核上运行 3 个线程,虚拟机将决定哪些线程获得处理器周期,有时这意味着共享内核。

我想说,如果你只打算一次做两件繁重的事情,对于低端设备,你可以使用主线程来实现这个,用于视频,第二个线程用于TextToSpeech. 这并不理想,因为它可能会阻塞主线程。但由于 Video 是两者中更流畅的,因此它将是在 Main UI Thread 上运行的首选候选者。

理想情况下,您至少需要三个线程,而主 UI 线程主要是畅通的。您可以轮询两个线程的结果以检测完成情况。

如果您碰巧有 4 个内核,那么创建三个线程可能会比可用内核具有更多的分布式性能。

一些文档可以帮助您: Android Multithreading - Qualcomm 文章Android:AsyncTask

于 2015-12-17T21:49:56.270 回答