AudioSession MaximumInputNumberOfChannels возвращает 0 - PullRequest
0 голосов
/ 11 октября 2018

Я создал плагин для iOS, который собирает аудиоданные и передает их слушателю в виде потока байтов.Он работал безупречно в эмуляторе и на разных устройствах, но на iPhone 6 под управлением iOS 11.3 во время инициализации происходит сбой.Я отследил проблему с этим кодом:

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
    try session.setPreferredInputNumberOfChannels(1) // This is the line that is throwing
    try session.setPreferredIOBufferDuration(65)
} catch {
    print(error.localizedDescription) // Prints: The operation couldn’t be completed. (OSStatus error -50.)
    return -1
}

Как видно из комментария, ошибка вызвана вызовом session.setPreferredIOBufferDuration.Глядя на документацию, он говорит, что вызов будет сброшен, если введенный номер больше session.maximumInputNumberOfChannels, и, судя по сообщению об ошибке, похоже, это так.Проверяя это значение на этом телефоне, он возвращает 0.

Что будет причиной того, что это значение будет 0?Насколько я могу судить, я не думаю, что это проблема с разрешениями, поскольку я запрашиваю разрешения для микрофона до того, как приложение достигнет этой точки в коде.Единственное, о чем я могу думать, это то, что телефон по существу не имеет возможностей микрофона ... но это телефон , поэтому включение микрофона кажется довольно стандартным.

РЕДАКТИРОВАТЬ: Iвытащил iPad Air с iOS 12, и у него та же проблема.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Я нашел проблему.Мне нужно было добавить session.setActive(true), прежде чем пытаться установить количество каналов.Мне никогда не приходилось делать этого раньше, но я думаю, это то, что вы должны сделать в любом случае.

0 голосов
/ 12 октября 2018

AVAudioSession.sharedInstance () вы все равно можете изменить его, выполнить поиск?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...