Статья о том как я пришёл к DIY (самодельному по нашему) гитарному процессору. Пользуюсь им последние пару лет, с двумя разными прошивками. Расскажу как допиливал что не хватало, в том числе с помощью LLM и опишу свои впечатления.

Торговая марка в названии статьи взята с потолка, просто как нарицательное обозначение класса устройств, профилирующих звучание гитары с помощью машинного обучения. Также как чехи называют все пылесосы lux, а румыны все кроссовки - adidaşi. И да, ввиду некоторых драматических изменений на рынке компьютерного железа описанный в статье девайс бюджетным больше не является. Если зашли сюда с целью экономии денег, то на алиэкспрессе можно найти готовые карманные процессоры с поддержкой NAM примерно от 40 долларов США. А малинка нынче просто неприлично дорога.
Начну с истории, без неё скучновато будет, да и понятней станет зачем мне вообще понадобилось городить такое устройство, в то время, когда рынок пересыщен дешёвыми гитарными процессорами, в том числе моделирующими...
С электрогитарой я познакомился на 2-м курсе колледжа. Классный руководитель в рамках подготовки к какому-то "утреннику" провел нас в каптёрку за сценой актового зала, где грудой лежали барабаны, басгитара Орфей, электрогитара Музима, колонки Дойна и синтезатор Ямаха. Под впечатлением я заявил дома родителям, что намерен продолжить музыкалку и стать электрическим гитаристом. На следующий день папа притащил с работы настоящую электрогитару. Самопал, оставшийся от комсомольского ВИА в подвале на работе. Подшаманили, перепаяли подгнившие провода - заработало. Но вот беда - звук выдавало такой же как и старая акустическая ленинградка. Электрогитарного дж-дж почему-то не было. Подключал я её тогда в проигрыватель грампластинок Илга в линейный вход и перегрузить его не получалось. Зато у него была цветомузыка.

На помощь пришел упомянутый в предыдущей статье магнитофон Электроника 302-2М. Если воткнуть в него электрогитару, включить запись и выкрутить уровень записи на максимум, получался шикарный дисторшн. Так я и отыграл свой первый концерт-утренник в колледже. Оператору у пульта я дал задание выкручивать крутилку на максимум во время соло Scorpions Still Loving You.

Чуть позже, получив стипендию, я купил на местной музыкальной барахолке свою первую настоящую примочку. Что-то жутко самопальное, собранное в корпусе из пластиковой советской мыльницы (которая для мыла, чтобы мыть руки в ванной) с тремя крутилками, металлической скобой на ремень и гордой шелкографией Marshall. Недолго думая, я разобрал мыльницу, вытащил маленькую плату и встроил её прямо в гитару, добавив аккумулятор 9В и разъём для зарядного устройства. Получилось очень сурово, на этом инструменте уже можно было жужжать любой тяжеляк вплоть до Slayer, чем я и занялся с большим увлечением.
В дальнейшем я сменил несколько гитар и примочек. Был какой-то клон BOSS Super OverDrive зелёного цвета из Тирасполя, потом какойто клон TECH21 SansAmp GT-2 в пластмассовом корпусе, купленный у самого Сергея Тынку уже в Москве в 1999. Был даже процессор Zoom 707. И, наконец, окончательно укоренившийся звук SansAmp GT-2 в виде суровой сибирской педальки AMT Diststation DT-2, купленной среди выставочных экземпляров в первый визит AMT в Москву на выставку в Сокольниках в 2001 году. С тех пор я и играл дома в эту примочку, а всё остальное, если нужно, добавлял софтом после записи и мне этого хватало.

Семья, дети, эмиграция вынудили меня сменить профессию и засесть в офисе, прикидываясь программистом, что у меня успешно получалось более 8 лет, но регулярным занятиям музыкой отнюдь не способствовало. После возвращения обратно в гитарное ремесло в 2020 году у меня снова появилось время немного побренчать в перерывах между шлифовками ладов. К тому же теперь я сам себе начальник, а это дорогого стоит. Один из клиентов пару лет назад предложил поиграть в его группе. Просто для себя, для души погрохотать в подвале. А для этого одной педальки уже было маловато и я опять включил режим диайвайщика-диванщика. Просто пойти в магазин и купить - не мой вариант. Нужно было обязательно дать мозгам покумекать и решить задачу наименее финансово затратным из всех возможных способов. Так и появилась малинка.
Если точнее, то плата Raspberry PI 4B появилась дома задолго до этого момента. Как и у всех эмигрантов из бСССР, в нашей семье у всех стойкая аллергия на телевизоры, вернее на контент, предлагаемый эфирными каналами (любыми). Поэтому телевизоры у нас всегда использовались в качестве больших мониторов для просмотра контента из интернета. Постоянно подключать hdmi кабель было не очень удобно, поэтому однажды я повесил за телевизором малинку, установил туда KODI и забыл на какое-то время. Потом появился уже "умный" телевизор с андроидом и малинка как-то стала не нужна, перекочевав в коробку из под обуви ко всякого рода микроконтроллерам и компонентам, оставшимся от постройки станка с ЧПУ. Ну, а поскольку железка уже итак была в наличии, то сомнений не оставалось - наименьшие затраты это такие, когда вообще ничего покупать не нужно. Тут-то я и вспомнил о многочисленных статьях и видео про постройку самодельных гитарных процессоров, виденных мной ранее. Голова закипела, пальцы потянулись в гугл и началось предварительное накопление информации. К этому времени уже появились всякие кемперы и кортексы, прорубившие машинному обучению путь в гитарный мир и успевшие даже стать стандартом в индустрии. Я уже был знаком с GuitarML, первой робкой попыткой реализовать это в Linux. А также слышал про Neural Amp Modeler и про комьюнити, в момент сократившее расстояние между мной и звуком, который так хотелось, на целые километры, вернее - килобаксы. И вот в процессе сбора информации я наткнулся на репозиторий neural-amp-modeler-lv2. А также на открытую платформу MOD - это хост для LV2 плагинов с веб-интерфейсом в виде педалборда.

Вау! Какие симпатишные педальки! Именно так я бы и хотел видеть интерфейс управления моим гитарным звуком, поэтому всё остальное отмёл и начал думать в сторону MOD. Фирма Blokas, разработавшая платформу MOD, занималась и производством реальных процессоров MOD Duo, Mod Dwarf и прочих. В какой-то момент в команде Blokas появился и упомянутый в первой статье Filipe Coelho aka FalkTX, создатель и майнтейнер дистрибутива для музыкантов kxstudio. С его помощью MOD стало возможно попробовать и на десктопах. Программную платформу они решили делать с открытым исходным кодом на основе Linux, что дало ей дополнительное дыхание от сообщества, включая тот самый NAM LV2 и прочие плагины, реализация которых в закрытом режиме заняла бы, наверное, годы работы малой команды. Неуверенный маркетинг, возможно слишком сильная конкуренция привели к банкротству железного подразделения фирмы, но платформа продолжила жить своей жизнью, как и положено open source. После провала процессоров MOD фирма Blokas выпустила продукт попроще для DIY - плату pisound hat для Raspberry PI, совмещавшую в себе предусилитель, ЦАП/АЦП и универсальную кнопку управления, на которую можно повесить с десяток разных скриптов на разные комбинации нажатия. Когда я начал постройку процессора, все платы pisound уже были распроданы, но я нашёл одну Б/У на Ebay и купил, включая нарезанный лазером из акрила корпус.


Пока ждал посылку - начал пробовать софт. Нашёл репозиторий pistomp, который тоже предлагал купить какую-то свою кастомную плату с кнопками, энкодерами и экранчиком, но, поскольку я уже заказал pisound, ограничился только софтом. По инструкции с сайта pistomp установил Paspberry PI OS bullseye Lite 64bit, подключился к ней из терминала через ssh, обновил все пакеты, установил git, клонировал репозиторий и запустил скрипт установки. Скрипт установил mod-ui, mod-host, jack, провёл какие-то оптимизации системы, а также распаковал большой архив уже скомпилированных более чем 360 LV2 плагинов, так что ничего, кроме отключения сервиса, отвечающего за энкодеры, кнопки и экранчик, не потребовалось. Протестировал с разными USB звуковыми картами, всё работало отлично. Для этого нужно было заменить в config.txt строку со звуковой картой на dtoverlay=usb-audio. Буфер аудиоданных установил на 128 сэмплов, что позволяло вполне комфортно играть через NAM и пяток-другой обычных плагинов с загрузкой процессора в пределах 50% и без xrun-ов. А когда приехала плата pisound, эта строка в config.txt поменялась на dtoverlay=pisound,master. В старой версии OS файл config.txt был в папке /boot, а в новой уже /boot/firmware. Драйвер pisound уже присутствовал к тому моменту в ядре, так что ничего дополнительно делать не потребовалось.
Среди плагинов уже были установлены Aida-X от Blokas и neural-amp-modeler-lv2, что открыло доступ к десяткам тысяч загруженных к тому моменту слепков усилителей и примочек, а также full rig слепков, что позволяло обойтись без грелок и импульсов. Тогда ещё сайт назывался tonehunt, сейчас tone3000 и он позволяет прослушивать онлайн примеры звучания тех или иных слепков, а также реализует API для плагинов, которые теперь могут листать и загружать слепки усилителей прямо с сайта. С тех пор NAM занял своё место в индустрии и стал объединяющим стандартом, поддержку которого один за другим добавляли к своим устройствам и плагинам крупные игроки.
Итак, основа будущего процессора готова. Управление по сети из любого браузера. Звук любой можно сделать, в общем - то, что надо. Но мне надо переключать пресеты ногами! Дальнейшее кипение мозга, изучение платы, идентификация свободных ножек GPIO, чтение кода сервиса pistomp, как он вобще с кнопками и энкодерами работает. Но в этот момент в профсоюзном чате гитарных мастеров промелькнул восторженный отзыв коллеги на копеечный беспроводной контроллер M-VAVE CHOCOLATE. И как-то да, за такую цену дальнейшие попытки пилить что-то руками уже действительно выглядели совершенно бессмысленными. Контроллер может работать через USB-MIDI или Bluetooth, имеет 4 кнопки с возможностью назначить 6 педелей (4 + две одновременным нажатием двух кнопок), вход для педали экспрессии, управление через Bluetooth приложением в телефоне или десктопе (в Linux через wine), позволяет назначать как MIDI события, так и прикидываться клавиатурой/джойстиком, умеет назначать на одну кнопку 2 события по короткому и по длинному нажатию, настраивать кнопки как моментальные (одно событие) так и в режиме клавиши (note on, note off). В общем, надо брать. Ещё месяцок поиграл со старой педалькой на репетициях, ожидая посылку с алиэкспресса. И когда получил - сразу настроил и потащил на репетиции. Настройка простая. В mod-ui есть снапшоты, это снимки состояния настроек всех педалей в педалборде. Переключаются мгновенно, ибо не надо выгружать из памяти плагины и загружать новые. Можно в файле profile5.json найти строку “midiChannelForSnapshotsNavigation”: 15, это значит использовать MIDI канал 15 для переключения снапшотов и настроить chocolate в режиме custom назначив на кнопки сообщение PC на канале 15 с значением от 1 до 4 на каждую кнопку. Да, в режиме custom у chocolate есть только 4 кнопки, двойные не работают. Ну и через веб-интерфейс самого mod-ui создать 4 снапшота с разными настройками плагинов. Для начала этих 4-х пресетов мне хватало, но потом начались проблемы, когда во время соло мы на репетиции вдруг начали вылетать из темпа, теряя клик. Виновником оказался Delay, создававший эхо в 120BPM, а песня была в 125BPM и весь ритм ломался. Я стал думать дальше. Кроме снапшотов в MOD есть и педалборды. И их тоже можно переключать по MIDI сообщению PC и настроить другой канал для смены педалбордов в файле profile5.json. Хотя педалборды и переключаются не мгновенно, но в паузах между песнями это не проблема. Итак, ещё на некоторое время мне хватило 4 педалборда по одному на каждую песню по 4 снапшота-пресета в каждом. В Chocolate переключение педалбордов я настроил на долгое нажатие каждой из 4 кнопок. Но что делать когда песен больше? Отличным вариантом казалось использовать кнопку pisound в комбинации со скриптом управления от modep. Но что-то пошло не так. Софт от Blokas отказался устанавливаться на зафиксированную в pistomp версию ядра. Значит пришло время глобального обновления. А ещё при активном веб интерфейсе, показывающем педалборд, mod-host переходил в другой режим и переставал реагировать на смену педалборда другими средствами... Да и визуализировать как-то нужно какой именно педалборд и какой пресет сейчас активны. А экранчиком мой процессор пока не обзавёлся...
2 года назад я собирал сыну современный игровой компьютер в награду за успешное поступление на программиста, одним из элементов был экранчик, показывающий состояние системы, температуры и загрузку процессора и видеокарты и так далее. Как-то сын не очень этим экранчиком пользовался и, после года пыления на полке я у него этот экранчик экспроприировал и решил приспособить для вывода информации о педалбордах и пресетах своего процессора. Это был turing smart screen USB display. Для него есть как собственная программка от китайцев под винду так и разные оупенсорцные сторонние утилитки, включая приложение на питоне, работающее и в Linux. Экранчик жутко медленный, но для поставленной задачи вполне подходит.

А незадолго до этого мир программирования начал стремительно меняться. Появились LLM, агенты и прочие штуки, по утверждению разработчиков способные заменить программистов совсем. Ну что ж, подумал я, посмотрим как оно. Клонировал библиотеку, открыл chatgpt и начал его пытать. Он сообщил, что знает где лежит библиотека и может сам в ней копаться. Задача к нему была поставлена простая. "Вот библиотека. Вот такой-то экран, ревизия такая-то. При запуске экранчик честно показывает картинку с температурами и частотами процессора и видеокарты. Выдели из этого репозитория минимальный код, который напишет на экранчике Hello world без импорта зависимостей из этого репозитория". ChatGPT не справился с задачей, что странно. Мне казалось именно для подобных задач он и существует. Не, он честно раз за разом выдавал мне код, однако при запуске экранчик чего-то там светился, но показывал какие-то крокозябры вместо букв. Хорошо, подумал я. Попробуем что-то ещё. Скачал расхваленный Antigravity. Дал ему задачу посложнее. В принципе то же самое - выделить из библиотеки минимальный код, позволяющий писать надписи на конкретном устройстве конкретной ревизии, не использовать импорт из этой библиотеки. Вместо Hello world дал задание выписать названия педалборда и снапшота из mod-ui. Уххх. Эта чупакабра спросила логин и пароль в малинку и начала что-то там колдовать сама. И я даже увидел настоящие надписи на экранчике! Но в какой-то момент надписи сломались, а токены закончились и Gemini, как и положено по жанру потребовал сантик. Он даже предложил бесплатный месяц подписки, если я оформлю её. Ну ладно, думаю, деньги не очень великие, если он действительно сам будет писать работающий код, то я согласен платить ему оброк. Чуда не случилось. Через полчаса и подписочные токены закончились, а надписи на экранчике я всё ещё не получил. В окне Gemini красовалась надпись "ждите Х дней пока обновятся токены" или чтото вроде того. Пошёл сам читать что эта чупакабра мне там навайбкодила и с ходу увидел, что оно прямо нарушило запрет импортировать файлы из клонированной в соседнюю папку библиотеки. То есть по окончании я не смогу удалить достаточно толстый репозиторий с флэшки. Далее - куча неимоверного хардкода. К тому же в главном файле, запускаемом из systemd, все методы оказались почему-то продублированы... А причина отсуствия результата, в общем-то, к Gemini не относилась. Дело в том, что именно в этот момент я вдруг обнаружил ограничение mod-host, изза которого при открытом веб-интерфейсе он перестаёт переключать педалборды иными способами кроме собственно самого веб-интерфейса. А в процессе уточнений мы договорились повторять поведение сервиса pistomp, то есть опрашивать mod-ui через http запросы и выводить надпись на экран только при изменении. Вот я и пытался переключать педалборды MIDI контроллером, а запущенный где-то в одной из вкладок браузера веб интерфейс этому препятствовал, о чём ни я ни Gemini не догадывались. Как обойти это ограничение без переписывания самого mod-host я не очень понимал, а на это у меня ни времени ни желания не хватало. Ограничение это мне показалось блокирующим.
Но репетиция близится, а у меня всё ещё нет рабочего инструмента для переключения педалбордов между 6 песнями чтобы BPM у Calf vintage delay соответствовал каждой песне. Я решил пробовать другие варианты. На сайте pistomp уже давно выложили обновлённую версию как железной так и программной части. А ещё я просмотрел ролики SkyHawk на Youtube, который занимался примерно тем-же, что и я, примерно в той же последовательности. От него я и узнал про pipedal. Тоже гитарный процессор, хост для lv2 плагинов, работающий на Raspberry PI, только с более строгим интерфейсом и, главное - без JACK, то есть использующий ALSA напрямую, что даёт ещё меньшие задержки. Поскольку я люблю ходить свободно без проводов и ради этого использую беспроводные системы для наушников и гитары, задержка любого из компонентов критически важна и она перевесила красивые педальки. Я купил ещё одну флэшку и решил сначала попробовать установить pipedal. Инструкция на сайте весьма простая, всё завелось с полоборота. Вместо PC сообщений в pipedal используются CC, но это мелочь, быстро перенастроил CHOCOLATE, создал 6 пресетов, в каждом по 4 снапшота. Не очень удобным мне показалось отсуствие глобального BPM на каждый пресет, который можно было бы использовать в плагинах вроде Delay, flanger и других, работающих с темпом. Но ничего. Процессор заработал с новыми красками. Буфер уменьшился вдвое при тех же загруженных плагинах, а значит и задержка сократилась. Экранчик, наверное и не очень нужен, pipedal имеет в play market приложение, которое автоматически подключается к http://pipedal.local если найдёт. А там есть и удобный тюнер и подкрутить параметры можно, в общем - круто. Но экранчик я всё же чисто из принципа таки прикрутил. Воспользовался наработками Gemini, оставил на флэшке жирную библиотеку turing-smart-screen-python, вычистил всё, что там навайбкодил для MOD и сам ручками дописал что хотел, просматривая коммуникацию браузера с педалькой, благо там простой websockets. Оформил в виде systemd сервиса и до сих пор так и пользуюсь. А ещё установил pisound софт для использования универсальной кнопки. На неё повесил включение-выключение hotspot, режима поиска bluetooth, перезагрузку как pipedald так и целой ОС в случае если что-то пойдёт не так, чтобы не дёргать питание лишний раз.
Вот, примерно так и появилось то, что вы могли увидеть на заглавной фотографии. Рассказ был длинный, да. Но и действие от идеи до конечного результата было сильно размазано по времени, примерно около 2 лет, поскольку занимался я этим всем в качестве гимнастики для мозга эпизодически и нерегулярно, отвлекаясь от работы, которой у меня обычно стабильно много. Хочется ещё дисклэймер добавить: да, я в курсе, что не умею пользоваться LLM и что это мощный инструмент в руках знающих людей, но всё же эти люди должны быть способны оценивать промежуточные результаты работы LLM и уметь направлять эту работу в нужное русло. Так что лично для себя я понял - ИИ программистов в ближайшее время точно не заменит, разве что выметет из отрасли таких эникейщиков как я, оставив только профессионалов, и это не так уж и плохо. Кроме того, хотелось бы избежать холиваров, касающихся конкретно программирования, я никогда не работал с питоном, учил его очень поверхностно для себя, когда ковырялся в FFADO, а посему ни кода ни рассуждений на тему его правильности или неправильности - не будет. Мне был важен сам процесс и результат а результатом я очень доволен, это самое главное.
Что касается звука и его "качества", то на мой взгляд сегодня это уже не вопрос выбора железа, а исключительно музыкального вкуса и навыков игры самого гитариста. Научные тесты показали, что тот же Kemper воспроизводит звучание усилителей хуже, чем бесплатный NAM, так что выбор железа должен основываться прежде всего на критерии удобства использования и уже во вторую очередь - личных предпочтений в дизайне и исполнении (напольный или рэк). А звуки плюс-минус все устройства на рынке позволяют нарулить на любой вкус.
