«Человек и кошка» на MIDI-баяне

Я тут записал свою версию известной песни Фёдора Чистякова.

Ноты взяты из разных источников. Левая рука — в основном из видео Алексея Лиса. Правая рука — в основном из обработки Евгения Архипова (в нескольких местах переделал по-своему чтобы не противоречило левой руке). Гитарное соло — как-то содрал из оригинального клипа. Гитару со слайдом имитировал эффектом «portamento»; конечно, получилось не в точности как надо, но, по-моему, лучше чем ничего.

Это первый мой видос с MIDI-баяном v3. Особенность конкретно этой композиции в том, что громкость правой руки управляется мехом (как и полагается в баяне), а громкость левой руки фиксирована и от меха не зависит.

Исполнение не на 100% чистое, но оставил как есть. «И так сойдёт», мне не на конкурс, а для демонстрации возможностей инструмента.

Связь ремёсел

Связь ремёсел прослеживается по меткам в данной записи. 🙂

Для того, чтобы на [MIDI-баяне] играть через колонку (см. рис. 1), нужно сначала её сделать (столярка).

Для того, чтобы её закончить, нужно сделать лицевую декоративную сетку. В качестве сетки будет использована т.н. «силовая сетка«, которая используется для шитья.

А поскольку в планах изготовление нескольких швейных предметов, то, пожалуй, самое время провести ревизию всяких расходников (окантовочная лента, стропы, молнии, прочая сумочная фурнитура) и заказать недостающее.

Рис. 1

Прототип активной колонки

Сам я 99% времени играю на баяне в наушниках.

Но если надо играть для кого-то, то единственный имеющийся у меня вариант — это маленькая BT-колонка. Для своих целей она звучит вполне приемлемо, но играть через неё плохо: внутренний объем колонки очень маленький, и низкие частоты там конкретно провалены. Бас звучит некрасиво.

Я решил сделать свою активную колонку в формате Soundbar. Чтобы было «два в одном» — и к телевизору можно подключить, и на баяне через неё можно поиграть.

Поскольку высота такой колонки должна быть маленькой, большие динамики в неё не воткнёшь. Поэтому я взял широкополосные 50-миллиметровые вот такие.

Акустическую схему я взял «закрытый ящик с пассивным излучателем». По нынешним временам это дёшево и сердито. Для выбранного динамика оптимальный внутренний объем — это примерно 1.2 л.

Перед тем, как делать «начисто», я решил сначала сделать прототип, на котором послушаю, как оно в целом звучит. (См. рис. 1)

«Прозрачных высоких» этот прототип, конечно, не выдаёт. Но в целом звучит гораздо лучше мелкой покупной колонки. Низкие частоты звучат отлично. Через такую колонку вполне можно играть, я уже попробовал. Все композиции звучат довольно хорошо.

Были проблемы с противным резонансом на частоте «Ля 2-й октавы». Решилось заменой пары маленьких и лёгких пассивных излучателей на один большой, а также, установкой наклонной рассекающей перегородки внутри.

Теперь можно браться за «чистовое» изделие.

Рис. 1

P.S. Само чистовое изделие будет устроено как-то так:

Рис. 2

«Педаль» для левой клавиатуры

Я добавлял чувствительность к скорости нажатия в свой MIDI-баян в том числе для того, чтобы естественно звучали вот такие штуки (по ссылке — короткий урок на тему «How to Play Beginner Cocktail Piano in 3 Steps»).

Однако, одной только чувствительности не хватило.

Для того, чтобы играть «сложные» аккорды левой рукой на баяне, нужно набирать нужные звуки, нажимая несколько кнопок «стандартных» аккордов. Вот здесь я выкладывал XLS-файл с калькулятором, помогающим определить, какие аккорды нужно нажимать, чтобы получился требуемый «сложный» аккорд.

Так вот, для того, чтобы играть аккорд Cmaj7 одновременно с басом (C), на левой руке не хватает пальцев. 🙂 Пианисты в таких случаях используют педаль. А значит и мне надо.

В результате я реализовал режим «педаль» в котором бас и аккорд продолжают звучать после отпускания кнопок до тех пор, пока не будет нажат новый бас, или пока не будет выключен режим «педаль».

В результате стало возможно получить вот такое звучание:

Теперь нужно привыкать нажимать кнопки с нужной силой. У баянистов такой привычки нет; в результате некоторые нажатия у меня пока получаются слишком слабые, а некоторые другие — слишком сильные.

Lusta Dick — третий вариант

Я тут решил попробовать добавить второй голос к «Ленивому Дику». Без второго голоса, всё-таки, чего-то не хватает.

За основу взял второй вариант записи. И просто наложил запись второго голоса.

В одном месте (на 1:13), конечно, первый и второй голоса плохо сочетаются, звучат фальшиво. Но я не понимаю, что я с этим могу поделать; пока оставлю так.

Короткая демонстрация режима «соло»

Как и обещал, публикую короткую техническую демонстрацию режима «соло». А данном случае солирующим является самый низкий голос (скрипка). Всё, что выше звучащего солирующего звука более чем на 1 тон, звучит как орган.

Перемещаюсь по клавиатуре вверх/вниз, чтобы было понятнее, в чём суть режима.

MIDI-баян v3 — закончен

Всё, что планировал сделать, сделал. Электронную часть наладил; «странных необъяснимых глюков» не вижу уже 3 дня.

С точки зрения функционала, фантазия моя на данный момент иссякла. Сейчас есть всё, что нужно, для игры. Отличия от v2:

  • Основное — это чувствительность клавиатур к скорости нажатия клавиш. Само собой, «рояльной» точности управления звуком добиться не получилось, но три уровня звучания (тихо, средне. громко) получаются без проблем.
  • Добавлена функция «Акцент» для левой клавиатуры. Раньше можно было при нажатии баса или аккорда проигрывать звук ударного инструмента (любого выбранного). А сейчас, поскольку система может различить «обычное» и «сильное» нажатия, то на «сильные» нажатия баса и аккорда можно вешать дополнительные звуки. Например, при обычном нажатии будет звучать барабан, а при сильном ударе по клавише будет ещё звучать, например, тарелка.
  • Добавлена функция «соло» для правой клавиатуры. В двух вариантах «соло верхней нотой» и «соло нижней нотой». Этот режим позволяет совмещать звуки двух музыкальных инструментов. Например, если нажать «До» 1-й октавы, то одиночная нота будет звучать звуком текущего пресета. А если, удерживая «До», нажать ещё «Ми» и «Соль» 1-й октавы, то эти две ноты будут звучать уже тем звуком, который настроен в 6-м пресете текущего набора пресетов. (Техническую демонстрашку для этой функции я скоро запишу на видео, а вот сыграть что-нибудь, используя эту функцию, я пока не смогу, ибо недостаточно продвинут для того, чтобы играть подобное сходу, «из головы».)
  • Все пресеты, хранящиеся в энергонезависимой памяти EEPROM, теперь можно сохранить в виде резервной копии на SD-карту, в файл формата JSON. Это даёт возможность восстановить настроенные пресеты после «сброса на заводские настройки». Лично мне этой возможности очень сильно не хватало, т.к. при изменении внутреннего формата пресета приходилось то и дело переинициализировать всю EEPROM значениями по-умолчанию.
  • Добавлена возможность настраивать чувствительность датчика давления — т.е. задавать уровень давления, при котором система будет звучать «на полную громкость». И можно даже задавать некоторую нелинейность зависимости громкости от давления.

В прошивке центрального модуля сейчас 16000 строк (на C++), а в прошивке клавиатур — 2600 строк (на C++).

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

Рис. 1

А это уже можно выбросить

Старые платы датчиков своё отработали. И плата панели управления тоже (половина кнопок начала глючить).

Только экранчик отпаяю, конечно. Он ещё хороший.

Рис. 1

Отличная библиотека для работы с JSON-файлами

Мой баян хранит пресеты в EEPROM. Естественно, в двоичном виде; это очень удобно: читаешь прямо из EEPROM прямо в нужную структуру — и всё.

Но есть нюанс: в процессе разработки довольно часто меняется формат этой самой структуры (добавляются новые поля, меняется размер старых, и т.д.). В результате приходится заново инициализировать EEPROM, потому что прочитанные оттуда структуры старого формата не лягут в структуру нового формата.

Захотелось иметь возможность делать резервную копию всех 48 пресетов, которые хранятся в EEPROM. Резервную копию в виде файла на SD-карте (которая всё равно уже есть в системе). И раз уж это будет файл, то пусть он будет текстовым, чтобы его можно было редактировать при необходимости.

Раз так, то не надо изобретать свой велосипед, а надо использовать готовое. Мне нравится формат JSON; там ничего лишнего.

И, оказывается, как раз для меня сделали отличную библиотеку для работы с JSON-файлами: ArduinoJson. Очень рекомендую, если кто-то собирается решать задачу, похожую на мою.

Обожаю, когда не нужно парсить текстовые файлы самостоятельно.

Рис. 1

P.S. Забыл объяснить, что MIDI-система теперь умеет сохранять резервный JSON-файл, и, что более интересно, читать из него пресеты и записывать их обратно в EEPROM. Причем данные могут сохраняться из «старого» формата пресета и восстанавливаться в «новый»; при этом те поля, которых нет в JSON-файле, просто инициализируются значениями по-умолчанию. И теперь мне больше не придётся вручную, по бумажке, восстанавливать настроенные ранее пресеты.

MIDI-баян V3 собран

Сегодня я закончил сборку 3-й версии MIDI-баяна. Ключевая особенность этой версии — клавиатуры, чувствительные к скорости нажатия (как на пианино).

Последняя операция была — установка сменных вкладышей в ограничители потока воздуха. Поскольку штатных резонаторов в моём баяне нет, я использую напечатанные на 3Д принтере ограничители потока воздуха. А для того, чтобы расход воздуха можно было регулировать, в ограничителях используются сменные вкладыши (107 штук всего). Сейчас диаметр отверстий во вкладышах 1.5 мм. При таких отверстиях расход воздуха очень маленький — как на настоящих концертных баянах. Непривычно, но пусть будет пока так. Если захочу, чтобы было похоже на мой старый Рубин-5 — просто рассверлю вкладыши до 2 или до 2.5 мм.

Звук для видео писал телефон со звуковой карты. Получилось чуть хуже чем в реальности, потому что телефон сжимает динамический диапазон (т.е. уменьшает разницу между тихими и громкими звуками). Но кое-что заметить можно.

Как-нибудь позже запишу звук через компьютер, чтобы более достоверно показать разницу.

В целом — авантюру по созданию MIDI-баяна с клавиатурой, чувствительной к скорости нажатия, я считаю успешной. Сохранились все те возможности, которые были дальше и добавились новые. В том числе возможность для добавления кое-каких эффектов (об этом — позднее).

Stay tuned, как говорится.

P.S. Всего каких-то 2 года разработки — и я получил то, что изначально хотел. 🙂