我正在创建一个节拍器作为更大应用程序的一部分,并且我有一些非常短的 wav 文件可用作单独的声音。我想使用 AVAudioEngine 因为 NSTimer 存在严重的延迟问题,而且 Core Audio 在 Swift 中实现似乎相当令人生畏。我正在尝试以下操作,但我目前无法实现前 3 个步骤,我想知道是否有更好的方法。
代码大纲:
- 根据节拍器的当前设置创建一个文件 URL 数组(每小节的节拍数和每节拍的细分;文件 A 代表节拍,文件 B 代表细分)
- 根据文件的速度和长度,以编程方式创建具有适当数量的静音帧的 wav 文件,并将其插入到每个声音之间的数组中
- 将这些文件读入单个 AudioBuffer 或 AudioBufferList
audioPlayer.scheduleBuffer(buffer, atTime:nil, options:.Loops, completionHandler:nil)
到目前为止,我已经能够播放单个声音文件的循环缓冲区(步骤 4),但我无法从文件数组构造缓冲区或以编程方式创建静音,也没有在 StackOverflow 上找到任何答案解决这个问题。所以我猜这不是最好的方法。
我的问题是:是否可以使用 AVAudioEngine 安排一系列低延迟的声音,然后循环该序列?如果不是,在 Swift 中编码时,哪种框架/方法最适合调度声音?