播放连续短暂的声音而不会滞后UI动画

时间:2017-05-12 04:03:10

标签: ios swift3 avaudioplayer

所以这就是故事。

我有一个计时器,当我点击一个按钮时,timer.setEventHandler呈现动画(类似于每125毫秒在UI中添加10个圆圈)。动画运行顺利,到目前为止一直很好。

现在我想在每次添加圆圈时添加声音(声音像哔哔声一样播放,但是从mp3文件播放)。我尝试了两种方法:

  1. AudioServicesPlaySystemSound

    动画很流畅,但声音播放不均匀。至少声音播放并没有落后于用户界面。

  2. 使用AVAudioPlay

    我在单例类中准备了AVAudioPlay实例,并且每次动画逻辑在DispatchedQueue中调用play()以确保声音在单独的线程中播放。第一次按下按钮时,动画会滞后。但是,当动画完成后我很快(在2秒内)再次按下按钮时,动画和声音将完美播放。但是,如果我等了很长时间,比如播放最后一个声音后的10秒,那么动画就会滞后,声音也会爆发。

  3. 我想知道iOS(我在iPad Air 2上运行iOS 10)是否真的让AVAudioPlay实例在未处于活动状态时处于睡眠状态。除非我在播放最后一个声音后的短时间(2秒)内按下按钮,否则AVAudioPlay线程将一直处于活动状态。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我明白了。

使用计时器每隔1秒以0伏的速度播放声音,以保持音频会话的活动状态。这听起来很愚蠢,但它就像一个魅力!