В общем, после приобретения Focusrite Scarlett 18i20 gen3 уже некоторое время плотно занимаюсь написанием драйвера микшера для Scarlett 18i20.
Изначально драйвер разрабатывал Geoffrey Bennet, и вот его github-репозиторий:
https://github.com/geoffreybennett/scarlett-gen2
Я, купив девайс, пропатчил своё штатное linux-ядро, идущее с дистрибутивом openSUSE Leap, и обнаружил драйвер полностью непригодным к gen3-устройствам. Мало того, он ещё и заставлял alsamixer впадать в «вечные циклы» (наперёд: ошибка была простая, но коварная).
В итоге, на данный момент мы имеем драйвер, который почти полностью (а местами даже и больше) поддерживает карту на частотах дискретизации 44.1 и 48 кГц. Для этого пришлось провести достаточно основательный реверс-инжиниринг протокола взаимодействия драйвера и звуковой карты.
В итоге, имеем следующий репозиторий:
https://github.com/sadko4u/focusrite-scarlett-backports
Здесь опубликованы патчи для RT-ядра и Default-ядра openSUSE Linux, а также патч для ванильного ядра 5.9.0 (по просьбе трудящихся).
Также в репозитории присутствуют:
- исходные коды драйверов для отладки (debug-drv)
- исходные коды драйверов для публикации (prod-drv)
- сопутствующая информация по реверс-инжинирингу (reverse-eng):
- описание конфигурационного пространства звуковой карты;
- PCAP-дампы обмена данных по USB-шине для разных устройств;
- утилита для автоматической дешифровки PCAP-дампов и упрощения процесса реверс-инжиниринга.
В итоге, сейчас имеем:
- Возможность воспроизводить и захватывать звук на устройствах 18i20 и 18i8 (спасибо Dirk Lattermann за соучастие).
- Полноценно работающий роутинг с сохранением состояния в конфигурационном пространстве устройства, совместимый с оригинальным Focusrite Control (ну почти).
- Работающий микшер (полная корректность пока не проверялась, для 18i8 заявлено, что работает не всё).
- Работа кнопок INST/PAD/DIM/MUTE/Talkback.
- Переключение мониторинга между режимами Off/Main/Alt monitoring control.
- Включение/выключение кнопок фантомного питания программно (чего нет в Focusrite Control) и возможность сохранения состояния фантомного питания после выключения/включения устройства.
- Управление мониторинг-секцией.
- Поддержка Mute для всех физических выходов (как в FC).
Ну и скриншот с замером roundtrip latency между 7-ым аналоговым выходом и первым аналоговым входом на моём ноутбуке ASUS TUF Gaming:
Замер roundtrip latency Scarlett 18i20
В ближайшее время ко мне должна ещё подъехать карта Scarlett 2i2, так что для неё драйвер также будет протестирован.
lsp-plugins, драйвер, от автора