Для этой проблемы я отредактировал пример / 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>
Я буду очень признателен за любые подсказки или подсказки, которые позволят мне отладить эту ситуацию