AVAudioPlayer 是不是能够在没有可听间隙的情况下循环播放大型音频文件?
Posted
技术标签:
【中文标题】AVAudioPlayer 是不是能够在没有可听间隙的情况下循环播放大型音频文件?【英文标题】:Is AVAudioPlayer able to loop large audio files without an audible gap?AVAudioPlayer 是否能够在没有可听间隙的情况下循环播放大型音频文件? 【发布时间】:2012-12-03 15:28:02 【问题描述】:我有长达 10 分钟的大型循环背景音乐文件。声音循环完美,如果播放器没有引入延迟,您将不会注意到循环点在哪里。
AVAudioPlayer 可以播放它们,而不会让用户听到由延迟或其他循环问题引起的间隙吗?
【问题讨论】:
【参考方案1】:您可能会听到延迟,因为您的音乐已被压缩(例如 mp3)。 AVAudioPlayer 必须在 mp3 流式传输时对其进行解码。如果你有相同的未压缩格式的音乐,它会占用更多的磁盘空间,但会无缝循环。
【讨论】:
【参考方案2】:只要您在最后不停止/启动它并将numberOfLoops
设置为负整数,它应该可以工作。
【讨论】:
【参考方案3】:我在尝试创建无缝循环时遇到了问题。我尝试使用 numberOfLoops
属性,但没有成功。我尝试切换到未压缩的音频文件,但没有成功。我什至尝试切换到AVAudioQueuePlayer
,与同一资产的多个实例一起排队,但没有成功。最后,我通过创建AVAudioPlayer
(player1 和 player2)的两个实例并在它们之间切换来解决了这个问题。我开始播放 player1 并使用 player2 的 prepareToPlay
方法和 play(atTime time:)
方法将 TimeInterval 设置为 player1.deviceCurrentTime - player1.currentTime + player1.duration
。
然后我使用委托方法audioPlayerDidFinishPlaying
准备 player1 在 player2 完成后重新开始播放。老实说,我不知道为什么这种方法有效,而简单地将 numberOfLoops
设置为 -1 并没有。但它也可能对你有用
【讨论】:
以上是关于AVAudioPlayer 是不是能够在没有可听间隙的情况下循环播放大型音频文件?的主要内容,如果未能解决你的问题,请参考以下文章