Меня это задолбало - управлять громкостью, если источников звука больше одного, особенно больно, когда надо сделать тише/громче быстро, за пару секунд. Если играете в динамичные игры с дискордом, да ещё и музыку фоном включаете, думаю вы прекрасно знаете эти неудобства. И вот, в один прекрасный день я наткнулся на Deej...
А в чем собственно проблема?
Казалось бы, есть отличное решение для управления громкостью любого приложения - дефолтный микшер винды, какбы да, но нет. Это хорошая вещь, но для того, что бы им воспользоваться надо совершить следующий обряд:
Alt tab из текущего приложения, если курсор захвачен
ПКМ по значку громкости
Выбрать пункт выпадающего меню для открытия микшера
Иногда приходится выбирать устройство вывода звука, почему то иногда винда считает, что мне нужно управлять громкостью монитора, на который никогда ничего не выводилось
Найти нужное приложения пролистав горизонтальный список, или расширив окно
Ура! Наконец то можно поменять громкость
Естественно это занимает какое то время, и за это время в игре может произойти что угодно. Поэтому порой проще подвинуть ползунок в плеере, или в настройках приложения, а потом не понимаешь, почему звук тихий.
Deej
На просторах гитхаба есть один хороший проект - deej, он идеально решает поставленную задачу, собирается легко из ардуйни и картона, но это не спортивно, список приложений намертво прикручен к ползунам, хочешь больше приложения - либо накидывай больше слайдеров, либо биндь несколько приложений на один потенциометр и запоминай, где есть что. Да и выглядят типовые конструкции не очень - где любимая ЛГБТ RGB подсветка?
В общем было разработано следующее ТЗ:
Внешний вид - как у заводского устройства, никакой изоленты и 3д печати там, где это будет бросаться в глаза
Индикация приложения, которое регулируется, что бы не забивать память, куда же я там приложение забиндил
Наличие подсветки - не видел ни в одном из существующих микшеров. Что у DIY, что у профессиональных подсветки слайдеров нет. С моей точки зрения это должно выглядеть круто + технический челенж
Минимальные размеры, но не в ущерб удобству
По возможности минимальный бюджет
Задача со звездочкой - bluetooth. До сих пор не знаю, зачем, но звучит круто
Концепт
Изначально я хотел свести использование 3д печати к минимуму, и сделать всю конструкцию на печатных платах, но это никак не сочиталось с минимальным бюджетом, поэтому количество ПП было сведено к минимально необходимой двойке
В качестве платформы рассмативались контроллеры от nordic, espressif и rp2040 от raspberry, хотелось пощупать nRF, но экономически они дороже и достать чуть сложнее, rp2040 не имеет блюпупа, поэтому выбор пал на ESP32-C3, а точнее на модуль на его основе ESP32 C3 SUPER MINI.
Да как тебя впихнуть???
Оказалось, что вписаться в 100х100мм печатной платы (как правило ПП стоят дороже при выходе за эти пределы), запихав при этом туда пять слайдеров и кучу адресной ленты между ними не такая простая задача, как казалось на первый взгляд. Как ЭТО собирать я не представлял, но вроде должно впихнуться. Ах да, спереди есть выемка, туда же можно запихать аккумулятор для автономки по bluetooth!
5 дисплеев? На один контроллер I2C?
Перерыв половину алиэкспресса были найдены десятки дисплеев, но все не то, либо маленькие, либо большие, либо I2C only, либо надо городить внешний DC-DC для повышения напряжения. В итоге идеальный дисплей был найден, но вот незадача - он поддерживает только I2C, а бит выбора адреса всего один, то есть 3 устройства с одинаковым адресом будут в любом случае.
Что сделал бы нормальный человек в этом случае? Прочитать документацию на микроконтроллер? Воткнуть мультиплексер? Слишком скучно, надо велосипед, да ещё и с квадратными колесами. В итоге был рожден I2C с CS. Спойлер - он даже заработал, но нашлось решение поприличнее - ESP32C3 имеет pinmux, и можно тупо переназначать выводы для I2C в процессе работы
Принципиальная схема
В остальном, что схема, что топология примитивны, BOM минимальный, аккумулятор можно выкинуть, тогда схема становится вообще элементарной. Хотя и в такой простоте получилось наделать ошибок...
Топология
Сборка
Я же сказал, что не оценивал трудоемкость сборки? За компактность надо платить, а компонентов заказано на 4 изделия...
Много фоток процесса сборки
После пары часов мучений (далеко не последних), получается такая сборка
С отражателями вышло весело - изначально рассчитывали, что рассеиватели из PETG будут недостаточно прозрачными и надо делать их специальным образом, что бы добиться полной прозрачности. После десятков образцов пришли к тому, что светодиодная лента наоборот, слишком яркая и можно просто печатать прозрачным PETG без доп настроек. Почему нельзя было просто сразу приложить к ленте? Рассеиватели разрабатывались, когда компоненты ещё на почту не пришли.
Установка рассеивателей - тот ещё квест, это практически единственный компонент, который держится на клею
Прошивка
Так как проект хоббийный, я решил поэксперементировать и попробовать все же перелезть с чистого С на С++, собственно по этой причине прошивка представляет собой невнятный кусок говнокода, который в процессе разработки оброс extern'ами, и прочей ересью, если вы хоть раз начинали новый проект на новом стеке, я думаю прекрасно понимаете о чем речь...
Из интересного - в предыдущем пункте я писал, что светодиоды оказались слишком яркими, и оптимальная яркость - 5. Нет, не 5%, хуже, 5 уровней яркости из 256, в пространстве RGB это всего 125 цветов, что мало для плавных анимаций. Выход? Есть
Можно использовать ШИМ. Не совсем ШИМ конечно, но что-то очень похожее. Да, звучит как бред, шимировать адрессные светодиоды, но это работает. Всего светодиодов последовательно 101, надо передавать 24бит на один диод, соответственно надо передать 2424 бита данных, при частоте передачи 800кГц это значит, что можно обновлять все светодиоды 330 раз в секунду. Соответственно если передавать подряд 2 яркости попеременно, можно получить промежуточные значения, на глаз мерцание не заметно, зато дополнительный бит для каждого цвета дает увеличение цветового пространства в 8 раз! С палитрой из 1000 цветов анимации получаются гораздо плавнее.
Bluetooth все же после долгих попыток удалось завести - сначала я не понимал, почему в ESP32C3 нет bluetooth, хотя в примерах он должен быть... Да, я снова забил на документацию, и пропустил абзац, что в C3 нет bluetooth, есть только BLE. Ну чтож, привет новый стек. Вроде бы все отлично? Но почему то даже примеры из ESP-IDF не работали, спасибо китайцам за бракованный чип, в котором не работал радиомодуль, а через несколько недель он вообще откинулся, подкинув квест - разбирать и перепаивать на новый модуль. Так или иначе, BLE был побежден.
Потенциометры такого формата бывают абсолютно разные, одни линейные, другие логарифмические (или какие они, хз, но точно не линейные), да ещё и бывают с разными коэфициентами. У меня именно такие, логарифмические - документации естественно никакой нет, кроме шакальных изображений с размерами от продавца на али, и то, не всеми.
Поэтому есть процедура калибровки, исходя из крайних положений и средней точки можно программно любой потенциометр превратить в линейный (спасибо ChatGPT, без него на математику ушло бы явно больше времени, чем 3 минуты). При включении надо зажать кнопки сзади, и следовать инструкции на экране
Осталось дело за малым - написать софт для ПК
ПКшный софт
Тут мои полномочия все, писать под python что-то сложнее скриптов с помощью ChatGPT я не уметь. Благо работал над этим проектом не один, и софт под ПК писал не я. Понятия не имею, как оно работает внутри, но работает хорошо. Все что требуется от пользователя - нарисовать иконки для своих приложений и запустить EXE.
Протокол обмена сделан таким образом, что он полностью совместим с deej, правда вывод иконок работать не будет
BOM
Не уверен, что я учел все компоненты, ибо часть брал из своих запасов, но это копеечная мелочевка. Итоговая стоимость получилась ~3000Р на один экземпляр в рассчете на изготовление 4шт. Так что и этот пункт ТЗ удалось выполнить. Естественно, не включая стоимость 3д печати и времени потраченного на сборку.
Желтым отмечены компоненты на блок кнопок (пауза, следующий/предыдущий трек), в корпусе расположены магниты и контактные площадки для этого блока, но его делать лень. По задумке он должен прикрепляться слева и держаться на магнитах.
Режимы работы
По функционалу режимов работы всего 2 - BLE и проводной. BLE включен всегда, никой процедуры подключения не требует, и если на ПКшном клиенте включен режим блютуза, соединение произойдет автоматически. То же самое по проводу, USB-CDC драйверов не требует.
Так как ничего, кроме подсветки настраивать собственно нечего, все настройки микшера относятся именно к ней. Настроить можно практически любой переодичный/статичный эффект
К сожалению, не все идеи работают одинаково хорошо, на то, что бы визуализировать громкость процесса так, же как это делает стандартный микшер винды было протрачено очень много времени, но результат получился так себе, зато я точно понял, что не хочу писать под WinAPI
Финал
Осторожно, ЗВУК! Собственно, демонстрация работы в реальности, примерно в таком сценарии оно используется уже больше месяца и все прекрасно работает
Ссылки на репозитории
Основной репозиторий (Прошивка/железо/3Д модели)
Пока планов на написание документации по сборке нет, так как не уверен, что это хоть кому то надо, если будет интерес, запилю.
Комментарии (74)
soymiguel
03.07.2024 21:01+27… и когда окончательно, по результатам десятилетия, признается, что хабр уже не торт, внезапно появляется герой, который вывозит.
Heggi
03.07.2024 21:01Отлично. Даже захотелось повторить. Но софт на питоне под винду... пугает...
voldemar_d
03.07.2024 21:01спасибо ChatGPT, без него на математику ушло бы явно больше времени, чем 3 минуты
А что там за математика? Таблица значений, между которыми делается интерполяция?
Ещё непонятно, почему маленькие дисплеи мерцают. На них изображение постоянно стирается и обновляется?
По поводу того, что на профессиональных микшерах нет индикаторов - возможно, они отвлекают, когда их много. Либо банально дорого их много ставить в один микшер. Плюс, светодиодная лента выгорает и выходит из строя.
зато я точно понял, что не хочу писать под WinAPI
А что здесь делается через WinAPI?
Radisto
03.07.2024 21:01А что здесь делается через WinAPI?
Как я понимаю, микширование. Судя по всему, эти аппаратные микшеры - не аппаратные микшеры, а пульт от программного, который реализуется стандартными функциями
voldemar_d
03.07.2024 21:01Если я правильно понимаю, положение бегунков должно передаваться в системный микшер Windows. Но как это можно сделать, не пользуясь Windows API?
nafikovr
03.07.2024 21:01так он и используется через pywin32. я думаю автор просто в очередной раз намекнул на ректальные подходы в winapi вызывающие конкретное желание больше туда не лезть
voldemar_d
03.07.2024 21:01+3Что в них "ректального"? Я понимаю, что питон проще, чем C++, но внутри он тот же WinAPI вызывает. Этак можно и ассемблер назвать "ректальным", просто потому, что он сложнее питона.
nafikovr
03.07.2024 21:01+1не в питоне дело, а в самом WinAPI. не знаю как у вас, но у меня всегда стойкое желание обходить его стороной когда это возможно
voldemar_d
03.07.2024 21:01+2Есть API, есть документация к нему. Дальше - либо пользуетесь, либо нет, если есть возможность и нет желания.
vvzvlad
03.07.2024 21:01+1Это не отменяет некоторых... копроректальных подходов, которые можно было явно сделать лучше.
NutsUnderline
03.07.2024 21:01+1есть проблемка. они в каждой версии винды перепахивают доступ к микшеру и вообще звуковую систему, да еще не особо документируют
voldemar_d
03.07.2024 21:01Ну это даже по внешнему виду микшера понятно. Хотя бы обратную совместимость сохраняют?
nafikovr
03.07.2024 21:01Меня больше смущают копролиты в апи, которые как бы не легаси, но с доисторических времен не менялись.
Совместимость это конечно хорошо, но не с софтом 90 года же...
kenomimi
03.07.2024 21:01Как минимум xxxA / xxxW - бесит люто. Можно использовать скрывающие это макросы, конечно, но до первой либы, которая поддерживает только один тип стрингов.
С другой стороны, у винды хорошая дока, и многий шаблонный код умеет писать AI Bing из браузера, не говоря уже про чатгпт...
voldemar_d
03.07.2024 21:01+1Как минимум xxxA / xxxW - бесит люто
А что именно бесит? Названия функций с буквой A или W в конце? В юникодном приложении обычно уже никаких A/W указывать не нужно.
но до первой либы, которая поддерживает только один тип стрингов
Не помню, когда в последний раз встречал такую либу.
little-brother
03.07.2024 21:01+5xxxA версии нужны только для поддержки старого кода времен Windows95/98. Имхо сейчас имеет смысл сразу определять макрос UNICODE, и использовать xxx-имена, без W. C-либы с char по сути работают с UTF8, в то время как Windows работает с UTF16, что просто надо держать в уме и выполнять перекодирование, когда это требуется.
Лично у меня WinAPI вызывает скорее восхищение, учитывая, что этому API более 30 лет, и ему пришлось столкнуться с тем, на что он не был рассчитан, напр. hiDPI и темами оформления, при помощи костылей это всё равно было решено. Самый большой плюс - код на нем просто работает, как на Win95, так и на Win11. На том же Android каждые пару лет старые методы объявляются deprecated и пишется замена.
jonic
03.07.2024 21:01Видимо именно по этому была целая гора попыток сделать нормальный ui, а не вот это похожее на win95? А то ведь если createWindow то только win95 или около того и получится, не?)
AiR_WiZArD Автор
03.07.2024 21:01+1А что там за математика? Таблица значений, между которыми делается интерполяция?
Чуть более сложно, но все равно проще, чем то, что удалось найти за пару минут с гуглом.
Ещё непонятно, почему маленькие дисплеи мерцают. На них изображение постоянно стирается и обновляется?
Это особенность подобных монохромных OLED дисплеев, они на камеру мерцают, глазами не видно
А что здесь делается через WinAPI?
Захват звука с конкретного процесса, а не всего аудиоустройства целиком. Там API добавили только в win11, в современных win10 тоже работает, но что бы понять, что именно нужно использовать, надо пройти долгий путь. А так да, пример лежит на сайте microsoft.
voldemar_d
03.07.2024 21:01Захват звука с конкретного процесса, а не всего аудиоустройства целиком.
Что-то я сомневаюсь, что на питоне это можно как-то проще сделать (если вообще возможно).
jonic
03.07.2024 21:01Да куда уж там, COM объекты это боль как не крути)
voldemar_d
03.07.2024 21:01А что такого сложного в COM-объектах?
jonic
03.07.2024 21:01Чтож, 20 лет назад когда мне было 13 лет мне они казались куда стремнее. Посмотрел сейчас - действительно не так уж ужасно.
DenSigma
03.07.2024 21:01+10Чувак! В продакшн! Быстро, решительно! Я бы купил.
AiR_WiZArD Автор
03.07.2024 21:01+2Я без понятия как это можно сделать, когда даже на kickstarter просто так выйти не получится, так что opensouce. Исходники со временем отрефакторю, инструкцию сделаю
Komrus
03.07.2024 21:01А на отечественный краундфандинговый planeta.ru - нет ли возможности выйти?
Ибо тоже подумал, что детям такие вещи в подарок забавно было купить...
PS. Возможно даже в виде kit'а для самостоятельной сборки...
Spyman
03.07.2024 21:01Если где-то выложите - маякните, я б тоже купил. Идея гениальная, давно хотел такую чтуку, но не знал об этом))
Для компактности наверное можно было бы вариант с крутилками сделать)
Zara6502
03.07.2024 21:01Alt tab из текущего приложения
25 лет назад - ну наверное, в остальном - клавиша Win, она, к тому же, исключает проблему отсутствия другого приложения для переключения, показывает сразу панель задач и трей, так как современные fullscreen игры таковыми могут не являться и рендериться просто в окне без рамок.
Найти нужное приложения пролистав горизонтальный список, или расширив окно
ни разу не видел там больше трех ползунков XD а у вас на картинке прям целая портянка.
ИМХО, но вы сначала создали проблему, а потом её героически решили.
nafikovr
03.07.2024 21:01+3Там всегда 2 системных ползунка + один на каждое приложение с выводом звука. пример скорее всего утрированный но 5-6 набираются легко.
По поводу того что можно вызвать микшер проще. После появления макропада с энкодером я однозначно могу сказать, что аппаратная крутилка громкости намного удобнее даже по сравнению с клавишами регулировки громкости на клавиатуре. Ну и это просто красиво
Zara6502
03.07.2024 21:01+1пример скорее всего утрированный но 5-6 набираются легко.
у меня открыт ТГ, вацап, браузер яндекса и edge, но в панельке наблюдается только яндекс.
и я просто не могу представить сценарий, когда бы мне пригодилось регулировать громкость этими ползунками. За всё время начиная с вин8 я этого не делал ни разу.
на клавиатуре кнопочки +- для громкости, остальное один раз выставил и пользуюсь, на худой конец в игре что-то нужно сделать - там есть своя настройка звука. Просто я не могу себе представить сценарий автора, где игра, собеседники в дискорде, какого-то лешего еще и отдельно музыка и вдруг, зачем-то во время катки мне потребовалось эксклюзивно поменять на 3,5% громкость музыки. Я бы лучше вас из пати выкинул чтобы вы не слили игру )
nafikovr
03.07.2024 21:01ну не сценарии не ограничены играми. мне, например, часто приходится приглушать музыку во время просмотра видео. еще некоторые приложения любят перехватывать события от кнопок изменения громкости, что при фоновой музыке скорее мешает чем помогает.
в целом я к тому что не всегда проблема искусственно создана. возможно для автора это вполне себе типичный юзкейс.
Zara6502
03.07.2024 21:01+2мне, например, часто приходится приглушать музыку во время просмотра видео
по мне так невозможный сценарий
nafikovr
03.07.2024 21:01ну так это для вас. для меня регулярный (музыка играет фоном всегда, периодически приходится смотреть видео от заказчиков вслушиваясь что они там за кадром и ветром говорит)
Zara6502
03.07.2024 21:01+1музыка играет фоном всегда
вы думаете если перегружать мозг то вам станет лучше? а уши у вас из титана?
вслушиваясь что они там за кадром и ветром говорит
ну то есть вы сами себе воздали проблему и потом её героически решили.
nafikovr
03.07.2024 21:01+2мне комфортнее работать под определенную музыку вместо рандомного окружающего звука. и да, если в таком ключе рассуждать, то все мы сами создаем себе проблемы. а если посмотреть с другой стороны, то я создал себе комфортную обстановку для работы и стремлюсь ее улучшать.
Limansky
03.07.2024 21:01Код можно и нужно рефакторить, что будет в процессе, а вообще проект внешне продуман и красив, но тоже можно причесать немного шероховатости )).
Treviz
03.07.2024 21:01+2Неплохо! Так можно и до проф. контроллеров дойти. Только за гораздо меньшие деньги.
Не хватает:
Моторизированных фейдеров - тогда можно и презеты делать, слои, да и автоматическая калибровка бонусом.
MIDI интерфейса в драйвере - совместимость с кучей аудио-видео софта.
Насчёт подсветок в проф. пультах. Она там не нужна потому как и так всё подсвечено индикацией + лампа горит ту же партитуру читать.
nafikovr
03.07.2024 21:01+2Я тоже подумал что наверно стоило бы имитировать MIDI + костыль в виде бриджа MIDI<->WinAPI. Это позволило бы использовать MIDI пульты и использовать девайс в софте поддерживающем MIDI ввод
voldemar_d
03.07.2024 21:01+1MIDI интерфейса в драйвере - совместимость с кучей аудио-видео софта.
Громкость на дорожках в DAW крутить?
N-Cube
03.07.2024 21:01rp2040 не имеет блюпупа
И вайфай и блютуф есть же: https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html И можно 8 светодиодных лент подключить без проблем, используя аппаратные пины (не нужен светодиодам полноценный I2C).
AiR_WiZArD Автор
03.07.2024 21:01+1Там это реализовано отдельным модулем, распаянным на плате, мини модулей с wifi/bt я не нашел, а это +3мм к толщине. Светодиодных лент можно сколько угодно подключать последовательно, это не проблема. У rp2040 всего 4 канала АЦП. Как бы мне этот контроллер относительно esp32 не нравился, он никак не подходит
deelayka
03.07.2024 21:01voldemar_d
03.07.2024 21:01Хорошая штука, но с крутилками, а не бегунками.
nafikovr
03.07.2024 21:01+1MIDI контроллеры разные бывают. можно взять какой нибудь nakeboard mc-8
voldemar_d
03.07.2024 21:01Можно, но он не такой красивый, как у автора статьи :-) понятно, что готового полно есть, здесь цель была другой.
nafikovr
03.07.2024 21:01да, соглашусь, но это 1 - это готовый девайс. 2 - можно использовать имеющийся девайс, или даже часть (архитектура midi позволяет использовать часть контролов в одном программе, часть в другой)
voldemar_d
03.07.2024 21:01Как имеющийся девайс связать с другим USB MIDI девайсом? Есть какие-то библиотеки для Arduino Mega?
nafikovr
03.07.2024 21:01не понял вопроса.
voldemar_d
03.07.2024 21:01А я не понял вот этот момент:
использовать часть контролов в одном программе, часть в другой
Бегунки использовать на одном девайсе, а индикаторы на другом?
nafikovr
03.07.2024 21:01нет. имел в виду что если на столе, например, у музыканта лежит MIDI клавиатура с крутилками/слайдерами или у видеомонтажера применяет MIDI контроллер для работы, то часть контролов этого имеющегося девайса можно использовать для вышеупомянутого MIDI Mixer, при этом остальные будут использоваться по прямому назначению
voldemar_d
03.07.2024 21:01Этот готовый девайс позволяет крутить громкости системного микшера, как у автора реализовано, т.е. ещё и отдельно по приложениям?
AiR_WiZArD Автор
03.07.2024 21:01Спасибо, интересный софт. Печально, что это freemium, особенно подписочный, самый меркий подход к монетизации
Hidden text
not-allowed-here
03.07.2024 21:01+1псевдо Хардовое решение конечно тоже круто, но я решил вот так - красяво, но сложна:
EQ APO (нормализация для каждого источника, лимитеры + фильтры и прочие фишки типа раздачи стерео на 8 каналов)
VBAudio HiFi Cable (ввод звука с windows в ASIO)
Potato(микшер, но на самом деле он не нужен счас EQ APO великолепно справляется и сам) иногда вмеcто него Lighthost для VST плагинов - ну это больше для экспериментов
-
Auto Hot Key (ЛКМ+ПКМ и колесиком крутим общую громкость)
Из минусов только небольшой input lag (решилось заданием affinity для каждой из критичных к задержеке софтинок и приоритезацией до RealTime)
SabMakc
03.07.2024 21:01Лично у меня все витает идея: софт, который планшет/смартфон превращает в разные микшеры или клавиатуру с горячими клавишами.
Да, это менее удобно, чем аппаратные ползунки - вслепую не передвинешь.Но так ли часто надо это делать на ощупь?
На мой взгляд, такое решение закроет большинство задач подобных миксеров, а уж гибкость будет гораздо выше.И с отзывчивостью могут быть нюансы - виртуальные контроллеры имеют более высокую задержку.
P.S. может кто готовое что встречал? Максимум что встречал - эмуляцию клавиатуры / мыши со смартфона с возможностью задать свою "кастомную" клавиатуру.
V-LA
03.07.2024 21:01+1Вот что я в работе использую:
Прекрасная штукенция, можно нарисовать свой интерфейс из кнопок/крутилок/фейдеров/ и тд и отдавать все нажатия и передвижения по MIDI или OSC
У себя в студии использую одновременно и как контроллер при записи midi (задержка не мешает) и при управлении основного компьютера.
SabMakc
03.07.2024 21:01Спасибо )
Интересная штука, кросс-платформенность на месте, неплохой, навскидку, интерфейс.
Правда не open-source и нужна лицензия (насколько я могу судить, лицензия национальна для декстоп-клиентов).
Seliv
03.07.2024 21:01Очень странно, если идея давно витает, а загуглить времени не нашлось. Таких решений десятки. Даже с обратной связью, статус/значения кнопок/ползунков передается во все стороны. Пожалуй, самые-самые это Touch-portal и Matric. Ну и поделки попроще в ассортименте, типа Macro Deck, Deckboard, много их.
ZahDimar
03.07.2024 21:01+2Для более быстрого доступа к микшеру в винде можно воспользоваться игровым оверлеем (win+g). Первый запуск может быть долгим, но потом быстро открывается. Его можно открыть не только в играх, так же есть возможность настроить что где лежит на самом оверлее, в том числе там есть микшер для всех приложений
ArtemIlichev
03.07.2024 21:01Подскажите, пожалуйста, а у вас можно будет приобрести такое же устройство?)
AiR_WiZArD Автор
03.07.2024 21:01Нет, и не планируется. Максимум что могу сделать - написать инструкции и все отрефакторить
jonic
О, молодец, код потом причешешь :) ну или кто то причешет. Придумал/сдалал/резултат. Не зря зашел почитать.