0

我正在开发一个仅限 iOS7 的应用程序,该应用程序需要显示带有滴答声的时钟。我使用了 1s 的 NSTimer,我使用 AVAudioPlayer 每秒播放滴答声。

不幸的是,时间安排有些偏差。我测量到计时器的关闭时间在 2 到 22 千秒之间,你不会认为这很重要,但滞后会造成咬指甲的紧张感……有点像心脏颤动 :-)

我环顾四周,但听起来使用音频队列服务是唯一的方法......而且我真的不想再次深入研究该特定框架的深度。

我的问题:有没有其他方法可以在 iOS 7 中获得精确安排的声音事件,如果失败了,是否有一个像样的音频队列服务包装框架?或者更好的是有没有更精确地调度 NSTimers 的方法?

4

1 回答 1

0

使用NSTimerlibdispatch或 产生一个在滴答持续时间内休眠的线程依赖于及时调度底层线程。内核对此不提供任何保证,您观察到时序抖动也就不足为奇了;您观察到的延迟看起来很合理。

NSTimer在主线程上运行可能会执行最差的这些,因为您还要与通过它传递的其他事件竞争。

我认为您在这里的选择是使用音频队列服务、使用 AVAudioPlayer 安排事件的实时线程,或者自己将音频渲染到一个remoteIO单元。

我认为 AVPlayer 也不提供任何关于时间的特定保证。

于 2013-10-18T13:25:36.930 回答