将AVAudioEngine中的混合音轨保存到磁盘上的文件中

问题描述

我正在使用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 (将#修改为@)