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