ios - 在不停止 AudioKit 的情况下停止 AKMicrophone

标签 ios audiokit

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

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

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

有没有办法在不停止引擎的情况下停止接收来自麦克风的输入?

最佳答案

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

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

关于ios - 在不停止 AudioKit 的情况下停止 AKMicrophone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803341/

相关文章:

ios - 我无法在 Json 上的 Swift xcode 8.1 中修复 EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

ios - 有没有办法记录应用程序输出的所有声音?

ios - AudioKit 在 IOS 上连接外部蓝牙麦克风

ios - AudioKit iOS 设置输入和输出设备

ios - 如果用户正在滚动,则在 UICollectionView 中禁用自动滚动

ios - Swift JSON 项目数组

ios - 无法让 iOS MapKit Annotation 显示标题和副标题

iphone - 如何创建一个 NSFetchRequest 来根据父关系过滤核心数据对象?

ios - AudioKit 录音机设置与麦克风崩溃 "required condition is false: mixingDest"

swift - AudioKit AKMicrophone 不输出任何数据