Приложение iOS запрашивает доступ к микрофону даже для kAudioSessionCategory_MediaPlayback

Я использую библиотеку новокаина из: https://github.com/alexbw/novocaine для воспроизведения wav файлы. Я знаю, что у iOS есть собственный API медиаплеера, однако его ограничение заключается в предустановленных эквалайзерах. Мне нужно использовать новокаин, потому что я использую NVDSP https://github.com/bartolsthoorn/NVDSP для реализации 10-полосный графический эквалайзер.

Apple отклонила мое представленное приложение, потому что оно запрашивает доступ к микрофону, но это всего лишь приложение для воспроизведения. Они сказали:

«Запрос разрешения микрофона создается с использованием категорий аудио AVAudioSessionCategoryRecord или AVAudioSessionCategoryPlayAndRecord»

В Novocaine.m модифицировал setupAudio из

UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord

к каждому из них:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback
UInt32 sessionCategory = kAudioSessionCategory_AmbientSound
UInt32 sessionCategory = kAudioSessionCategory_SoloAmbientSound

но в каждом из вышеперечисленных случаев приложение все равно запрашивало доступ к микрофону.

Я просмотрел весь код, и это единственное место, где установлена ​​категория аудиосессии.

Для проверки после каждой модификации вы должны сделать это на iPod:

Настройки -> Общие -> Сброс -> Сброс местоположения и конфиденциальности

в противном случае тест недействителен.

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

Есть ли в коде какое-либо другое место, которое запрашивает доступ к микрофону или которое влияет на доступ к микрофону в качестве побочного эффекта?

Я использую XCode 5.0.2 (5A3005) с iOS SDK 7.0, и мое единственное тестовое устройство - iPod Touch 5-го поколения.


person alain.filterstream    schedule 24.01.2014    source источник
comment
У меня та же проблема. Есть ли удача в поиске решения?   -  person Rogare    schedule 07.03.2014


Ответы (1)


Полная заслуга в этом принадлежит DMT4u на Github, но да, его / ее решение сработало для меня! Закомментируйте следующие строки:

UInt32 one = 1;
CheckError( AudioUnitSetProperty(inputUnit,
kAudioOutputUnitPropertyEnableIO,
kAudioUnitScope_Input,
kInputBus,
&one,
sizeof(one)), "Couldn't enable IO on the input scope of output unit");

Источник: https://github.com/alexbw/novocaine/issues/76.

person Rogare    schedule 10.03.2014