【发布时间】:2021-04-04 15:54:09
【问题描述】:
我正在创建和播放一个 AVAudioPlayer,如下所示:
playerOne = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: path))
playerOne.numberOfLoops = -1
playerOne.prepareToPlay()
我正在播放 AAC 文件。我正在使用
playerOne.play(atTime: startTime)
安排未来的播放并同步多个 AVAudioPlayer。
一切正常,但我的问题是当声音循环不同步时,这是由于循环不是无缝的。
这里发生的情况是,由于 aac 解码器,我相信解码后的音频数据中会添加一个非常小的静音,这会导致音频播放器之间的同步丢失。我希望这个循环是完美的,从头到尾循环之间的间隙为 0。
如何使用 AVAudioPlayer 实现无缝循环播放?
【问题讨论】:
-
完全正确!我发现了同样的事情,尽管我的理解是启动/剩余帧应该由 AVAudioPlayer 处理。非常令人沮丧。你找到解决方法了吗?只是要注意;在我的情况下,这不是同步的事情,而只是我听到了循环上的间隙——基本上就像没有处理启动/剩余帧一样。
-
@jbm 我尝试执行以下操作:有两个玩家,第二个玩家在第一个玩家停止时开始玩。然后这不起作用,因为显然 Apple API 从来没有给出 %100 准确的持续时间......我对此感到非常失望。我无法解决我的问题。 AudioKit 进行无缝循环,您可以检查该库,但它也有其局限性,例如我无法设置它的缓冲区大小并且整个文件被加载到 ram 中导致巨大的内存分配和内存浪费......
-
其实我用的是AudioKit,但是他们的AKPlayer只是封装了AVAudioPlayer。我想我可以在 AudioKit 中寻找替代品...
-
@jbm 与 AudioKit 无缝循环,在播放播放器之前,您必须具有以下行
player.buffer = true。我使用了 AudioKit 并对其进行了测试,它可以使循环真正无缝,0 间隙和循环 -
我正在使用 v4,其中相同的功能是“.buffer = .always”,但显然它实际上不起作用。
标签: ios avaudioplayer