SpriteKit 和 SceneKit 是否允许在游戏过程中访问 iOS 麦克风输入?

Does SpriteKit and SceneKit allow access to iOS microphone input during game play?

我正在制作一个简单的 sprite 套件游戏,需要从麦克风输入音频以进行语音命令。我已经创建了一个简单的游戏,并且已经创建了一个单独的应用程序,如果您说出一个词,它会检测到并使用 cmu-sphinx/pocketsphinx (http://cmusphinx.sourceforge.net/) 显示在屏幕上。

我正在使用 Novocaine (https://github.com/alexbw/novocaine) 因为我已经多次使用这个库并且在过去的其他项目中取得了巨大的成功,但是每当我在游戏中启动 Novocaine 对象时,我的应用程序异常崩溃。

所以我想,由于我使用的是包装器库,所以一定是一些不再支持的已弃用函数,所以我做了更多的研究。我遇到了 Apple 的演示应用程序 AurioTouch (https://developer.apple.com/library/ios/samplecode/aurioTouch/Introduction/Intro.html)。在试用该示例应用程序后,我能够缩小获取原始输入值所需的 class 范围,主要是 AudioController class。所以我导入了 AudioController class 及其必要的组件并能够构建它。幸运的是,这个例子有适当的异常处理,所以我能够看到它失败的地方。异常是由这一行引起的:

AudioUnitInitialize(_rioUnit)

我开始怀疑是在 SpriteKit/SceneKit 环境中尝试访问麦克风导致了这个问题。我也在全新的 SpriteKit 和 SceneKit 项目中尝试了上面提到的相同步骤,但没有解决问题。所以我想知道您是否有可能在 SpriteKit/SceneKit 项目中提供实时麦克风输入。

隐私下的 iOS 设置应用程序中有一个设置:麦克风,您必须在其中打开应用程序使用设备麦克风的权限。 AVAudioSession requestRecordPermission API 可以帮助检查此权限设置。

还有一些AVAudioSession类需要设置激活才能使用麦克风。 SpriteKit 和 SceneKit 的使用不会影响这些设置。

在iOS10 Apple 正在扩大隐私控制的范围。您必须在 Info.plist 文件中声明对任何私有数据的访问权限。

转到 Info.Plist 文件并根据您的要求添加私钥。

麦克风: 键:隐私 - 麦克风使用说明
值:$(PRODUCT_NAME) 允许使用麦克风为语音命令提供音频输入。