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 是不是能够在没有可听间隙的情况下循环播放大型音频文件?的主要内容,如果未能解决你的问题,请参考以下文章

技术人员创业的第一步分析(续,可听音频)

技术人员创业的第一步分析(续,可听音频)

技术人员创业的第一步分析(续,可听音频)

AVAudioPlayer 多重声音嘈杂

将音频样本转换为可听文件格式

在 iOS 6.0 中找不到 AVAudioPlayer