【问题标题】:Swift AVAudioEngine: Changing the Audio Input Device for MacOSSwift AVAudioEngine:更改 MacOS 的音频输入设备
【发布时间】:2019-03-19 23:56:43
【问题描述】:

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

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) 是正确的,因为使用随机数会产生不同的错误。

我做错了什么?

【问题讨论】:

  • 一年过去了,但我有同样的问题。你解决了吗?
  • @StefanoBider 老实说,我忘了。我们可能找到了不同的解决方案。我不再从事那个项目,所以我无法检查。对不起。

标签: swift macos avfoundation avaudioengine


【解决方案1】:

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

您到底想达到什么目的?好久没看AVAudioEngine了,不过我觉得没必要连接内置引擎节点。至少不是输出。

docsmainMixerNode

当第一次访问该属性时,音频引擎会构建一个单例主混音器并按需将其连接到 outputNode。

我还会尝试使用node.outputFormat(forBus: 0) 检查违规节点的格式,并可能在建立连接时明确设置格式,例如this answer

【讨论】:

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