问题描述
我正在尝试更改 inputNode
的 AVAudioEngine
的设备。
为此,我在其 setDeviceID
上调用 auAudioUnit
。虽然这个调用没有失败,但输出总线发生了一些错误。
当我询问它的格式时,它显示了 0Hz 和 0 通道格式。当我尝试将节点连接到 mainMixerNode 时,它会使应用程序崩溃。
谁能解释一下这段代码有什么问题?
avEngine = AVAudioEngine()
print(avEngine.inputNode.auAudioUnit.inputBusses[0].format)
// <AVAudioFormat 0x1404b06e0: 2 ch,44100 Hz,Float32,non-inter>
print(avEngine.inputNode.auAudioUnit.outputBusses[0].format)
// <AVAudioFormat 0x1404b0a60: 2 ch,inter>
// Now,let's change a device from headphone's mic to built-in mic.
try! avEngine.inputNode.auAudioUnit.setDeviceID(inputDevice.deviceID)
print(avEngine.inputNode.auAudioUnit.inputBusses[0].format)
// <AVAudioFormat 0x1404add50: 2 ch,non-inter>
print(avEngine.inputNode.auAudioUnit.outputBusses[0].format)
// <AVAudioFormat 0x1404adff0: 0 ch,0 Hz,'lpcm' (0x00000029) 32-bit little-endian float,deinterleaved>
// !!!
// Interestingly,'inputNode' shows a different format than `auAudioUnit`
print(avEngine.inputNode.inputFormat(forBus: 0))
// <AVAudioFormat 0x1404af480: 1 ch,Float32>
print(avEngine.inputNode.outputFormat(forBus: 0))
// <AVAudioFormat 0x1404ade30: 1 ch,Float32>
编辑: 进一步的调试揭示了另一个令人费解的事情。
avEngine.inputNode.auAudioUnit == avEngine.outputNode.auAudioUnit // this is true ?!
inputNode
和 outputNode
共享同一个 AUAudioUnit
。它的 deviceID 默认设置为扬声器。这让我很困惑……为什么 inpudeNode 的设备会是扬声器?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)