我的openGL音频可视化工具落后于音乐时出现问题。我最近改为多线程。三星S3上的一切都很棒,但在HTC Evo上,音频可视化器落后于音乐。
管道中的四个线程,从音频输入到可视化,AudioIn - > AudioProc - > UI - > openGL的。我认为问题可能出在openGL上,但我在向requestRender()方法添加新的msg之前就开始清除消息。没有帮助。
我认为问题出在AudioIn到AudioProc之间,即AudioProc占用太长时间并且建立了que。我一直在为GC_CONCURRENT~43ms获取Logcats。在60Hz时约为2或3帧。 DDMS中的Allocation跟踪器建议在AudioProc线程上进行许多分配。所以我删除了分配并用我的DSP类中的私有float []对象替换它们。
但随后Allocations开始显示对“java reflect array”的一些调用,并且GC_CONCURRENT调用得到了更长的时间。我想可能是因为我在我的UI线程中声明了DSP类ref对象,我在我的AudioProc线程中使用它,所以我改变了我的代码来调用我的AudioProc线程中的assign mDSP,但是现在logcat显示了“JIT”取消所有“调用AudioProc线程和GC_CONCURRENT时间为700 + ms。
显然我遗漏了一些基本的东西,请推测。我可以发布代码。