我有一个应用程序,我只想从一个特定的屏幕录制。在其他每个屏幕上,我都不想进行大部分录制,以便在应用程序处于后台时仍然可以播放音频,而不会有红色录制条。 我能够做到这一点的唯一方法是停止AudioKit(AudioKit.stop()),但我很确定AudioKit的启动和停止导致一些非常随机的难以追踪崩溃。我也尝试在麦克风上调用stop,并将输入设置为false,但这也没有用。
我知道有一个类似的问题AudioKit: Can I disable an AKMicrophone without calling AudioKit.stop()?
但答案并没有解决这个问题。
无论如何停止接收麦克风输入而不停止发动机?
答案 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)