Swift AVAudioEngine:更改 MacOS 的音频输入设备



我正在尝试更改用于收听传入音频的输入设备。 我已经尝试了许多解决方案,但大多数在准备和启动音频引擎时最终出现以下错误:

AVAEInternal.h:82:_AVAE_CheckAndReturnErr: required condition is false: [AVAudioEngineGraph.mm:1295:Initialize: (IsFormatSampleRateAndChannelCountValid(outputHWFormat))]

当前(简化(代码:

var engine = AVAudioEngine()
var inputDeviceID: AudioDeviceID = 41 // another audio input device
let sizeOfAudioDevId = UInt32(MemoryLayout<AudioDeviceID>.size)
let error = AudioUnitSetProperty(engine.inputNode.audioUnit!, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &inputDeviceID, sizeOfAudioDevId)
if error > 0
{
print(error)
}
let inputNode = engine.inputNode
engine.connect(inputNode, to: engine.mainMixerNode, format: nil)
engine.connect(engine.mainMixerNode, to: engine.outputNode, format: nil)
engine.prepare()
do
{
try engine.start()
}
catch
{
print("Failed to start the audio input engine: (error)")
}

audioDeviceId (41( 是正确的,因为使用随机数会给出不同的错误。

我做错了什么?

由于硬件问题,我无法正确测试您的代码。哪一行抛出错误?

你到底想实现什么?我已经有一段时间没有看过AVAudioEngine了,但我认为没有必要连接内置引擎节点。至少不是输出。

来自mainMixerNode的文档:

首次访问该属性时,音频引擎构造一个单例主混音器,并根据需要将其连接到 outputNode。

我还会尝试使用node.outputFormat(forBus: 0)检查违规节点的格式,并且可能会在建立连接时显式设置格式,如本答案所示。

最新更新