AVAudioEngine.inputNode.inputFormat(forBus: 0) меняется после пары вызовов при инициализации AVPlayer

Я записываю звук с помощью 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 узел повторно инициализируется. Почему это происходит и как это исправить?


person Philip    schedule 22.05.2020    source источник


Ответы (1)


Я не знаю точных причин, почему это произошло и как это решить в данных конкретных обстоятельствах, но я перешел с AVPlayer на AVAudioEngine и в качестве аудиоплеера, и это помогло.

person Philip    schedule 16.06.2020