Swift:为 AVAudioPlayer 添加PeriodicTimeObserverForInterval
Posted
技术标签:
【中文标题】Swift:为 AVAudioPlayer 添加PeriodicTimeObserverForInterval【英文标题】:Swift: addPeriodicTimeObserverForInterval for AVAudioPlayer 【发布时间】:2015-07-18 12:53:37 【问题描述】:我仍在尝试找到一种方法,让您可以在 AVAudioPlayer
音乐文件达到特定秒数时调用操作。
我知道我可以使用AVPlayer
类中的addPeriodicTimeObserverForInterval
方法,但是我不想使用AVPlayer
,因为它不使用playing()
、stop()
、numberOfLoops
等方法因为我目前正在使用它们
是否有AVAudioPlayer
使用的替代方法?如果是这样,当AVAudioPlayer
进入 20 秒时我会怎么做。
【问题讨论】:
您可以使用 Key-Value Observing 来观察 currentTime 属性的值,然后检查它是否在 20。 【参考方案1】:我认为您的选择是切换到使用 AVPlayer,或者使用 NSTimer
来“伪造”它,正如上面 Ashish 所建议的那样,或者其他一些方法。
NSTimers 不准确超过约 1/50 秒(它们在主线程上运行,并且仅在您的应用访问运行循环时触发。)
您可以尝试注册 AVAudioPlayer
的 currentTime
属性的 KVO 通知,然后检测特定秒内的时间。
KVO 通知可能会占用大量 CPU,甚至可能导致音频播放卡顿,因为每次音频播放器更改 currentTime
属性时都会触发 KVO 通知,即使它是每 1/1000 个第二个。
如果您只需要在一秒钟内解决问题,并且不必非常精确,那么 NSTimer 就是您的最佳选择。
【讨论】:
有没有机会给我一个示例代码。抱歉,我是初学者,仍在尝试在 ios 中学习编程。我已经使用了上面的代码,但是当我运行它时,它会崩溃并产生这个控制台:[WSWSongChants.ComeOnYouWanderersViewController checkPlaybackTime]: KVO 代码编写起来很麻烦,而且执行起来相当昂贵。我不推荐它。正如 Ashish 建议的那样,最好使用 NSTimer。您的目标是什么,您对准确性的要求是什么?以上是关于Swift:为 AVAudioPlayer 添加PeriodicTimeObserverForInterval的主要内容,如果未能解决你的问题,请参考以下文章
向 mp3 AVAudioPlayer 添加进度条播放 swift
AVAudioPlayer Swift 3不播放声音[重复]