1

我正在使用来自: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 代码,但诊断起来非常困难,因为麦克风访问弹出窗口仅在显示视图时显示,但是,对它的检查发生在代码中的更早时间。

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

我将 XCode 5.0.2 (5A3005) 与 iOS SDK 7.0 一起使用,我唯一的测试设备是第 5 代 iPod Touch。

4

1 回答 1

1

完全归功于 Github 上的 DMT4u,但是是的,他/她的解决方案对我有用!注释掉以下几行:

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

于 2014-03-10T20:23:30.067 回答