Сбой AVAudioEngine на частоте дискретизации в Swift - PullRequest
1 голос
/ 15 мая 2019

У меня начался сбой, которого раньше не было при инициализации записи с ошибкой:

[avae] AVAEInternal.h:70:_AVAE_Check: required condition is false: [AVAudioIONodeImpl.mm:911:SetOutputFormat: (format.sampleRate == hwFormat.sampleRate)]

Кажется, это хитрая ошибка , которую некоторые люди также получают с AudioKit .

В этом случае, похоже, что-то связано с использованием частоты дискретизации 48k вместо 44.1k. Однако в моем случае, используя аудио движок, я вообще не устанавливаю частоты дискретизации.

Мой код в основном шаблонный для записи. Сбой происходит по следующей строке:

inputNode.installTap(onBus: 0, bufferSize: 4096, format: recordingFormat) { (buffer, when) in
print("got here")//never gets here

Кто-нибудь может подсказать, как это исправить при использовании audioengine для записи?

Спасибо за любые предложения.

Редактировать

Вот как я создаю формат записи:

let recordingFormat = inputNode.outputFormat(forBus: 0)

А вот как выглядит формат записи в отладчике ... похоже, он установлен на 44.1k:

po recordingFormat
<AVAudioFormat 0x282b1e580:  1 ch,  44100 Hz, Float32>

inputNode выглядит так:

po inputNode
<AVAudioInputNode: 0x280a0eb70>

(lldb) p inputNode
(AVAudioInputNode) $R4 = 0x0000000280a0eb70 {
  AVFoundation.AVAudioIONode = {
    baseAVAudioNode@0 = <extracting data from value failed>

  }
}  

Редактировать 2:

Кажется, проблема связана с тем, что Apple изменила формат ввода на 48k, как объяснено 1037 *:

Это иллюстрирует несоответствие:

    print("wrong rate---> session rate: \(AVAudioSession.sharedInstance().sampleRate) input rate: \(recordingFormat.sampleRate)")

Однако это исправление с использованием avaudioconverter кажется невероятно сложным. Как другие люди имеют дело с этим?

...