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