使用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)