使用AVAudioEngine将AVAudioInputNode连接到AVAudioUnitEffect

我想通过audio单元效果( AVAudioUnitEffect )处理来自设备内置麦克风( AVAudioInputNode )的audio。 对于我的例子,我正在使用AVAudioUnitReverb 。 连接AVAudioUnitReverb导致应用程序崩溃。

 import UIKit import AVFoundation class ViewController: UIViewController { let audioEngine = AVAudioEngine() let unitReverb = AVAudioUnitReverb() var inputNode: AVAudioInputNode! override func viewDidLoad() { super.viewDidLoad() inputNode = audioEngine.inputNode audioEngine.attachNode(unitReverb) let inputFormat = inputNode.inputFormatForBus(0) audioEngine.connect(inputNode, to: unitReverb, format: inputFormat) // This line is crashing the application! // With this error "AVAudioNode.mm:521: AUSetFormat: error -10868" audioEngine.connect(unitReverb, to: audioEngine.outputNode, format: inputFormat) audioEngine.startAndReturnError(nil) } } 

如果我绕过混响并将inputNode直接连接到audioEngine.outputNode ,则没有任何问题,但是我没有混响:

audioEngine.connect(inputNode, to: audioEngine.outputNode, format: inputFormat)

我究竟做错了什么?

更新

我无意中发现,上面的代码只有当我的带有远程和麦克风的Apple EarPods连接时才会崩溃应用程序。 使用设备的内置麦克风时,我没有问题。 那么,为什么我的耳机上的麦克风会使应用程序崩溃,但只有在使用AVAudioUnitEffect

经过一些试验和错误,改变格式参数似乎已经解决了这个问题。 修改后的代码如下所示:

 let format = unitReverb.inputFormatForBus(0) audioEngine.connect(inputNode, to: unitReverb, format: format) audioEngine.connect(unitReverb, to: audioEngine.outputNode, format: format)