AVAudioPlayer是否能够在没有可听见的间隙的情况下循环播放大型音频文件?

时间:2012-12-03 15:28:03

标签: iphone ios ipad avfoundation avaudioplayer

我有长达10分钟的大型循环背景音乐文件。声音完美地循环,如果玩家没有延迟,你就不会注意到循环点的位置。

AVAudioPlayer可以播放它们,用户不会听到因延迟或其他循环问题导致的间隙吗?

3 个答案:

答案 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就没有了。但它也可能对你有用