问题描述
切换音频输入源时,我无法理解AVAudioEngine的行为。
预期的行为
切换输入源时,AVAudioEngine的inputNode
应该无缝采用新的输入源。
实际行为
从AirPods切换到iPhone扬声器时,AVAudioEngine停止工作。不再有音频通过。查询engine.isRunning
仍返回true。
随后切换回AirPods时,它仍然不起作用,但是现在engine.isRunning
返回false。
在更改路线时停止并启动引擎没有帮助。也不会调用reset()
。断开并重新连接输入节点也无济于事。唯一可靠的帮助是丢弃整个引擎并创建一个新引擎。
操作系统
这是在iOS 14 beta 5上。恐怕我无法在以前的版本中进行测试;我只有一个设备。
要复制的代码
这是最小的代码示例。在Xcode中创建一个简单的应用程序项目(无论您选择SwiftUI还是Storyboard都无关紧要),并为其授予访问Info.plist
中的麦克风的权限。创建以下文件Conductor.swift
:
import AVFoundation
class Conductor {
static let shared: Conductor = Conductor()
private let _engine = AVAudioEngine?
init() {
// Session
let session = AVAudioSession.sharedInstance()
try? session.setActive(false)
try! session.setCategory(.playAndRecord,options: [.defaultToSpeaker,.allowBluetooth,.allowAirPlay])
try! session.setActive(true)
_engine.connect(_engine.inputNode,to: _engine.mainmixerNode,format: nil)
_engine.prepare()
}
func start() { _engine.start() }
}
然后在AppDelegate
中,致电:
Conductor.shared.start()
此示例将把输入直接路由到输出。如果您没有耳机,它将触发反馈循环。
问题
我在这里想念什么?这是预期的行为吗?如果是这样,它似乎在任何地方都没有记录。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)