Вступление, или откуда что берется
Карьера программиста и инженера вообще — очень интересная штука, и зачастую приводит к управлению проектами, как и случилось у меня в 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 кнопками, но, на удивление, она заработала!
Когда я туда дул, появлялся звук, соответствующий комбинации кнопок. Звук, конечно, был системно-динамиковый, прямо в уши неискушенному пользователю.
Но опыт удался, а это означало, что всей птичке пропасть, коль увяз коготок.
Дальше будет некоторое количество промежуточных вех, кому не интересны детали, листайте до конца, там результаты и выводы.
Веха 1. 2 месяца от старта
Корпус — кабель-канал и пластиковые трубы, разводка кнопок на фольгированном стеклотекстолите резаком, очень похоже на игрушку, сделанную в гаражном кооперативе 90х. Датчик BMP180, MIDI, кнопки тактовые ардуинские. Первый мундштук из той же пластиковой трубы. Язык Си, среда разработки Arduino.
Очень большие задержки образовались (четверть-половина секунды), долго думал, что из-за MIDI (использовал MIDI-OX и Hairless MIDI). Решил делать встроенный звук.
Веха 2. 3 месяца
Набрел на китайском рынке на карточку, умеющую аппаратное MIDI, на чипе vs1053. Переписал программу, вывел звук туда, все получилось, задержки уменьшились, но не исчезли.
Решил пока подумать о вечном и позаниматься промдизайном.
Веха 3. 4 месяца
Еще летом купил себе на день рождения 3д-принтер, самый простой, Anet A6. Решил подизайнить с ним. Кстати, этот дизайн мне нравится до сих пор, может быть, такой внешний вид будет у одного из готовых инструментов, но пока не уверен, слишком много возни.
Веха 4: полгода
Первый записанный звук (ужаснитесь), первая полностью работоспособная модель. https://www.youtube.com/watch?v=hhtxDk5x1P8
Кнопки от механической клавиатуры Cherry MX Blue (знакомый саксофонист оценил, говорит, похоже на настоящие щелчки клавиш. Мне тоже так показалось.)
Вот примерно так выглядел:
Веха 5, 9 месяцев
Сделал упор на технологичность и блочную компоновку: печатный монтаж (лазерный утюг, кто в теме, перекись водорода и лимонная кислота с солью), шлейфы и максимальное использование готовых модулей. На UNO не хватало пинов для всех кнопок, решил действовать пока экстенсивно — использовал Arduino Mega.
Получилась первая модель, которую можно вынести на улицу, поиграть у друзей, вернуть обратно, и все это — без единого разрыва (с).
Тем временем поменял цифровой датчик давления BMP180 на аналоговый от Motorola, переписав часть программы. Задержки исчезли. Совсем. Заодно добавил мундштуку возможность подтянуть звук тростью, как у настоящих саксов. Тензорезистор справа снизу.
Веха 6, год
Заработал Aux-in, теперь могу играть на электросаксе под минусы ночью, и все, что услышит наблюдатель — это пыхтение исполнителя и щелчки клавиш.
(3.5 мм джек, с телефона можно минус замешать в звук исполнителя)
Веха 7, полтора года (надоел он мне до чертиков, 3 месяца особо не подходил)
Теперь он может складываться в 3 раза и помещается даже в женскую сумочку (не самую мелкую, впрочем, проверял на жене). Внутренности поменялись на еще более модульные, Arduino был Mega, стал Nano. Много 3d-печати, но еще не весь, для корпуса по-прежнему используется кабель-канал, очень уж удобно.
И, наконец, пока что последняя, 2 года
Это не точка, это внушительная запятая!
Подвожу промежуточные итоги
- Можно ли сделать тренировочный инструмент для аппликатуры и амбушюра: да.
- Можно ли его сделать дешево (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, не про музыку.
juramehanik
Спасибо за интересный проект!
С задержками конечно у вас что-то странное.
На моем ноутбуке 10 летней давности через USB-midi адаптер ( www.artistpro.ru/catalog/midi_kabel/force_aif_01_midi_usb ) дает задержки порядка 30-50мс, ощущается, но терпимо.
А у вас датчик давления работает дискретно или в миди сообщениях передается величина «вдувания»?
sbalashov Автор
Ну дело было не только и не столько в миди, как выяснилось. И в первую очередь в датчике, потому что он был медленный и цифровой, его в дронах используют для определения высоты. Аналоговая моторола сразу все поправила ))
Миди там было нестандартное (через USB с трансформацией уже в компе), в этом тоже был момент.
Датчик давления передает данные в Arduino (первый — цифровые, второй — аналоговые), а там я уже преобразую это в увеличение громкости играющего инструмента, передавая миди-сообщение изменения громкости канала.
sandroDan
Если не секрет, что за датчик?
ps
уже увидел ответ ниже )
upd
А датчиков с питанием 3-5 вольт не встречали?
sbalashov Автор
Ну он 5 вольт как раз, или надо диапазон, чтобы на половине батарейки работал? Тогда нет, не искал. У меня не сработает, в смежных устройствах проблемы начнутся.
sandroDan
понятно
не, сами датчики от 3d есть. Но чтобы раскачать их милливольты надо ОУ, а это уже 5в, так как от 3v даже Rail-to-Rail не поможет…