Само устройство является композитным устройством USB с 5 интерфейсами. Функция аудио охватывает интерфейсы 1-4, где интерфейс 1 - это управление аудиосистемой, интерфейсы 2/3 - потоковая передача аудио, а интерфейс 4 - потоковая передача MIDI.
Персонажи в файле Info.plist всегда соответствуют IOUSBInterface для Интерфейс 1 (управление звуком). В macOS 10.14.6 этого всегда было достаточно. Потоковое аудио в формате kext с использованием интерфейса 1/2/3 и драйвера macOS позаботились о MIDI.
В macOS 10.15 при подключении устройства я вижу, что мое устройство появляется на панели управления звуком, но через некоторое время второе устройство появляется. Я полагаю, что это из драйвера класса macOS, потому что имя происходит от дескрипторов USB, представленных устройством. Попытка воспроизвести звук, когда мой драйвер выбран, ничего не дает. Воспроизведение звука, когда выбрано второе устройство, работает.
При тестировании я изменил параметры, чтобы соответствовать всем интерфейсам USB. Проверка в ioreg, что мои объекты kext были подключены к интерфейсам, но драйвер класса macOS все еще отображается на панели управления звуком, когда устройство подключено, и может воспроизводить звук. Я также попытался сопоставить IOUSBDevice и все еще не могу исключить драйвер macOS.
Обратите внимание, что этот драйвер является устаревшим кодом, использующим инфраструктуру IOKit. В частности, объекты IOUSBDevice / IOUSBInterface, IOAudioDevice и IOAudioEngine. В идеале я хотел бы найти способ сделать это в краткосрочной перспективе, выясняя, как будет выглядеть современный аудиодрайвер. API-интерфейсы IOUSBHostFamily, похоже, пришли в то же время, когда IOAudioDevice / Engine устарел, поэтому мне не ясно, как выглядит замена. В документации DriverKit конкретно сказано, что USB-устройство, которое манипулирует звуком, не может использовать DriverKit и должно предоставлять kext. Поэтому я снова в растерянности, чтобы понять, как это будет выглядеть.