是否有替代使用 NSTimer 来显示音频文件的剩余时间和 AVAudioPlayer?

Posted

技术标签:

【中文标题】是否有替代使用 NSTimer 来显示音频文件的剩余时间和 AVAudioPlayer?【英文标题】:Is there an alternative to using an NSTimer to display remaining time of audio file with AVAudioPlayer? 【发布时间】:2013-07-15 12:34:23 【问题描述】:

我用AVAudioPlayer 播放音乐并想显示剩余时间。 suggest an NSTimer that fires every second 似乎很多,但恐怕这效率低下且容易出错。由于NSTimer 不是非常精确的计时(我听说过),可能是计时器在音频的同一秒内触发两次,然后倒计时跳过一秒。这也是一个拉模型。

有没有更精明的方式,让AVAudioPlayer 每过一秒就会叫我倒计时?

【问题讨论】:

NSTimeInterval 剩余 = audioPlayer.duration - audioPlayer.currentTime;我认为这会给你剩余的时间,但是每秒调用一个方法最好使用计时器。 AVAudioPlayer 无法帮助您。 以 1 秒为间隔的重复计时器可以正常工作。 【参考方案1】:

虽然 NSTimer 是半不准确的,但您仍然可以让它每隔一秒左右调用一次,并从歌曲的 currentTime 属性中获取信息,并将其与 duration 属性进行比较。从中您可以计算剩余时间等。

AVAudioPlayer Documentation

【讨论】:

【参考方案2】:

在播放音频文件时,没有可用的回调函数可帮助您更新时间显示。 NSTimer 方法是应该怎么做的。如果您担心由于 NSTimer 触发精度而导致显示不准确,只需减少计时器的更新间隔即可。在您的实施中保持工作负载轻,并将间隔设置为 500 毫秒,或者可能是 250 毫秒...

【讨论】:

以上是关于是否有替代使用 NSTimer 来显示音频文件的剩余时间和 AVAudioPlayer?的主要内容,如果未能解决你的问题,请参考以下文章

ios nstimer 在后台运行以检查警报时间是不是等于当前时间并播放音频

NSTimer 可靠的替代品

我们如何让 NSTimer 在 iOS 中为我​​的音频播放器在后台运行

在 NSTimer 中播放 AVAudioPlayer,没有内存泄漏?

AVAudioPlayer 本地音频设置番外篇:后台定时修改音频音量NSTimer

使用 NSTimer 制作闹钟