LINUX.ORG.RU

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

 , ,


0

1

В общем, после приобретения 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, так что для неё драйвер также будет протестирован.

★★

А они(Scarlett xx) разве требуют каких-то спецдрайверов? Моя Solo нормально работает, и 2i4 тоже сразу завелась. Или это касается многоканальных?

S_Paul ★★★★★
()
Ответ на: комментарий от S_Paul

Многоканальных в первую очередь (там есть встроенные микшер и роутер, которые лично я использую при записи). У одноканальных есть определённые ручки типа Pad/48V/Air, которые также можно из софта рулить, но без дров alsamixer показывает пустоту. Другое дело, что у этих девайсов конфигурационное пространство - всего несколько десятков байт.

Если есть solo gen3, было бы прикольно снять с неё дампы, чтобы удостовериться, что её конфигурационное пространство не отличается от 2i2.

sadko4u ★★
() автор топика
Ответ на: комментарий от Jack_Vo

Ага. И, видимо, в gen3 она реинкарнировалась в Scarlett 4i4.

sadko4u ★★
() автор топика
Ответ на: комментарий от S_Paul

Да, насчёт «не существует» - это я погорячился. Имел в виду gen3, разумеется. А какая причина продажи? Что-то не устроило?

sadko4u ★★
() автор топика
Ответ на: комментарий от sadko4u

Всё с картой хорошо было, просто осознал что мне без надобности. Ну и хороший человек попросил продать.

Так и пользуюсь Solo. Кстати, вот теперь коски полезли - потенциометр громкости стал шуршать и даже прерываться. Сам потенциометр хорошо впаян, замену я пока не нашёл. USB иногда теряет контакт если аппарат пошевелить.(это было сразу)

S_Paul ★★★★★
()
Последнее исправление: S_Paul (всего исправлений: 2)
Ответ на: комментарий от ChekPuk

Фигасе… Молодец. А ты в фокусрайт не обращался? Пусть бы тебя на работу взяли.

Я думаю, у них и так софт на аутсорсе пишется. Но, конечно, при наличии документации процесс разработки был бы куда быстрее.

Кстати, проверил все каналы микшера на 18i20 - работает без проблем.

А вот хардварная ручка громкости мониторинга ведёт себя так себе при повороте: заметны резкие скачки громкости, если подать синусоиду на наушники и покрутить.

sadko4u ★★
() автор топика
Ответ на: комментарий от sadko4u

Ммм... Я, конечно, не знаю что у тебя и как, но представляю такую ситуацию:

Эта ручка - потенциометр. Поставил ты на нём 50%, драйвер/микшер в компе отреагировал, скорректировался, отослал команду звуковухе поставить 50, продублировал, щелчок. Теперь ты в компе ставишь 60%, комп даёт команду звуковухе, та ставит 60, щелска нет. Потом ты снова крутишь потенциометр, считывается позиция, но как только ты начал крутить, ручка встала в 50.1, например, звуковуха сбросила с 60 на 50.1, отослала сигнал в комп, драйвер/микшер среагировали, отослали обратно 50.1, щелчёк, потому что разница заданного и фактического, а также запоздание реакции от компа. Но ты крутишь ручку и опять сигнал обрабатывается картой, отсылается в комп, приходит обратно и т.д. Именно такую ошибку бы сделал я :) (я бы ещё хуже сделал).

Или проблема в дублировании команд от компа, или в том, что ручка не энкодер, а потенциометр.

ChekPuk ★★★
()
Ответ на: комментарий от ChekPuk

Вообще-то, при хардварном контроле (повороте ручки) аппаратура сама выставляет громкость каналов. В драйвер прилетает просто нотификация (usb interrupt) о том, что громкость поменялась и её надо перечитать из конфигурационного пространства.

При этом, как ни странно, встроенный микшер работает плавно даже при резких скачках громкости.

sadko4u ★★
() автор топика
Ответ на: комментарий от sadko4u

В драйвер прилетает просто нотификация (usb interrupt) о том, что громкость поменялась и её надо перечитать из конфигурационного пространства.

А ты уверен, что микшер (какой-нибудь из) не шлёт команду?

При этом, как ни странно, встроенный микшер работает плавно даже при резких скачках громкости.

Что и навело меня на мысли.

Я не знаю, сработает ли, но попробуй подключить звуковуху только к питанию и покрутить крутилки, пуская звук, естественно. Если скаки есть, значит тупо их проблема.

ChekPuk ★★★
()
Ответ на: комментарий от ChekPuk

Ну я же логи драйвера (dmesg) смотрел. Не помню, чтобы там специальная команда на изменение громкости отправлялась. Хотя проверить ещё раз имеет смысл.

sadko4u ★★
() автор топика

Ну что, ко мне сегодня, наконец, приехала Scarlett 2i2 gen3. И к текущему моменту я добавил уже в микшер возможность управлять:

  • кнопками Inst;
  • кнопками air;
  • функцией direct monitor;
  • кнопкой фантомного питания.

Осталось добавить управление режимом msd, retain 48v (уверен, что есть) и gain halos (уверен, что тоже конфигурируется).

sadko4u ★★
() автор топика

В общем, нашёлся человек, который купил Scarlett Solo и предоставил USB Id устройства. Так что драйвер поддерживает и Scarlett Solo тоже.

sadko4u ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.