Я хочу обработать звук со встроенного микрофона моего устройства (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)
Что я делаю не так?
Обновить
Я случайно обнаружил, что приведенный выше код вызывает сбой приложения только тогда, когда мой Наушники Apple EarPods с пультом дистанционного управления и микрофоном подключены. При использовании встроенного микрофона устройства у меня нет проблем. Итак, почему микрофон в моих наушниках вылетает из приложения, но только при использовании AVAudioUnitEffect
?