使用GCD构建节拍器,但在屏幕锁定时声音播放不均匀

时间:2015-06-19 06:35:43

标签: ios avfoundation grand-central-dispatch

我正在使用GCD来发射一个定期播放嘀嗒声的循环。

我还使用AVAudioSession配置了AVAudioSessionCategoryPlayback并使用音频后台模式编辑了info.plist文件以启用后台执行。

这在应用程序或后台运行时效果很好。但是,当屏幕锁定时,声音播放非常不均匀。这听起来像迪克 - 迪克 - 迪克迪克 - 迪克 - 迪克

我在调试模式下运行,屏幕被锁定,日志按预期均匀输出。所以我猜这可能是音频问题。

我花了很多时间使用不同的音频引擎和库,但没有一个改善了这种情况。

让我自己的循环音频走的路吗?我知道AudioQueue可能会有所帮助,但不知道从哪里开始。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:1)

GCD不保证您进行音频计时所需的精确计时。如果你希望它对音乐家,尤其是鼓手有用,你需要将抖动降低到<20ms,理想情况下<10ms或<5ms。

AudioQueue或音频单元可能是要走的路(我建议AudioQueue)。您需要对声音流进行样本级访问,您可以精确地以22/44/48kHz分辨率写入样本,这是您需要的。如果您计算样本,那么只要CPU能够满足音频硬件的需求,您就可以保证在合适的时间发生滴答。

如果沿着这条路走下去,你需要快速了解样本,交错和缓冲区大小。