【问题标题】:Swift: addPeriodicTimeObserverForInterval for AVAudioPlayerSwift:为 AVAudioPlayer 添加PeriodicTimeObserverForInterval
【发布时间】:2015-07-18 12:53:37
【问题描述】:

我仍在尝试找到一种方法,让您可以在 AVAudioPlayer 音乐文件达到特定秒数时调用操作。

我知道我可以使用AVPlayer 类中的addPeriodicTimeObserverForInterval 方法,但是我不想使用AVPlayer,因为它不使用playing()stop()numberOfLoops 等方法因为我目前正在使用它们

是否有AVAudioPlayer 使用的替代方法?如果是这样,当AVAudioPlayer 进入 20 秒时我会怎么做。

【问题讨论】:

  • 您可以使用 Key-Value Observing 来观察 currentTime 属性的值,然后检查它是否在 20。

标签: ios xcode swift avaudioplayer avplayer


【解决方案1】:

我认为您的选择是切换到使用 AVPlayer,或者使用 NSTimer 来“伪造”它,正如上面 Ashish 所建议的那样,或者其他一些方法。

NSTimers 不准确超过约 1/50 秒(它们在主线程上运行,并且仅在您的应用访问运行循环时触发。)

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

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

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

【讨论】:

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