【发布时间】:2021-09-04 22:58:51
【问题描述】:
我正在尝试更改inputNode 的AVAudioEngine 的设备。
为此,我在其auAudioUnit 上致电setDeviceID。尽管此调用没有失败,但输出总线出现了问题。
当我询问其格式时,它显示 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, 44100 Hz, Float32, 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, 44100 Hz, Float32, 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, 44100 Hz, Float32>
print(avEngine.inputNode.outputFormat(forBus: 0))
// <AVAudioFormat 0x1404ade30: 1 ch, 44100 Hz, Float32>
编辑: 进一步调试会发现另一件令人费解的事情。
avEngine.inputNode.auAudioUnit == avEngine.outputNode.auAudioUnit // this is true ?!
inputNode 和 outputNode 共享相同的 AUAudioUnit。它的 deviceID 默认设置为扬声器。让我很困惑……为什么inpudeNode的设备会是一个扬声器?
【问题讨论】:
-
我在尝试将麦克风节点连接到主混音器时遇到了类似的问题。我确实有 2 个通道,但采样率是 0Hz。你找到解决方案了吗?
标签: ios macos avfoundation core-audio audiotoolbox