0 Replies
      Latest reply on Mar 13, 2020 4:06 AM by j89612
      j89612 Level 1 Level 1 (0 points)



        I'm trying to configure AVAudioEngine for downsampling, by inserting an AVAudioUnit with the following description:

        let resamplerDescr = AudioComponentDescription(componentType: kAudioUnitType_FormatConverter,
                                                           componentSubType: kAudioUnitSubType_AUConverter,
                                                       componentManufacturer: kAudioUnitManufacturer_Apple,
                                                       componentFlags: 0, componentFlagsMask: 0)


        to the graph:

            let engine = AVAudioEngine()
            let inputNode = engine.inputNode
            inputNode.isVoiceProcessingAGCEnabled = false
            inputNode.isVoiceProcessingBypassed = true
            let inputFormat = inputNode.outputFormat(forBus: 0)
            let adaptFormat = AVAudioFormat(standardFormatWithSampleRate: _sampleRateHz, channels: 2)!
            engine.connect(inputNode, to: resampler,
             format: inputNode.outputFormat(forBus: 0))
            engine.connect(resampler, to: auNode, format: adaptFormat)


        auNode does some custom processing assuming the custom sample rate. Rest of graph construction was skipped.

        The problem is that as soon as resampler is inserted into the graph the app crashes on engine start crash like this:

        [avae]            AVAEInternal.h:76    required condition is false: [AVAudioEngineGraph.mm:798:InitializeActiveNodesI
        nInputChain: (false == isInputConnToConverter)]
        *** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: false == isInputConnToConverter'


        What I'm doing wrong here? What is the recommended way to downsample in AVAudioEngine graph?