停止AKMicrophone而不停止AudioKit

时间:2017-12-13 22:54:51

标签: ios audiokit

我有一个应用程序,我只想从一个特定的屏幕录制。在其他每个屏幕上,我都不想进行大部分录制,以便在应用程序处于后台时仍然可以播放音频,而不会有红色录制条。 我能够做到这一点的唯一方法是停止AudioKit(AudioKit.stop()),但我很确定AudioKit的启动和停止导致一些非常随机的难以追踪崩溃。我也尝试在麦克风上调用stop,并将输入设置为false,但这也没有用。

我知道有一个类似的问题AudioKit: Can I disable an AKMicrophone without calling AudioKit.stop()?

但答案并没有解决这个问题。

无论如何停止接收麦克风输入而不停止发动机?

2 个答案:

答案 0 :(得分:3)

断开麦克风取决于您的目标。如果您只是想停止处理输入并更改AVAudioSession类别以便红条消失,您可以设置AKSettings.audioInputEnabled = false,但是您需要更新AVAudioSession的类别。目前据我所知,没有停止/启动AudioKit是一个很好的方法,尽管在不重新启动引擎的情况下更改类别应该是可能的。似乎第一次发誓的一个黑客就是指定AudioKit.output = AudioKit.output来触发didSet副作用,该副作用将通过updateSessionCategoryAndOptions()更新类别。

您可以随时绕过AudioKit并尝试直接设置共享的AVAudioSession类别。我正在考虑为AudioKit创建PR以公开updateSessionCategoryAndOptions(),但与此同时,您可以始终在自己的分支中公开此功能并运行build_frameworks.sh。无论如何,这不是很好的解决方案,但这是一个有效的用例,AudioKit将来应该支持更好!

答案 1 :(得分:2)

作为使用Audio Kit的一般规则,您应该使用适当的增益分段模式。我不知道你是否有任何DAW(protools,逻辑,cubase等)的经验,但你应该在代码中将AudioKit视为DAW ......

AudioKit.start()

是你的主要输出,老实说我没有理由在申请期间阻止它。相反,你应该将audiokit的主输出静音以“杀死声音”

至于你的问题,AKMicrophone确实有开始和停止属性,你应该只能调用stop!

let mic = AKMicrophone

mic.start(AKMicrophone)

mic.stop(AKMicrophone)