Ошибка при установке крана на входной узел аудио движка - PullRequest
0 голосов
/ 14 декабря 2018

всякий раз, когда код достигает inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) {[weak self] (buffer:AVAudioPCMBuffer, when:AVAudioTime), происходит сбой приложения со следующей ошибкой

Завершение работы приложения из-за необработанного исключения 'com.apple.coreaudio.avfaudio', причина: 'обязательное условие - ложь:format.sampleRate == hwFormat.sampleRate '

Я устал удалять метки перед добавлением другого, и я уверен, что не добавляю больше одного тапа.Что странно, так это то, что приложение работает нормально с iOS менее 12 и отлично работает на всех симуляторах.

оно падает только на реальных устройствах с iOS 12. Я пытался найти решение, но не смогнайти любую вещь.

Ответы [ 2 ]

0 голосов
/ 19 июля 2019

Единственное, что я нашел, что работало, чтобы изменить частоту дискретизации, было

AVAudioSettings.sharedInstance().setPreferredSampleRate(...)

К сожалению, нет гарантии, что вы получите желаемую частоту дискретизации, хотя кажется, что это 8000, 12000,16000, 22050, 44100 все работало.

Следующее НЕ работало:

  1. Установка моего пользовательского формата при отсоединении engine.inputNode.(Исключение, аналогично OP)
  2. Добавление микшера с моим пользовательским форматом и нажатие на него.(Исключение)
  3. Добавление микшера, подключение его к формату inputNode, подключение микшера к основному микшеру с моим пользовательским форматом, затем удаление входа outputNode, чтобы не отправлять звук на динамик иполучить мгновенный отзыв.(Работало, но получил все нули)
  4. Я вообще не использую мой пользовательский формат в AVAudioEngine, а использую AVAudioConverter для конвертации с аппаратной скорости в моем кране.(Длина буфера не была указана, невозможно определить, верны ли результаты)

Это было с iOS 12.3.1.

0 голосов
/ 15 декабря 2018

Это несоответствие частоты дискретизации.

Формат входного узла не может быть изменен, поэтому вы должны соответствовать ему.installTap прослушивает вывод узла, поэтому используйте выходной формат inputNode.

inputNode.installTap(onBus: 0, bufferSize: 1024, format: inputNode.outputFormat(forBus: 0))

Другой вариант - подключить вход к микшеру, а затем коснуться микшера, используя предпочтительный формат записи.Микшеры выполняют неявные преобразования частоты дискретизации между своими входами и выходами.

...