Swift AVAudioEngine:更改MacOS的音频输入设备
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
已经有一段时间了,但我认为没有必要连接内置的引擎节点。至少不是输出。
从docs为mainMixerNode
:
首次访问该属性时,音频引擎构建一个单独的主混音器并根据需要将其连接到outputNode。
我还尝试使用node.outputFormat(forBus: 0)
检查有问题的节点的格式,并且可能在this answer中进行连接时明确设置格式。
以上是关于Swift AVAudioEngine:更改MacOS的音频输入设备的主要内容,如果未能解决你的问题,请参考以下文章
AVAudioEngine MIDI 文件播放(当前进度+MIDI 结束回调)Swift
使用 Swift 使用 AVAudioEngine 实时进行音高转换
在 Swift 中使用 AVAudioEngine 点击麦克风输入
Swift AVAudioEngine - 如何使本地麦克风静音