我正在编写一个使用录制的样本播放音乐的Android应用程序(使用SoundPool)。我有一个播放器根据当前时间(realTimeElapsed)检查我必须播放哪些样本。玩家获得更新,我设置为1毫秒的计时器。大部分时间这个工作正常,但有时我有一些延迟约100毫秒。Android:精确播放音频的时机
我找不到增加定时器优先级的方法,是否有另一种方法来获得这些延迟?
我在同一时间使用openGL渲染场景,但是如果禁用所有绘图,我会得到相同的延迟。
感谢
编辑:
我TraceView分析它:音频线程(线程16)获取每毫秒执行。但在t = 2580时,有大约200毫秒的突破。线程在此期间未处于睡眠状态,但在方法SoundPool.play中并且被中断。每当我有这样的延迟,音频线程就会中断。没有办法阻止这些干扰吗?
我已经将GL线程(即中断音频线程)的优先级设置为THREAD_PRIORITY_LOWEST。
右键点击图片并选择“显示图像”或附近的其他物业,可得到全分辨率的图像。
200ms听起来很大。这可能是垃圾收集造成的吗?发生垃圾回收时会有一条消息被打印到logcat。只要确保它是来自您的流程的消息,而不是其他任何随机流程。 – JesusFreke 2012-04-15 03:51:13
此时没有GC正在运行,您会在TraceView中看到GC。在这200ms期间,OpenGL线程一直在运行(请右键单击图像并选择“显示图像”或其附近的某个图像以全分辨率查看图像) – osiris81 2012-04-15 13:41:37
如果我不想使用Soundpool,不会调用SoundPool的播放方法,我没有任何延迟。我将不得不为这个问题开一个新的线程 – osiris81 2012-04-15 21:27:22