1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Scarlett 18i20 gen3 driver (и прочие gen3)

Тема в разделе "WASM.PROJECTS", создана пользователем SadKo, 10 янв 2021.

  1. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.588
    Адрес:
    г. Санкт-Петербург
    В общем, после приобретения 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:

    [​IMG]

    В ближайшее время ко мне должна ещё подъехать карта Scarlett 2i2, так что для неё драйвер также будет протестирован.
     
    UbIvItS и eshmereum нравится это.
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.530
    У 2i2 тоже минимум 2 поколения было.
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.588
    Адрес:
    г. Санкт-Петербург
    Вчера подъехала Scarlett 2i2, и я уже закончил драйвер к ней.
    Красота.
    [​IMG]
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Эмм, не понял, у меня Scarlett Solo вроде Gen2, так я просто подключал ее к компу по USB и нормально писал и воспроизводил с нее, Linux без проблем ее определял и использовал.
     
  5. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.588
    Адрес:
    г. Санкт-Петербург
    Использовать-то использовал, да вот в alsamixer ручек никаких нет.
    А тут я в alsamixer добавил возможность управлять этим устройством. Но это доступно только для gen3, где хардварные push/push кнопки были заменены на софтварные.
     
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    5.443
    SadKo, а как ты смотришь на перспективу создания вайна для драйверов и какие возможные решения по-твоему наиболее лучшие?
     
  7. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.588
    Адрес:
    г. Санкт-Петербург
    Самые лучшие решения - это нативные.
    Wine для драйверов - это костыли.
    Сейчас под Wine, судя по отзывам, даже не все VST-плагины вендовые заводятся. Что уж о драйверах говорить.
    Ну и, к тому же, что такое драйвер под Linux и под Windows. Совсем разные вещи.
    В моём понимании компании типа Focusrite уже давно должны задуматься о том, чтобы если не писать дрова под Linux, то хотя бы спеки на устройства и протоколы взаимодействия открывать.
    А то всё пришлось наработками коллег и протокол-дампами решать.
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    VST3 у меня ни один не завелся, VST2 почти все. Не заводятся те, что требуют каких то дополнительных софтов для установки (типа менеджеры лицензий и тд, как во всяких продуктах IKMultimedia, Native Instruments и других аналогичных контор).
     
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.530
    В миллионный раз сказка про белого бычка, но для конторы такая задумка сулит переквалифицироваться в техподдержку гориллиарда разных линуксовых дистрибутивов. Где у многих пользователей обязательно где-то что-нибудь будет не работать и они станут требовать решить им эту проблему. А описание протокола имело смысл попросить, может быть не отказали бы.
     
    Последнее редактирование: 17 янв 2021
    UbIvItS нравится это.
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    5.443
    так и есть, но наши реалии далеки от разумности :) разумно бы было б, если бы весь софт шёл бы опенсорцом + оси строились бы с жёсткими инженерными стандартами.. Но.. мда.. :)
    Диавольская иЗЪt€№@ :crazy: одна сборка ядра чего стоит == надо кучу хрени выбросить, чтобы ОНО просто собралось:laugh1::laugh2::laugh3:
     
  11. Carnival

    Carnival New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2020
    Сообщения:
    26
    Адрес:
    ::1/128
    Сори за оффтоп, но в чем нужна кастомного драйвера вообще?
    У меня стоит 2i2 и все заработало со стандартными средствами с драйвером на сайте вендора.
     
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Линуксового драйвера нет же.
     
  13. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.588
    Адрес:
    г. Санкт-Петербург
    Тут, по сути, нужен только kernel-драйвер. Никто их морду разрабатывать для Linux не просит. Alsamixer'у все параметры драйвер отдаёт, а желающие написать свой гуй всегда найдутся.

    Я писал в поддержку, ответа не последовало. Видимо, не так настойчиво писал.
    --- Сообщение объединено, 18 янв 2021 ---
    Ввести три команды в консоли и подождать их выполнения - это теперь непосильная задача?
     
  14. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.530
    Я много лет назад пробовал собрать ядро 2.4 из дистрибутива ASP Linux. Это были три команды и много часов исполнения танца дождя, чтобы они завершились успешно. С получившимся ядром кстати паника случилась при загрузке.
     
  15. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.588
    Адрес:
    г. Санкт-Петербург
    Не знаю, что много лет назад было. Сейчас по моей документации даже совсем незнакомые с программированием linux-пользователи могут собрать своё кастомное ядро с накинутым патчем:
    https://github.com/sadko4u/focusrite-scarlett-backports/blob/master/README.md
     
  16. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    5.443
    линь ядро может быть собрано с самыми разными опциями и далеко не все варианты рабочие.. тут не надо путать кастомные билды и дефолтные :grin:
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    SadKo, немного оффтопа: как считаешь имеет смысл накатывать риалтайм ядро? Я вообще всегда жил и писал аудио без него.
     
  18. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.588
    Адрес:
    г. Санкт-Петербург
    Вся пляска вокруг RT основывается на том, чтобы получить минимальный размер буфера, который будет прилетать от звуковой карты. Например, 32 или даже 16 семплов. Понятное дело, что для обработки всего этого нужно совсем другое планирование задач.
    Просто для задач обработки/сведения, где можно поставить большие буферы (от 512 семплов и более) RT, в принципе, не особо нужно.
     
  19. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.530
    Минимальный лаг важен, если есть обратная связь. Например когда эмулируешь стек для электрогитары на ПК. Если задача тупо записать аудио, то какая разница?
     
  20. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.404
    Ну я запускал гитарриг и хеликс нейтив через вайн и линвст внутри рипера без риалтайм ядра, задержка была ощутима на слух, для живых выступлений это возможно не годится, но для записи можно и такой обойтись.