问题描述
我正在使用AVAudioEngine在不同时间(例如GarageBand)同时播放(混合)多个节点。 到目前为止,我设法使用此代码在正确的时间播放了各种文件:
dispatchQueue.global(qos: .background).async {
AudioManager.instance.audioEngine.attach(AudioManager.instance.mixer)
AudioManager.instance.audioEngine.connect(AudioManager.instance.mixer,to: AudioManager.instance.audioEngine.outputNode,format: nil)
// !important - start the engine *before* setting up the player nodes
try! AudioManager.instance.audioEngine.start()
for audioFile in data {
// Create and attach the audioPlayer node for this file
let audioPlayer = AVAudioPlayerNode()
AudioManager.instance.audioEngine.attach(audioPlayer)
AudioManager.instance.nodes.append(audioPlayer)
// Notice the output is the mixer in this case
AudioManager.instance.audioEngine.connect(audioPlayer,to: AudioManager.instance.mixer,format: nil)
let fileUrl = audioFile.audio.fileUrl
if let file : AVAudioFile = try? AVAudioFile.init(forReading: fileUrl) {
let time = audioFile.start > 0 ? AudioManager.instance.secondsToAVAudioTime(hostTime: mach_absolute_time(),time: Double(audioFile.start / CGFloat.secondsToPoints)) : nil
audioPlayer.scheduleFile(file,at: time,completionHandler: nil)
audioPlayer.play(at: time)
}
}
}
基本上,我的数据对象包含一个结构,该结构具有对音频文件URL的引用以及应从其开始的startPosition。
那很好。 现在,我想将所有这些曲目混合导出到一个文件中,并将其保存到用户的文档目录中。
我该如何实现?
感谢您的帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)