Хотел английский язык в гитарном процессоре, а в итоге написал свою прошивку
Сразу оговорюсь: пока только Ampero Mini и Ampero II Stomp!
Принес вам в эту пятничку историю о том, как полез менять язык в гитарном процессоре и немного увлекся.
Я играю на гитаре. Долгое время пользовался обычным педалбордом, многие педальки паял сам. Больше всего горжусь копией FZ-2 Hyper Fuzz: смог уместить плату, рассчитанную на большой корпус, в обычный педальный. Пришлось как следует утрамбовать детали :) Еще — фейзером, на котором обкатал фрезеровку двусторонних плат на ЧПУ и работу с SMD-компонентами. Очень они мне понравились.
Но ближе к делу! В какой-то момент я понял, что хочу процессор. Не сказать, что я сильно зависим от предрассудков насчет цифрового и аналогового звука — хотелось, чтобы все просто работало без пересборки цепи и вечного ГАСа, то есть желания купить еще одну железку. Так мне в руки попал Ampero Mini. Поиграл с ним, понял, что хочу больше. Так ко мне попал Ampero II Stomp.
Тут история и закручивается.
Сэкономив почти 10 кровно заработанных тысяч рублей, я купил версию Stomp для внутреннего китайского рынка. А это означало только китайский язык интерфейса. Погоревал тогда немного — через ПК все отлично настраивалось, а на самом аппарате кое-что пришлось понять и запомнить. Попробовал написать в поддержку, но там сказали, мол, «это не исправляется». Даже предложили отправить им мой аппарат в обмен на глобальный — но перспектива ждать два с лишним месяца без него просто ради языка…
Так с этим и жил. Попробовал закинуть в ChatGPT прошивку. Он с умным видом ее анализировал, крутил-вертел, но в итоге сказал, что ограничения не нашел и, скорее всего, оно аппаратное.
Спустя время попробовал снова, теперь уже с Клодом. Вооружились Ghidra — программой для разбора скомпилированного кода — и получилось! Нет приятнее ощущения, чем от удавшейся шалости — бишь, реверса, когда аппарат запускается и делает то, что хочешь ТЫ, а не дядя Ляо или кто бы то ни было.
Файл прошивки для этой модели один и тот же для разных регионов. Английский и китайский внутри уже есть.
Тогда почему в меню только один язык? Прошивка — это еще не все. На самом устройстве, в заводской памяти рядом с серийником и регионом, хранится ограничение по языкам — битовая маска. Если по-простому, набор флажков: этот язык разрешен, этот нет. У моего Stomp был разрешен только китайский.
То есть английский никто не вырезал. Его просто не показывали в меню.
Есть еще нюанс: настройка языка хранит не название языка, а его номер в получившемся списке. Когда в списке один китайский, первая строка — китайский. Если перед ним появляется английский, первая строка становится английской.
Решение, короче, получилось в стиле «если гора не идет к Магомеду». В картинках:
*Языковые пакеты уже внутри. Меняется ответ функции в прошивке, а заводская память остается как была.*
Вместо изменения заводских флажков я поправил функцию, которая сообщает меню, какие языки разрешены. Теперь она отвечает: английский и китайский.
Модификация была прямо в файле прошивки. Зашил его. Аллилуйя — английский в списке появился!
Сказать, что я обрадовался, — ничего не сказать. Неповторимое ощущение успеха! И вот тут меня понесло.
Вот возьмем, к примеру, драм-машину и лупер — штуку, которая записывает сыгранный кусок и гоняет его по кругу. По отдельности все отлично, а вместе на моем Stomp нормально подружить их не получалось.
Причина простая. Заканчиваешь писать луп, нажимаешь на педаль — как тебе кажется, ровно в конце такта. Но чуть раньше или чуть позже все равно попадешь. Допустим, петля получилась на 50 мс длиннее, чем нужно. На каждом круге эти 50 мс прибавляются. Через пять повторов — уже четверть секунды мимо барабанов.
Поэтому я перехватил команду завершения первой записи: теперь она ждет, пока длина лупа станет кратной выбранному числу долей. Петля закрывается по сетке драмки, а не по точности моей ноги.
На Mini, кстати, штатный SYNC уже был, но со своими проблемами. Там пришлось не только поправить длину записи, но и удерживать петлю в синхроне с барабанами во время воспроизведения.
Следующей фичой стали два LFO. Если не сталкивались: это такая автоматическая рука, которая крутит выбранный параметр эффекта. Я люблю гибкость, поэтому сделал разные формы и режимы. Прикольнее всего вешать LFO на Position питч-шифтера и ставить S&H — случайные значения, которые меняются через заданные интервалы. Попробуйте, если прошьете.
LFO использует назначения педали экспрессии, поэтому пока он работает, физическая педаль экспрессии в этом пресете не действует.
А можно нарисовать свою последовательность прямо пальцем. На видео — Mini.
Еще добавил секвенсор для драмки: восемь пользовательских слотов, в которых можно набить свой ритм. Попробовал открыть скрытые параметры заводских усилителей. Добавил XY-пэд, чтобы экспериментировать: водишь пальцем по экрану и меняешь сразу два параметра. И несколько новых эффектов для Mini.
Свой ритм на Mini
Прошивку разбирал по функциям: смотрел, что делает каждая нужная мне часть, проверял, пробовал менять. Чтобы не шить процессор после каждой правки вслепую, собрал эмулятор на ПК. Можно гонять код без железа и ловить хотя бы часть ошибок заранее.
Но что-то пошло не так.
Попробовал я написать эффект под миник. И он вешал звук. Интерфейс продолжал работать, а после включения эффекта — тишина до перезагрузки. Причина нашлась на третий вечер: пара строк, которые в обычной программе отработали бы за микросекунду, здесь крутились в цикле без выхода. Такая вот специфика компилятора. Этих специфик, кстати, наберется на отдельный пост на Хабре — думаю, надо будет запилить. Есть еще о чем рассказать.
Что в итоге сейчас. Ветка 1.x ставится как обычное обновление: берете официальный файл, собираете модифицированный на сайте и прошиваете. Откат — тем же способом, только официальным файлом. Заводской сектор с серийником и регионом не меняется. Сохранить возможность вернуться назад было главным условием, когда я все это начинал. Обещать «кирпич невозможен» не буду, но штатный путь отката есть.
Если бы это был просто конец статьи, было бы пресно и невкусно. Поэтому оставлю задел на вторую часть: я не остановился и на этом. Захотел сделать свою прошивку, с… ну как Бендер, короче.
Так появилась линейка Dubshift 2.x — собственная прошивка-грувбокс. LFO, БОЛЬШЕ LFO!! Драм-машина с роландовыми вайбами, синт (в Mini — один, в Stomp — четыре), четыре отдельные дорожки лупера, микс-шина, лайв-режим. Это уже другая ветка: вместо штатного набора усилителей и эффектов — свой звуковой движок. Пока эффекты больше для примера.
На Mini все получилось сравнительно легко, хотя при отладке пришлось вмешиваться и в железо. Это про разработку, а не про установку прошивки пользователем. На Stomp было еще сложнее — из-за архитектуры и того, как управляющий процессор общается с аудиопроцессором.
Для Stomp ветка 2.x еще не опубликована. Думаю, скоро появится в доступе. Мой исследовательский пыл все еще не утолен, поэтому прямо сейчас пилю SDK для своих эффектов и синтезаторов. То бишь можно будет написать эффект на C, собрать и залить в свою педаль. Или поделиться с другом. Или и то, и другое.
Прошивка бесплатная, сайт — dubshift.dev. Вопросы — в комменты, отвечу. Код прошивки не открываю: еще не готов. Может, и не открою вовсе. SDK, скорее всего, будет открыто на гите. Тестируйте, делитесь впечатлениями. Прошивка в ранней альфе, так что баги быть могут и будут. Крепимся.








