3

AVAudioInputNode我想使用音频单元效果 ( )处理来自设备内置麦克风 ( ) 的音频AVAudioUnitEffect。对于我的示例,我正在使用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)

我究竟做错了什么?

更新

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

4

1 回答 1

5

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

let format = unitReverb.inputFormatForBus(0)
audioEngine.connect(inputNode, to: unitReverb, format: format)
audioEngine.connect(unitReverb, to: audioEngine.outputNode, format: format)
于 2015-02-06T21:44:56.813 回答