Подключите AVAudioInputNode к AVAudioUnitEffect с помощью AVAudioEngine.

Я хочу обработать звук со встроенного микрофона моего устройства (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?


person JWK    schedule 04.02.2015    source источник


Ответы (1)


После некоторых проб и ошибок изменение аргументов формата, похоже, решило эту проблему. Пересмотренный код выглядит так:

let format = unitReverb.inputFormatForBus(0)
audioEngine.connect(inputNode, to: unitReverb, format: format)
audioEngine.connect(unitReverb, to: audioEngine.outputNode, format: format)
person JWK    schedule 06.02.2015
comment
Ты спас мне жизнь..! :) - person girish_pro; 07.10.2015