Главная Проекты → Google NSynth Super
Январь 2022

Google NSynth Super

Опыт сборки синтезатора с «искусственным интеллектом»

Все заметки цикла Бракованные Детали собраны из контента одноимённого канала, куда я активно писал в 2021 году.

Этот пациент по-настоящему странный. Ну такой странный, которого по всем формальным признакам можно было бы и выписать, но интуиция подсказывает, что он лишь прикидывается здоровым.

1 Обратите внимание: в «16 синтезаторах за 16 недель» настоящих синтезаторов, дай бог, половина.

Open NSynth Super — это DIY синтезатор, который спроектировали в ML подразделении Google. По-моему, уже достаточно странно. Синтезатором такое устройство называть язык не поворачивается1. Сама Magenta ML Team идентифицирует устройство как «интерфейс к алгоритму NSynth».

В описании на сайте сказано, что устройство при помощи ML-алгоритмов позволяет генерировать принципиально новые, уникальные звуки сделанные на основе привычных инструментов типа флейты или гитары. Важно, что это не просто микширование, а синтез на основе фич: т.е. вы слышите не смесь дорожек, а уникально звучащий инструмент являющийся чем-то средним. Это примерно так же, как когда вы просите у DALL-E нарисовать «зелёную панду на скейте в стиле Босха», только для звуков.

На словах ML, AI и Blockchain, а на деле: где звуковую карту открывали, туда и идите.

Основная цель коробки: популяризация использования ML в музыкальном творчестве и арте. На мой взгляд эта цель полностью провалена. Даже по демкам из интернетов ясно на сколько эта штука пока скучная. Andrew Huang, которому прислали коробку, и который с придыханием говорит вообще о любой музыкальной железке даже если это ржавый варган, выразился обтекаемо отметив лишь что алгоритм неплохо справляется с ударными.

Демки демками, а как оно на самом деле работает можно узнать только собрав и запустив всё самостоятельно. У меня нет никаких предрассудков на счёт тамошнего софта, но зато то, как спроектировано железо, меня по-настоящему заинтересовало. Вообще это устройство на деле очередной shield для Raspberry Pi, только он сделан сложнее и интереснее, чем, скажем, Norns.

А главное: кодек для него есть в свободной продаже.

Проект очень хорошо, местами даже избыточно, документирован. Из-за того что это оголтелый open-source, вся разводка и схемотехника выполнена в KiCAD — единственная тула из набора с которой я не могу смириться потому что в половине случаев в ней невозможно даже просто открыть проект без пляски с бубном.

Анимация для такого дисплея сделана отлично. Моё почтение.

С точки зрения интерфейса это большая touch-панель 90х90 мм, 4 энкодера, которыми можно переключать базовые инструменты и 6 потенциометров для регулировки огибающей, громкости и пр. Ещё есть маленький OLED дисплей с клёвой анимацией. MIDI вход и линейный выход. Минимальный, кажется, набор, но дьявол, как всегда в деталях.

Оценка проекта и закупка компонентов

Единственным компонентом, который вызвал проблемы ещё на этапе закупки стал дисплей. Как можно видеть по фотке дисплей устанавливается в отверстие в плате, которое сделано специально под него.

NSynth display
Тут просто какие-то чудеса механики
NSynth display
Изнутри тоже неплохо

Но это меньшая из проблем. Основная — то, что этот дисплей под брендом Adafruit — американской компании, которая наотрез отказывается работать с этими вашими русскими из этой вашей России. Купить в их магазине товар можно только через форвардинг на территории США. В нормальной ситуации вы даже не зайдёте на их сайт, Cloudflare отфильтрует вас по русскому ip-адресу. Так было не всегда, но последние лет 6 всё именно так.

2 Ох уж эти тёплые, ламповые проблемы из 2021 года.

Вот вам уровень соверменных DIY-проблем: китайцы продают тебе поддельные микросхемы, а американцы просто не пускают в магазин. Кажется, глобализация нам обещала что-то совсем другое.2

NSynth PCB
Платы крупные. Компоненты используются очень богато. Например вместо 4 энкодеров в этом конкретном интерфейсе запросто можно было бы обойтись одним.

3 Русские карты Adafruit не принимал ещё до того, как это стало модным.

4 0x3C против 0x3D в оригинале.

Сам дисплей не дорогой, но пересылка и решение проблем с оплатой3 увеличит его стоимость в 3 раза. Доставка минимум месяц. В этом месте я решил, что уже взрослый хакер и купил подходящий по механике дисплей на Али. Он был сразу с нужной I2C-шиной, но его адрес на этой шине отличался от дисплея Adafruit4. Я нашёл в исходниках NSynth кусок с драйверами где настраивается адрес и подумал, что просто исправлю его в софте. Проблема меня из будущего.

5 SH1306 против SSD1306 в оригинале.

Ещё один важный момент, который в нормальной ситуации должен был меня остановить: дисплей с Али использовал более современный контроллер5. На странице продавца было написано, что он полностью совместим и я не стал вдаваться в детали так, будто бы такое утверждение хоть раз оказывалось правдой.

В общем, купил OLED дисплей на Алике всего за 250 рублей, получил его всего за 2 недели и приготовился с ним страдать.

С остальными компонентами проблем не возникло. Сразу после того как я получил платы и электронику, всё быстро собрал и запустил по инструкции сначала вовсе без дисплея. Оказалось, что штука неплохо работает и без него. Однако, ввести дисплей в эксплуатацию было делом чести необходимо.

PCB silkscreen
Используются крупные smd компоненты 1206. Все футпринты микросхем с увеличенными площадками. Отдельная карта компонентов на плате лишний раз намекает, что в Magenta Lab постарались ради новичков.

Сразу оказалось, что всё, что выводится на дисплей, копируется в него из основного фреймбуфера Raspberry. А это значит что саму картинку можно увидеть, если просто подключить плату по HDMI к телику. Так и есть: весь интерфейс отрисовывается в левом верхнем углу прямо с нулевых координат. Более того: для простоты отладки устройством можно управлять с клавиатуры.

6 А тем более настраивать кросс-компиляцию.

В этом месте я полез ковыряться в архитектуре софта и выяснил что всё важное там сделано на Open Frameworks. Это такой C++ toolkit for creative coding. Я когда-то давно уже имел с ним дело и точно не хотел заниматься его пересборкой прямо на RPi6 — не на столько этот проект казался мне интересным, чтобы потратить несколько дней лишь для того, чтобы заменить адрес дисплея.

OLED display
Вот так можно паяльником сменить адрес устройства на I²C шине.

К счастью я нашёл в интернете способ аппаратной модификации дисплея для смены его адреса на шине. Поковырялся со скальпелем и резистором и со второй попытки таки исправил адрес на 0х3D. Дисплей завёлся с кучей артефактов и сразу стало ясно, что контроллер SH1306 это вообще не то же самое, что старый SSD1306 и для нормальной работы придётся переписать ещё и драйвер.

“Полностью совместимый контроллер” be like. Китайское описание меня опять обмануло! Не может быть. Такого же никогда раньше не случалось.

7 Какой адрес, контроллер, покажи чертёж и пр.

Взвесив все планируемые доработки и посоветовавшись с экспертом 🥷🏼 я залез в такие недра Алика, какие не снились даже распаковщикам мусора с Ютюба и нашёл полную копию дисплея Adafruit. Стоил он дороже прошлого, но продавец в переписке честно признался что они копируют именно эти дисплеи. После нескольких наводящих вопросов7 я сдался и заказал его. Через две недели установил дисплей, как оригинальный и тот сразу заработал.

Выводы и впечатления

8 За откровенно простецкими устройствами типа Meeblip Micro можно легко провести несколько часов, а за этим вы уснёте, может, через 20 минут.

Главная проблема NSynth даже не в том, что он скучный, как дедушкин табурет8. Дело в том, что для изменения набора зашитых внутрь базовых звуков на свои собственные, вам придётся их «компилировать» и для этого протащить через целый пайплайн из 6 этапов, как описано в документации.

NSynth Super

Чтобы вы понимали масштаб: в дефолтовом прекомпилированном банке звуков их всего 8, по 2 на каждом энкодере. Есть ещё расширенный банк, для записи которого понадобится карта памяти на 64Гб. Но если, вдруг, вы решите собрать собственный «сэмпл-пак», то за вами незамедлительно приедет гестапо им. Греты Тунберг потому, что, цитата из документации:

For reference, a machine with 8 NVidia K80 GPUs, 128GB RAM and 8 CPU cores can generate the nearly 120,000 audio samples produced by this example in approximately 36 hours with a conservative batch size of 512.

При этом сэмплы на выходе посредственные. Да, их много, но подавляющее число, наверное, больше 90%, не пригодны к использованию. Пока что это не тянет на AI революцию в производстве музыки, которую мы сейчас наблюдаем, например, в графике. Удивительно, но за несколько десятилетий существования синтеза мы не придумали интерфейс до звукового движка лучше, чем ручки и патч-корды. Может быть потому что этот интерфейс не так уж и плох?

Однако, не смотря на то, что с точки зрения софта мне кажется, Google совершенно не достигла своих целей, я считаю, что в железе NSynth есть на что посмотреть и проект можно использовать как базу для более интересных устройств.

В отличие от платы Norns, где вся периферия дёргает GPIO напрямую, в NSynth взаимодействие с тачпэдом, потенциометрами и энкодерами реализовано через вспомогательный микроконтроллер STM. Это, безусловно, дороже, но зато надёжнее, гибче и легче масштабируется. Его прошивку можно обновить прямо из Линукса RPi и при необходимости использовать этот МК для чего угодно. Это особенно удобно в условиях когда Линукс на RPi стартует по 20 секунд. Здорово что всё это, включая исходники, отлично документировано.

💸 Посмотреть цены 2021 года на свой страх и риск 💸
  • 5450 ₽ — компоненты в «никогда больше» Элитане
  • 2210 ₽ — платы в JLC
  • 280 ₽ — дисплей на Али
  • 830 ₽ — второй дисплей на Али с SSD1306
  • ВСЕГО 8770 ₽

Я пока закину эту железку на антресоль и если подвернётся момент, то превращу её во что-то поинтереснее и одновременно поглупее.

Сообщение об ошибке: