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 秒(它们在主线程上运行,并且仅在您的应用访问运行循环时触发。)

您可以尝试注册 AVAudioPlayercurrentTime 属性的 KVO 通知,然后检测特定秒内的时间。

KVO 通知可能会占用大量 CPU,甚至可能导致音频播放卡顿,因为每次音频播放器更改 currentTime 属性时都会触发 KVO 通知,即使它是每 1/1000 个第二个。

如果您只需要在一秒钟内解决问题,并且不必非常精确,那么 NSTimer 就是您的最佳选择。

【讨论】:

有没有机会给我一个示例代码。抱歉,我是初学者,仍在尝试在 ios 中学习编程。我已经使用了上面的代码,但是当我运行它时,它会崩溃并产生这个控制台:[WSWSongChants.ComeOnYouWanderersViewController checkPlaybackTime]: KVO 代码编写起来很麻烦,而且执行起来相当昂贵。我不推荐它。正如 Ashish 建议的那样,最好使用 NSTimer。您的目标是什么,您对准确性的要求是什么?

以上是关于Swift:为 AVAudioPlayer 添加PeriodicTimeObserverForInterval的主要内容,如果未能解决你的问题,请参考以下文章

向 mp3 AVAudioPlayer 添加进度条播放 swift

swift AVAudioPlayer播放音频时声音太小

AVAudioPlayer Swift 3不播放声音[重复]

如何在底部面板中存储当前音频信息(AVAudioPlayer,Swift)[重复]

swift 3:如何添加 UISlider?

Swift 3 多个 AVAudioPlayer