使用 AVAudioEngine 将 AVAudioInputNode 连接到 AVAudioUnitEffect
Connect AVAudioInputNode to AVAudioUnitEffect using AVAudioEngine
我想使用音频单元效果器 (AVAudioUnitEffect
) 处理来自我设备的内置麦克风 (AVAudioInputNode
) 的音频。对于我的示例,我使用 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 with Remote and Mic 连接时才会使应用程序崩溃。使用设备的内置麦克风时,我没有遇到任何问题。那么,为什么我耳机上的麦克风会导致应用程序崩溃,但只有在使用 AVAudioUnitEffect
时才会崩溃?
经过反复试验,更改格式参数似乎解决了这个问题。修改后的代码如下所示:
let format = unitReverb.inputFormatForBus(0)
audioEngine.connect(inputNode, to: unitReverb, format: format)
audioEngine.connect(unitReverb, to: audioEngine.outputNode, format: format)
我想使用音频单元效果器 (AVAudioUnitEffect
) 处理来自我设备的内置麦克风 (AVAudioInputNode
) 的音频。对于我的示例,我使用 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 with Remote and Mic 连接时才会使应用程序崩溃。使用设备的内置麦克风时,我没有遇到任何问题。那么,为什么我耳机上的麦克风会导致应用程序崩溃,但只有在使用 AVAudioUnitEffect
时才会崩溃?
经过反复试验,更改格式参数似乎解决了这个问题。修改后的代码如下所示:
let format = unitReverb.inputFormatForBus(0)
audioEngine.connect(inputNode, to: unitReverb, format: format)
audioEngine.connect(unitReverb, to: audioEngine.outputNode, format: format)