Как получить соответствующее аудиоустройство для отображения в Swift? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь найти способ проверить, относится ли аудиоустройство к дисплею.

У меня подключен монитор 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

так что, кажется, вместо имени возвращается тип.

...