swift - 在 AudioKit 中停用 AudioSession
问题描述
我正在使用 AudioKit,并在不需要时尝试将音频会话设置为非活动状态。所以,我写了一些简单的代码来理解这个过程的机制,并遇到了一个意想不到的麻烦。通过尝试停用会话,我收到错误:
[avas] AVAudioSession.mm:1079:-[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.
ViewController.swift:deactivateAudioSession():73:Error Domain=NSOSStatusErrorDomain Code=560030580 "(null)"
这是我的示例代码:
import UIKit
import AudioKit
class ViewController: UIViewController {
var reverb: AKReverb?
var delay: AKDelay?
var chorus: AKChorus?
var mic: AKMicrophone!
override func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillResignActive),
name: UIApplication.willResignActiveNotification,
object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive),
name: UIApplication.didBecomeActiveNotification,
object: nil)
super.viewDidLoad()
AKSettings.useBluetooth = true
guard let mic = AKMicrophone() else { return }
self.mic = mic
chorus = AKChorus(mic)
chorus?.depth = 1
chorus?.frequency = 44000
let delay = AKDelay(chorus)
delay.feedback = 0.2
reverb = AKReverb(delay)
let mix = AKMixer(reverb)
AudioKit.output = mix
}
@IBAction func launchEngine() {
do {
try AudioKit.start()
} catch {
AKLog(error)
}
}
@IBAction func deactivateAudioSession() {
// mic.stop()
// reverb?.stop()
// delay?.stop()
// chorus?.stop()
do {
try AKSettings.session.setActive(false)
} catch {
AKLog(error)
}
}
@objc func applicationDidBecomeActive() {
launchEngine()
}
@objc func applicationWillResignActive() {
deactivateAudioSession()
}
}
如您所见,基本上,我想处理应用程序状态更改,但即使我deactivateAudioSession()
使用 UI 调用方法也会发生此错误。我stop()
在停用之前尝试了所有节点对象(注释代码),但错误仍然存在。我做错了什么?
解决方案
推荐阅读
- swift4 - Bundle.main.bundleIdentifier 返回 nil
- docker - kubectl delete/create secret 禁止(谷歌云平台)
- python - 从 API 中检索允许访问的私有谷歌表格的内容?
- sql-server - 每次成员再次出现时标记为已流通
- apache - SOLR facettig 问题
- c# - 如何使win表单应用程序响应?
- javascript - lodash 不能作为内部函数工作
- javascript - Javascript 一个接一个的方法调用
- spring-boot - 自定义弹簧引导加载程序
- typescript - 打字稿:如何从离子中的 iFrame 获取输入数据