Я записываю звук с помощью AVAudioEngine.inputNode. Все работало нормально, пока мне не понадобилось воспроизводить другой звук во время записи. Я создаю элемент проигрывателя AVPlayer и настроек с пользовательскими AVCompositions со многими треками, он воспроизводится нормально. Но когда я пытался записать звук после инициализации AVPlayer, у меня вылетало при установке крана:
[avae] AVAEInternal.h:76 required condition is false: [AVAudioIONodeImpl.mm:1093:SetOutputFormat: (format.sampleRate == hwFormat.sampleRate)]
Затем я добавил следующие отпечатки:
let inputNode = audioEngine.inputNode
print(inputNode.inputFormat(forBus: 0))
let recordingFormat = inputNode.inputFormat(forBus: 0)
print(recordingFormat, inputNode.inputFormat(forBus: 0))
Это вывод таков:
<AVAudioFormat 0x2820da6c0: 1 ch, 44100 Hz, Float32>
<AVAudioFormat 0x2820da800: 1 ch, 48000 Hz, Float32> <AVAudioFormat 0x2820da800: 1 ch, 48000 Hz, Float32>
Или это:
<AVAudioFormat 0x2820da6c0: 1 ch, 44100 Hz, Float32>
<AVAudioFormat 0x2820da800: 1 ch, 44100 Hz, Float32> <AVAudioFormat 0x2820da800: 1 ch, 48000 Hz, Float32>
Конечно, код работает с этим принтом, потому что похоже, что после одного (или двух) вызовов inputFormat узел повторно инициализируется. Почему это происходит и как это исправить?