Я пытаюсь найти способ проверить, относится ли аудиоустройство к дисплею.
У меня подключен монитор LG Ultrawide, который можно определить с помощью CGDirectDisplayID
. Из информации на дисплее я могу получить его имя: LG ULTRAWIDE
Теперь для тестирования я использую следующий код для получения аудиоустройства по умолчанию (LG Ultrawide):
var deviceID = AudioDeviceID(0)
var size = UInt32(MemoryLayout.size(ofValue: deviceID))
var address = AudioObjectPropertyAddress(mSelector: kAudioHardwarePropertyDefaultOutputDevice, mScope: kAudioObjectPropertyScopeGlobal, mElement: kAudioObjectPropertyElementMaster)
let err1 = AudioObjectGetPropertyData(AudioObjectID(kAudioObjectSystemObject), &address, 0, nil, &size, &deviceID)
if err1 != 0 {
print("error: \(err1)")
}
var deviceName = "" as CFString
size = UInt32(0)
address = AudioObjectPropertyAddress(mSelector: kAudioDevicePropertyDeviceNameCFString, mScope: kAudioObjectPropertyScopeGlobal, mElement: kAudioObjectPropertyElementMaster)
AudioObjectGetPropertyDataSize(deviceID, &address, 0, nil, &size)
let err2 = AudioObjectGetPropertyData(deviceID, &address, 0, nil, &size, &deviceName)
if err2 != 0 {
print("error: \(err2)")
}
print("deviceName: \(deviceName)")
Важной вещью здесь является deviceName
. Однако это работает не так, как ожидалось.
В этом случае deviceName
содержит "DisplayPort"
вместо "LG ULTRAWIDE"
.
System Preferences -> Sound -> Output
показывает:
Name | Type
LG ULTRAWIDE | DisplayPort
так что, кажется, вместо имени возвращается тип.