gpt4 book ai didi

swift - 如何设置 AVAudioEngine 输入和输出设备 (swift/macos)

转载 作者:行者123 更新时间:2023-12-03 23:47:20 59 4
gpt4 key购买 nike

我四处寻找,找不到解决此问题的方法。我正在寻找一种方法来更改 AVAudioEngine 的输入/输出设备将在 macOS 上使用。

当简单地播放音频文件时,以下内容按预期工作:

var outputDeviceID:AudioDeviceID = xxx 
let result:OSStatus = AudioUnitSetProperty(outputUnit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &outputDeviceID, UInt32(MemoryLayout<AudioObjectPropertyAddress>.size))
if result != 0 {
print("error setting output device \(result)")
return
}

但是,如果我初始化音频输入(使用 let input = engine.inputNode ),那么一旦我尝试启动引擎,就会出现错误:

AVAEInternal.h:88 required condition is false: [AVAudioEngine.mm:1055:CheckCanPerformIO: (canPerformIO)]



我知道我的播放代码没问题,因为如果我避免更改输出设备,那么我可以听到麦克风和音频文件,如果我更改输出设备但不初始化 inputNode文件播放到指定的目的地。

除此之外,我一直在尝试更改输入设备,我从各个地方了解到以下应该这样做:
let result1:OSStatus = AudioUnitSetProperty(inputUnit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Output, 0, &inputDeviceID, UInt32(MemoryLayout<AudioObjectPropertyAddress>.size))
if result1 != 0 {
print("failed with error \(result1)")
return
}

但是,这不起作用 - 在大多数情况下它会抛出错误(10853),尽管如果我选择具有输入和输出的声卡它会成功 - 似乎当我尝试设置输出或输入节点时实际上是为两者设置设备。

我认为这意味着 AVAudioEngine实例只能处理一个设备,但是使用默认设备(麦克风和扬声器/耳机)很高兴,所以我相信这不是问题。看看我在网上看到的一些解决方案,人们只是简单地更改了默认输入,但这并不是一个非常好的解决方案。

有没有人对这是否可能有任何想法?

值得注意的是 kAudioOutputUnitProperty_CurrentDevice是唯一可用的属性,没有等效的 kAudioInputUnitProperty_CurrentDevice关键,因为据我所知, inputNodeoutputNode被归类为“输出单元”(因为它们都在某处发出声音)。

任何想法将不胜感激,因为这非常令人沮丧!!

谢谢

最佳答案

所以我就这个问题和另一个问题向苹果提出了支持请求,响应确认只能将 AVAudioEngine 分配给单个聚合设备(即同时具有输入和输出 channel 的设备)——系统默认单元有效地创建了一个在内部聚合设备,这就是它们工作的原因,尽管我发现了一个额外的问题,如果输入设备也具有输出功能(并且您激活 inputNode),那么该设备必须同时是输入和输出设备,否则为输出似乎不起作用。

所以答案是我认为没有答案..

关于swift - 如何设置 AVAudioEngine 输入和输出设备 (swift/macos),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61827898/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com