Audiokit: Как записать iphone 11 микрофон с помощью AKClipRecorder? (CRASHED) - PullRequest
1 голос
/ 17 февраля 2020

Для этой проблемы я отредактировал пример / ios проекта Audiokit: LoopbackRecording.

Поэтому я хотел добавить эффект перед записью микрофона:


let mic = AKMicrophone()
let reverb = AKReverb(mic)
reverb.loadFactoryPreset(.cathedral)
// Set up recorders
loopBackRecorder = AKClipRecorder(node: reverb)

This код работает нормально на симуляторе (iphone 11 iOS13), но падает на iPhone 11 Pro, когда AudioKit пытается начать показ этого журнала ошибок:

2020-02-17 13:49:05.854838+0100 LoopbackRecording[456:33365] [avae]
AVAudioEngine.mm:160   Engine@0x283c94f30: could not initialize, error = -10868
2020-02-17 13:49:05.955946+0100 LoopbackRecording[456:33365] [avae]
AVAEInternal.h:109   [AVAudioEngineGraph.mm:1397:Initialize: (err = AUGraphParser::InitializeActiveNodesInInputChain(ThisGraph, *GetInputNode())): error -10868
Fatal error: The operation couldn’t be completed. (com.apple.coreaudio.avfaudio error -10868.): file AudioKit-iOS/Examples/LoopbackRecording/LoopbackRecording/ViewController.swift, line 104
2020-02-17 13:49:05.967861+0100 LoopbackRecording[456:33365] Fatal error: The operation couldn’t be completed. (com.apple.coreaudio.avfaudio error -10868.)

Я попытался отладить и удалить реверберацию и приложение все еще происходит сбой, ошибка кода AVFaudio: -10868 ссылаются на эту более явную ошибку: kAudioUnitErr_FormatNotSupported

Я обнаружил этот перехват кода только в одном AudiokitFile: AUBuffer. cpp строка 95:

...
if (format.IsInterleaved()) {
        nStreams = 1;
        channelsPerStream = format.mChannelsPerFrame;
    } else {
        nStreams = format.mChannelsPerFrame;
        channelsPerStream = 1;
        if (nStreams > mAllocatedStreams)
            COMPONENT_THROW(kAudioUnitErr_FormatNotSupported);
    }

Итак, я сравнил разницу в формате между форматом inputNode AudiokitEngine и inputNode для mi c .avAudioNode (AKMicrophone):

(lldb) po AudioKit.engine.inputNode.inputFormat(forBus: 0)
<AVAudioFormat 0x2803eaa80:  1 ch,  48000 Hz, Float32>

(lldb) po AudioKit.engine.inputNode.outputFormat(forBus: 0)
<AVAudioFormat 0x2803dc0f0:  1 ch,  48000 Hz, Float32>

(lldb) po mic?.avAudioNode.inputFormat(forBus: 0)
 <AVAudioFormat 0x2803e4190:  1 ch,  48000 Hz, Float32>

(lldb) po mic?.avAudioNode.outputFormat(forBus: 0)
 <AVAudioFormat 0x2803dc1e0:  2 ch,  44100 Hz, Float32, non-inter>

Я буду очень признателен за любые подсказки или подсказки, которые позволят мне отладить эту ситуацию

...