【问题标题】:Openears asking for permission to use microphoneOpenears 请求允许使用麦克风
【发布时间】:2014-01-16 07:45:33
【问题描述】:

我制作了一个应用程序,它使用Openears 框架来读出一些文本。但是我没有使用任何Openears' 语音识别/语音合成功能,只是语音对话功能。我的应用程序被苹果拒绝,告诉我该应用程序要求使用麦克风的权限,而该应用程序没有任何此类功能。以下是来自苹果的拒绝信息:

During review we were prompted to provide consent to use the microphone, however, we were not able to find any features or functionality that use the microphone for audio recording.

The microphone consent request is generated by the use of either AVAudioSessionCategoryRecord or AVAudioSessionCategoryPlayAndRecord audio categories. 

If you do not intend to record audio with your application, it would be appropriate to choose the AVAudioSession session category that fits your application's needs or modify your app to include audio-recording features.

For more information, please refer to the Security section of the iOS SDK Release Notes for iOS 7 GM Seed.

我已在应用程序中搜索消息中提到的 AVAudioSessionCategoryRecordAVAudioSessionCategoryPlayAndRecord 音频类别,但找不到任何内容。如何禁用提示使用麦克风的权限?

【问题讨论】:

    标签: ios objective-c permissions microphone openears


    【解决方案1】:

    您的应用程序被拒绝,因为您不需要麦克风功能,默认情况下会打开使用麦克风功能的界面,因此为什么会出现用户权限。这些用户权限是不可忽视的,因为苹果增加了用户的安全功能,以便他们可以更好地控制他们希望他们的应用程序能够做什么。如果您必须使用 OpenEars 音频管理功能进行语音识别,请参阅更新 1,否则请继续使用 iOS 7 上 Apples Siri 的语音合成器的不同解决方案。

    在你的情况下,如果你只想读出一些文本,那么你可以使用 iOS7 语音合成器,它与用于创建 Siri 声音的合成器相同。

    设置起来非常简单,我目前正在将它用于我的一个项目,以通过语音与用户进行交互。以下是有关如何进行所有设置的快速教程:

    Speech synthesizer tutorial

    更新 1

    在@halle 发表评论后,我决定为那些必须使用 OpenEars 框架的人更新帖子,他们将只使用 FliteController Text To Speech 功能而没有任何类型的 OpenEars 语音识别。

    您可以将 FliteController 属性 noAudioSessionOverrides 设置为 TRUE,以确保 OpenEars 不会与音频录制流交互,这将阻止弹出麦克风权限警报。

    [self.fliteController setNoAudioSessionOverrides:TRUE]
    

    更新 2 根据@Halle 的评论,您不再需要更新 1:

    只是一个更新,从今天的更新 1.65 开始,FliteController 将永远不会自己进行音频会话调用,因此这里没有进一步的拒绝危险,也没有必要设置 noAudioSessionOverrides。

    【讨论】:

    • 只是补充说明,OpenEars 在仅进行 TTS 时不需要使用麦克风——请参阅我的回答。
    • @Halle 嘿,谢谢 Halle,我会更新我的答案以包括您的提示供大家查看。
    • 谢谢!太棒了。
    • 只是一个更新,从今天的更新 1.65 开始,FliteController 将永远不会自己进行音频会话调用,因此这里没有进一步的拒绝危险,也没有必要设置 noAudioSessionOverrides。
    • @Pavan 你的教程链接失效了。
    【解决方案2】:

    很抱歉您的应用被拒绝了。要在 OpenEars 中仅使用 TTS 而无需任何与语音识别相关的音频会话管理,请将 FliteController 的属性 noAudioSessionOverrides 设置为 TRUE。这将导致没有音频会话更改/不使用麦克风流。

    我会看看我是否可以让这个设置的文档对于只使用 OpenEars 的 FliteController 进行 TTS 的开发人员更加突出。

    为了完整起见,有关如何在使用 OpenEars 时大大减少应用程序二进制大小的文档,因为这对您来说也是一个问题:

    http://www.politepix.com/forums/topic/slimming-down-your-app/ http://www.politepix.com/openears/support/#Q_How_can_I_trim_down_the_size_of_the_final_binary_for_distribution

    编辑:从今天的 1.65 版 OpenEars 及其插件开始,如果您只使用 FliteController,则不会有被拒绝的危险,因为 TTS 类不再自行调用音频会话。感谢您对此的提醒,再次抱歉,您因此被拒绝了。

    【讨论】:

    • 实际上,我认为如果即将到来的版本默认不接触音频会话,除非使用 PocketsphinxController,否则比文档改进更好。 FliteController 默认这样做是从早期版本中遗留下来的,当时它使用了音频单元图,并结合了一些额外的音频会话防弹措施,用于在语音识别期间运行具有自己会话设置的混合类型媒体对象的情况,但它可以更改为更加保守,除非有证据表明语音识别正在发生,否则永远不会进行音频会话呼叫。
    • 谢谢,但上面的答案解决了我的问题。 :-) 我试过这个,它确实很有效,但是去掉 openears 和声音大大减少了包的大小。所以我会继续这样做。
    • 好的,我很高兴你的问题得到了解决,因为拒绝并不有趣。我仍然想为您提出的如何防止 OpenEars 使用麦克风会话的问题留下正确答案,并更正另一个答案中的暗示,即没有办法做到这一点,因为 noAudioSessionOverrides 在公共 API 中OpenEars 中的 TTS 类,它记录在标题和文档中。
    • 嘿@HarikrishnanT 这就是我建议您改用 SpeechSynthesizer 的主要原因,特别是如果您只需要大声朗读一些文本,您将显着减小包大小,因为您已经注意到自己.我冒着风险提供了一个完全不同的解决方案。感谢您将我的答案标记为您喜欢的答案。我能做的就是更新我的答案,包括 Halle 对该问题的解决方案,这将帮助其他需要专门使用 OpenEars 框架的用户。
    • 嗨,帕万,无需在此答案的 cmets 中聊天和评​​论-upvote-yadda-yadda;你的答案很好,如果有一个对所表述的问题正确的答案,以及一个回答不同问题同时对提问者有用的答案,它就会按设计工作。我不担心没有得到复选标记;我只是不希望大量新的开发人员支持负载说“我听说 OpenEars 应用程序在您使用 TTS 时被拒绝,是真的吗?”,当在 SO 上选择有错误的最佳答案时,小型项目会发生这种情况 –它成功了。
    猜你喜欢
    • 2019-11-04
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2021-01-26
    • 2022-01-14
    • 2018-03-20
    • 1970-01-01
    • 2019-06-07
    相关资源
    最近更新 更多