【问题标题】:Stop AKMicrophone without stopping AudioKit在不停止 AudioKit 的情况下停止 AKMicrophone
【发布时间】:2017-12-13 22:54:51
【问题描述】:

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

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

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

是否在不停止引擎的情况下停止接收来自麦克风的输入?

【问题讨论】:

    标签: ios audiokit


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    作为使用音频套件的一般规则,您应该采用适当的增益分级模式。我不知道您是否对任何 DAW(协议、逻辑、cubase 等)有任何经验,但您应该在代码中将 AudioKit 视为 DAW。

    AudioKit.start()
    

    是您的主输出,老实说,我认为没有理由在您的应用程序期间停止它。相反,您应该将 audiokit 的主输出静音以“消除声音”

    至于你的问题,AKMicrophone 确实有 start 和 stop 属性,你应该可以调用 stop!

    let mic = AKMicrophone
    
    mic.start(AKMicrophone)
    
    mic.stop(AKMicrophone)
    

    【讨论】:

    • 如果您查看代码,所有 mic.stop 和 mic.start 所做的就是将节点静音或取消静音。它不会移除水龙头,因此会释放麦克风并将您从红色录音条中解放出来。我同意您永远不想停止 AudioKit,但开箱即用是实现此目的的唯一方法。
    • 这个答案具有误导性。正如 nathan 所说,开始/停止不会阻止麦克风获取输入和点击回调被调用。但是感谢第一部分的解释,将 AK 视为 daw 确实有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2015-08-26
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多