即使对于kAudioSessionCategory_MediaPlayback,iOS App也会要求麦克风访问

时间:2014-01-24 16:10:30

标签: ios objective-c microphone avaudiosession novocaine

我正在使用来自https://github.com/alexbw/novocaine的Novocaine库来播放wav文件。我知道iOS有自己的媒体播放器API,但它的局限在于预设的均衡器。我需要使用Novocaine,因为我使用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调试器单步执行了几乎所有的Novocaine代码,但诊断非常困难,因为麦克风访问弹出窗口仅在显示视图时显示,但是,检查它的时间要早​​于代码。

代码中是否有其他地方请求麦克风访问或影响麦克风访问是否有副作用?

我正在使用带有iOS SDK 7.0的XCode 5.0.2(5A3005),我唯一的测试设备是iPod Touch第5代。

1 个答案:

答案 0 :(得分: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