Электросаксофон: проект создания EWI шаг за шагом

cvbct0ljbjo7qmfvrri4kip1wbo.jpeg

Вступление, или откуда что берется


Карьера программиста и инженера вообще — очень интересная штука, и зачастую приводит к управлению проектами, как и случилось у меня в T-Systems. Руководство проектами — это прекрасно: и опыт, и почет, и уважение, но простора для инженерной деятельности там не остается. А руки-то помнят! ©

Остается использовать полученные знания и навыки в своих сторонних проектах, благо, такая возможность есть.

О чем я сегодня расскажу


Кроме всего прочего, я еще немного (лет 5–6) саксофонист. И все хорошо в этом прекрасном инструменте, но уж очень он громкий. И с первых своих уроков я мечтал о появлении в моей жизни такого же саксофона, но чтобы можно было играть на нем в наушниках и не донимать соседей, чтобы был этакий тренировочный инструмент.

Конечно, существуют электронные духовые инструменты, флагманы — AKAI EWI и Roland Aerophone, но, во-первых, они очень компромиссные с точки зрения положения пальцев и вообще эргономики (не говоря уже про амбушюр), а во-вторых, кроме них, ничего на рынке и нет, а эти стоят 60+к. Извините, но мой сакс — американец CONN — стоит в 2 раза дешевле (весьма подержанный, впрочем, но еще меня переживет). Так что задушили они меня вдвоем — жаба и жажда деятельности. Будем делать электросакс.

Итак, постановка задачи:


  • Сделать тренировочный инструмент для аппликатуры и амбушюра альт-саксофониста;
  • Сделать его дешево в (потенциальной) серии и не очень дорого на стадии эксперимента;
  • Сделать его работающим без задержек между действиями пользователя и получаемым звуком (частая проблема в MIDI устройствах и ад для музыканта);
  • Сделать его маленьким в ношении-хранении и копирующим альт-саксофон для рук в работе;
  • Очень желательно:  
  • Сделать его также инструментом для выступлений;
  • Добавить интерфейс MIDI;
  • Сделать возможность в нем играть под «минусы» с телефона или SD карты.


Что есть в наличии:

  • Прямые руки;
  • ЛЭТИ РТФ за плечами, то есть общее понимание электроники, но без большого опыта;
  • Музыкальное недо-образование и понимание, как играть на саксе;
  • Опыт около 20 лет в программировании всякого — от Visual Basic до экзотического языка Magik;
  • Чуть позже появился 3д-принтер (купил не под эту задачу, но очень пригодился),
  • Ну и новоприобретенные (или хорошо забытые старые) навыки построения проектов в жизни и IT, дальше будет почти Agile.


Приступаем


Чуть больше 2 лет назад я взял с собой в отпуск стартовый набор Arduino UNO, пару шприцов (не подумайте плохого), датчик давления BMP180 и желание попробовать это все на досуге.

Получилась такая смешная конструкция с 3 кнопками, но, на удивление, она заработала!
Когда я туда дул, появлялся звук, соответствующий комбинации кнопок. Звук, конечно, был системно-динамиковый, прямо в уши неискушенному пользователю.

d_cuzzpr3m37utfdzvciyd8mob8.jpegupolxsjrgawe-pkltgs-wy7764m.jpeg

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

Веха 1. 2 месяца от старта


Корпус — кабель-канал и пластиковые трубы, разводка кнопок на фольгированном стеклотекстолите резаком, очень похоже на игрушку, сделанную в гаражном кооперативе 90х. Датчик BMP180, MIDI, кнопки тактовые ардуинские. Первый мундштук из той же пластиковой трубы. Язык Си, среда разработки Arduino.

Очень большие задержки образовались (четверть-половина секунды), долго думал, что из-за MIDI (использовал MIDI-OX и Hairless MIDI). Решил делать встроенный звук.

olhafiotkdhoouqmgfxqs45vcnu.jpegbzaosje8--sikgov93qdl-py7hk.jpeg

Веха 2. 3 месяца


Набрел на китайском рынке на карточку, умеющую аппаратное MIDI, на чипе vs1053. Переписал программу, вывел звук туда, все получилось, задержки уменьшились, но не исчезли.

Решил пока подумать о вечном и позаниматься промдизайном.

kxplafwra2tocdkw_xkf5_gu250.jpegfeh0sodfupkkndxu7_gxxv-s_aa.jpeg

Веха 3. 4 месяца


Еще летом купил себе на день рождения 3д-принтер, самый простой, Anet A6. Решил подизайнить с ним. Кстати, этот дизайн мне нравится до сих пор, может быть, такой внешний вид будет у одного из готовых инструментов, но пока не уверен, слишком много возни.

c-cexhvjl9c15lcsxiatg-ipnhy.jpeg
zxcocsn_os1zg50vuhmehdomasw.jpeg

Веха 4: полгода


Первый записанный звук (ужаснитесь), первая полностью работоспособная модель. https://www.youtube.com/watch? v=hhtxDk5×1P8

Кнопки от механической клавиатуры Cherry MX Blue (знакомый саксофонист оценил, говорит, похоже на настоящие щелчки клавиш. Мне тоже так показалось.)

Вот примерно так выглядел:

phl14p5w8bdzu47iktgv2iignm0.jpeg

Веха 5, 9 месяцев


Сделал упор на технологичность и блочную компоновку: печатный монтаж (лазерный утюг, кто в теме, перекись водорода и лимонная кислота с солью), шлейфы и максимальное использование готовых модулей. На UNO не хватало пинов для всех кнопок, решил действовать пока экстенсивно — использовал Arduino Mega.

Получилась первая модель, которую можно вынести на улицу, поиграть у друзей, вернуть обратно, и все это — без единого разрыва ©.

llf0ldex8avlxbsgzvns8bbrpok.jpeg

golfipjmmfoai-xocebtk3m_bcq.jpeg

rcogwwxzoknzpnx0vh9cq80snte.jpeg

Тем временем поменял цифровой датчик давления BMP180 на аналоговый от Motorola, переписав часть программы. Задержки исчезли. Совсем. Заодно добавил мундштуку возможность подтянуть звук тростью, как у настоящих саксов. Тензорезистор справа снизу.

j7jqizx4q_bpae1adaropsynvi0.jpeg

Веха 6, год


Заработал Aux-in, теперь могу играть на электросаксе под минусы ночью, и все, что услышит наблюдатель — это пыхтение исполнителя и щелчки клавиш.

(3.5 мм джек, с телефона можно минус замешать в звук исполнителя)

xloz7fiz3olmzn2btx8o6-dgyiu.jpeg

Веха 7, полтора года (надоел он мне до чертиков, 3 месяца особо не подходил)


Теперь он может складываться в 3 раза и помещается даже в женскую сумочку (не самую мелкую, впрочем, проверял на жене).  Внутренности поменялись на еще более модульные, Arduino был Mega, стал Nano. Много 3d-печати, но еще не весь, для корпуса по-прежнему используется кабель-канал, очень уж удобно.
eitizkhqcx_s1cfj7pw56aja8q8.jpeg
fadi6tj3rkejze0dtnyumuorwbi.jpeg

И, наконец, пока что последняя, 2 года


Это не точка, это внушительная запятая!

nsibgy0mfldvv90umchz9n_uibs.jpeg

Подвожу промежуточные итоги


  • Можно ли сделать тренировочный инструмент для аппликатуры и амбушюра: да.
  • Можно ли его сделать дешево (3–5к за детали): да.
  • Можно ли его сделать работающим без задержек: да.
  • Можно ли его сделать маленьким в ношении-хранении и копирующим альт-саксофон для рук в работе: да.
  • Можно ли сделать инструмент для выступлений: с выбранным подходом — нет. Причина — качество звука.
  • Можно ли сделать инструмент с MIDI интерфейсом, чтобы это исправить: может быть.
  • Можно ли сделать инструмент для выступлений с другим подходом: может быть.


Нерешенные задачи:

  • Используется DIY карточка MIDI на чипе vs1053, имеющая 3 ограничения:
    • Звуки не очень хорошие;
    • Большой уровень шума;
    • Недостаточный уровень звука.
    • Карточек лучше на рынке нет.
  • MIDI: когда делал — были проблемы с задержками, сейчас немного остыл, хочу сделать инструмент со своими звуками. Может, еще вернусь.


Основная идея — построить это на реальных звуках (WAV). Боюсь, что это придумывание очень давно придуманного велосипеда под названием SoundFont, а еще мощи Arduino может не хватить. Но, может, еще и возьмусь.

Есть другая идея — уменьшить количество электроники и увеличить количество программирования: например, использование Raspberry PI вместо Arduino. SoundFont там применим программно. Возможные проблемы:

  • Я вообще никак в Linux. Будем разбираться, тем более, в C/C++ все же «как».
  • У Raspberry, говорят, не очень со звуком, но есть HDMI и звуковые карты-шилды. Будем разбираться.
  • Повышенное энергопотребление: разберемся точно!
  • Больший размер Raspberry, чем Arduino. Думаю, решаемо, тем более, есть и компактные варианты Raspberry (Zero, например)


… И — веха 1 новой конструкции


Raspberry завелся (пока что модель B), первые звуки получены, язык — снова C (хотя, наверное, можно и питона какого использовать, но пока не научился), использую свободно распространяемый синтезатор Fluidsynth как библиотеку, начинаю работать с GPIO. Про задержки пока непонятно, могут быть на стыке аналогового датчика и полностью цифровых GPIO.

Спасибо за внимание! Если есть интерес к проекту, то еще встретимся, и я расскажу о дальнейшем его развитии.

С вами был Сергей Балашов,
PM в компании T-Systems в рабочее время, а в свободное — инженер-саксофонист!

Следить за этим и другими моими проектами (вне рамок компании) можно тут:
https://vk.com/happy_sax

P.S.: А если кто в Питере поджемить хочет, но стесняется — после карантина тоже приходите:
https://vk.com/eclectic_jam

Про джемы в другой раз расскажу, может, и не здесь, тут все же про IT, не про музыку.

© Habrahabr.ru