我正在制作一个简单的 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 )。试用该示例应用程序后,我能够缩小获取原始输入值所需的类的范围,主要是 AudioController 类。所以我导入了 AudioController 类及其必要的组件并能够构建它。幸运的是,这个例子有适当的异常处理,所以我能够看到它失败的地方。异常是由这一行引起的:
AudioUnitInitialize(_rioUnit)
我开始怀疑是在 SpriteKit/SceneKit 环境中尝试访问麦克风导致了这个问题。我也在全新的 SpriteKit 和 SceneKit 项目中尝试了上面提到的相同步骤,但没有解决问题。所以我想知道您是否有可能在 SpriteKit/SceneKit 项目中提供实时麦克风输入。
最佳答案
iOS 设置应用程序的隐私下有一个设置:麦克风,您必须在其中打开应用程序使用设备麦克风的权限。 AVAudioSession requestRecordPermission API 可以帮助检查此权限设置。
还有一些AVAudioSession类需要设置激活才能使用麦克风。 SpriteKit 和 SceneKit 的使用不会干扰这些设置。
关于ios - SpriteKit 和 SceneKit 是否允许在游戏过程中访问 iOS 麦克风输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35491197/