2014-01-24 4 views
0

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

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

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

В Novocaine.m, я изменил setupAudio от

UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord 

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

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

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

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

Чтобы проверить, после каждого изменения, вы должны сделать это на IPOD:

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

иначе тест не является действительным.

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

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

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

+0

Я бегу в том же номере. Любая удача найти решение? – Rogare

ответ

0

Полный кредит идет на 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