我有长达 10 分钟的大型循环背景音乐文件。声音循环完美,如果播放器没有引入延迟,您将不会注意到循环点在哪里。
AVAudioPlayer 可以播放它们,而用户不会听到由延迟或其他循环问题引起的间隙吗?
我有长达 10 分钟的大型循环背景音乐文件。声音循环完美,如果播放器没有引入延迟,您将不会注意到循环点在哪里。
AVAudioPlayer 可以播放它们,而用户不会听到由延迟或其他循环问题引起的间隙吗?
您可能会听到延迟,因为您的音乐被压缩(例如 mp3)。AVAudioPlayer 必须在 mp3 流式传输时对其进行解码。如果你有相同的未压缩格式的音乐,它会占用更多的磁盘空间,但会无缝循环。
只要您最后不停止/启动它并且设置numberOfLoops
为负整数,它就可以工作。
我在尝试创建无缝循环时遇到了问题。我尝试使用该numberOfLoops
属性,但没有成功。我尝试切换到未压缩的音频文件,但没有成功。我什至尝试切换到AVAudioQueuePlayer
, 与同一资产的多个实例一起排队,但没有成功。最后,我通过创建AVAudioPlayer
(player1 & player2) 的两个实例并在它们之间切换来解决问题。我开始播放 player1 并使用 player2 的prepareToPlay
方法,以及play(atTime time:)
将 TimeInterval 设置为player1.deviceCurrentTime - player1.currentTime + player1.duration
. 然后我使用委托方法audioPlayerDidFinishPlaying
准备 player1 在 player2 完成后重新开始播放。老实说,我不知道为什么这种方法有效并且简单地设置numberOfLoops
为 -1 没有。但它也可能对你有用