如何在CoreAudio中输出多个设备的音频?

问题描述 投票:0回答:1

Audio Midi Setup
允许从多个设备输出单个声源,但是在
CoreAudio
中有没有办法做到这一点?

可以通过将相同的

playerNode
附加到两个
AVAudioEngine
来完成吗?我想过这样做,但它抛出了堆栈跟踪并给了我一个错误。

swift macos core-audio
1个回答
0
投票

这能解决您的问题吗

import CoreAudio

// Get the default output device
var defaultOutputDeviceID = AudioDeviceID(0)
var defaultOutputDeviceIDSize = UInt32(MemoryLayout<AudioDeviceID>.size)
var getDefaultOutputDeviceIDStatus = AudioObjectGetPropertyData(AudioObjectID(kAudioObjectSystemObject), &AudioObjectPropertyAddress(kAudioHardwarePropertyDefaultOutputDevice), 0, nil, &defaultOutputDeviceIDSize, &defaultOutputDeviceID)

// Get the number of output devices
var outputDeviceCount = UInt32(0)
var outputDeviceCountSize = UInt32(MemoryLayout<UInt32>.size)
var getOutputDeviceCountStatus = AudioObjectGetPropertyData(defaultOutputDeviceID, &AudioObjectPropertyAddress(kAudioHardwarePropertyDevices), 0, nil, &outputDeviceCountSize, &outputDeviceCount)

// Get the IDs of all output devices
var outputDeviceIDs = [AudioDeviceID](repeating: 0, count: Int(outputDeviceCount))
var outputDeviceIDsSize = UInt32(MemoryLayout<AudioDeviceID>.size * Int(outputDeviceCount))
var getOutputDeviceIDsStatus = AudioObjectGetPropertyData(defaultOutputDeviceID, &AudioObjectPropertyAddress(kAudioHardwarePropertyDevices), 0, nil, &outputDeviceIDsSize, &outputDeviceIDs)

// Set the output device IDs to the first two devices
var outputDeviceIDsToSet = [outputDeviceIDs[0], outputDeviceIDs[1]]
var outputDeviceIDsToSetSize = UInt32(MemoryLayout<AudioDeviceID>.size * outputDeviceIDsToSet.count)
var setOutputDeviceIDsStatus = AudioObjectSetPropertyData(defaultOutputDeviceID, &AudioObjectPropertyAddress(kAudioAggregateDevicePropertyComposition), 0, nil, outputDeviceIDsToSetSize, &outputDeviceIDsToSet)
© www.soinside.com 2019 - 2024. All rights reserved.