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)

私は何を間違っていますか?

アップデート

上記のコードは、リモートとマイクを備えた Apple EarPodsが接続されている場合にのみアプリケーションをクラッシュさせることをうっかり発見しました。デバイスの内蔵マイクを使用する場合、問題はありません。では、ヘッドフォンのマイクがアプリケーションをクラッシュさせるのはなぜAVAudioUnitEffectですか?

4

1 に答える 1