我正在努力解决一个简短的问题: 有没有办法检查我的AudioDeviceID是否是一个聚合设备? 我不知道如何检查这个,因为我没有找到一个可以与AudioObjectGetPropertyDataSize一起使用的相应选择器。 提前谢谢!
答案 0 :(得分:2)
所以我自己想出了一个解决方案:
获取属性kAudioAggregateDevicePropertyActiveSubDeviceList
如果没有子设备,则会将OSStatus
设置为noErr
以外的其他设置。如果是这种情况,您可以假设您手上有一个聚合设备。
答案 1 :(得分:1)
这是我在搜索Coreaudio-api邮件列表档案时遇到的另一个选项(其中有一些非常有用的东西,尽管可能需要一些搜索)。
集合设备具有独特的类ID kAudioAggregateDeviceClassID
,因此检查起来会更加直接。
此片段似乎可以解决问题:
AudioObjectPropertyAddress classAddress = {
kAudioObjectPropertyClass,
kAudioObjectPropertyScopeGlobal,
kAudioObjectPropertyElementMaster
};
AudioClassID classId;
size = sizeof(AudioClassID);
err = AudioObjectGetPropertyData(ioDeviceId, &classAddress, 0, NULL, &size, &classId);
对于聚合设备,classId
将是kAudioAggregateDeviceClassID
('aagg'
),而不是kAudioDeviceClassID
或其他类别ID之一。
原始来源: https://lists.apple.com/archives/Coreaudio-api//2009/Oct/msg00182.html