Я столкнулся с той же проблемой с iOS 13.1.1 и 13.1.2. Я использовал AKNodeRecorder
AudioKit в своем коде, и оказалось, что я забыл перенаправить на AudioKit.output
узел, который записывал мой AKNodeRecorder
. Все, что мне нужно было сделать, это добавить микшер или усилитель после моего узла, установить усиление этого нового узла равным 0, а затем направить его на выход.
Вот сломанная версия:
let mic = AKMicrophone()!
let recorder = AKNodeRecorder(node: mic)!
AudioKit.start()!
Вот рабочая версия:
let mic = AKMicrophone()!
let recorder = AKNodeRecorder(node: mic)!
let recorderGain = AKBooster(mic, gain: 0)
AudioKit.output = recorderGain
AudioKit.start()!
Чтобы объяснить, почему это необходимо: AudioKit пересекает ваш график обработки от выходного узла назад. Все, что не связано с этим графом, может не инициализироваться должным образом, и его поведение не определено. Вы можете наблюдать такое неопределенное поведение в том, что ваш код работает на старых версиях iOS, но не на текущих.
«Но AKNodeRecorder не подключен к моему графику» , вы можете сказать. Оказывается, что AKNodeRecorder на самом деле не узел, а отвод.
Отвод может находиться «сверху» узла. Всегда может быть только одно нажатие на вершину узла. Другими примерами кранов являются AKFFTTap
. Вообще говоря, отводы потребляют аудио, но не генерируют аудио, и поэтому они не могут быть частью звукового графа - единственным узлом, который ничего не может сгенерировать, является конечный узел, AudioKit.output
.
В другомДругими словами, ваш аудио график должен выглядеть следующим образом:
recordingtap
|
mic -> gain0 -> output
Обратите внимание, что усиление необходимо только в том случае, если вы не хотите слышать ваш микрофон на выходе.