Ios 如何管理多个AVAudioPCMBuffer进行播放?

Ios 如何管理多个AVAudioPCMBuffer进行播放?,ios,iphone,audio,Ios,Iphone,Audio,我正在动态创建声音文件(例如循环节奏),因此需要使用AVAudioPlayerNode 然而,我有一些问题 起初,我认为我可以只使用一个缓冲区,安排播放,然后再次写入并安排播放等等,ios会处理它。我认为,当您计划缓冲区时,ios会复制缓冲区中的内容,这意味着您可以在计划缓冲区后将其重写到缓冲区。然而,我很清楚,ios只是在播放缓冲区时播放缓冲区中的任何内容,因此如果您同时写入了缓冲区,它将播放新内容 所以现在我正在考虑为每秒钟左右的声音创建一个新的缓冲区,并安排每个新的缓冲区。但我很担心,因为

我正在动态创建声音文件(例如循环节奏),因此需要使用
AVAudioPlayerNode

然而,我有一些问题

起初,我认为我可以只使用一个缓冲区,安排播放,然后再次写入并安排播放等等,ios会处理它。我认为,当您计划缓冲区时,ios会复制缓冲区中的内容,这意味着您可以在计划缓冲区后将其重写到缓冲区。然而,我很清楚,ios只是在播放缓冲区时播放缓冲区中的任何内容,因此如果您同时写入了缓冲区,它将播放新内容

所以现在我正在考虑为每秒钟左右的声音创建一个新的缓冲区,并安排每个新的缓冲区。但我很担心,因为我认为我的代码会运行得非常快,并安排数百个缓冲区,因为没有任何东西会阻塞。是否有任何类型的阻塞播放器或类似的东西,或者一些阻塞的最佳实践,以便一个接一个地平滑地调度多个缓冲区,但只提前一点创建缓冲区,而不是创建数百个缓冲区

非常感谢

编辑:我怀疑我最终会创建3个缓冲区-一个是当前正在播放的缓冲区,一个是正在写入或已写入并计划的缓冲区,另一个是准备写入的缓冲区。然后,我将让segmentCompletion处理程序触发第三个缓冲区的写入和调度。(我不认为我可以使用两个缓冲区,因为当segmentCompletion处理程序启动时,它已经停止播放,现在安排另一个缓冲区已经太晚了。但是三个缓冲区应该可以了)