【问题标题】:AVAudioEngine - output format has 0 channels after changing device of auAudioUnit of the inputNodeAVAudioEngine - 更改 inputNode 的音频单元设备后输出格式有 0 个通道
【发布时间】:2021-09-04 22:58:51
【问题描述】:

我正在尝试更改inputNodeAVAudioEngine 的设备。

为此,我在其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 ?!

inputNodeoutputNode 共享相同的 AUAudioUnit。它的 deviceID 默认设置为扬声器。让我很困惑……为什么inpudeNode的设备会是一个扬声器?

【问题讨论】:

  • 我在尝试将麦克风节点连接到主混音器时遇到了类似的问题。我确实有 2 个通道,但采样率是 0Hz。你找到解决方案了吗?

标签: ios macos avfoundation core-audio audiotoolbox


【解决方案1】:

我在模拟器和设备上都遇到了类似的问题。我的 inputNode 报告了 2 个通道,但采样率为 0 Hz。原来我在附加节点之前启动了 AudioEngine。将开始移到最后一步,现在可以正常工作了。

我已经编写了很多 AVAudioEngine 应用程序,不敢相信我在当前的应用程序中犯了这个菜鸟错误。但是,如果 Apple 可以从 connect() 方法返回一个错误来说明问题,而不是仅仅引发一个通用的致命错误,那就太好了。

我也使用 AudioSession.setPreferredInput 而不是上面的 setDevice。从这里使用 enableBuiltInMic 方法:

https://developer.apple.com/documentation/avfoundation/avaudiosession/capturing_stereo_audio_from_built-in_microphones

【讨论】:

    猜你喜欢
    • 2019-03-19
    • 2021-06-29
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多