Как и обещал, публикую короткую техническую демонстрацию режима «соло». А данном случае солирующим является самый низкий голос (скрипка). Всё, что выше звучащего солирующего звука более чем на 1 тон, звучит как орган.
Перемещаюсь по клавиатуре вверх/вниз, чтобы было понятнее, в чём суть режима.
Всё, что планировал сделать, сделал. Электронную часть наладил; «странных необъяснимых глюков» не вижу уже 3 дня.
С точки зрения функционала, фантазия моя на данный момент иссякла. Сейчас есть всё, что нужно, для игры. Отличия от v2:
Основное — это чувствительность клавиатур к скорости нажатия клавиш. Само собой, «рояльной» точности управления звуком добиться не получилось, но три уровня звучания (тихо, средне. громко) получаются без проблем.
Добавлена функция «Акцент» для левой клавиатуры. Раньше можно было при нажатии баса или аккорда проигрывать звук ударного инструмента (любого выбранного). А сейчас, поскольку система может различить «обычное» и «сильное» нажатия, то на «сильные» нажатия баса и аккорда можно вешать дополнительные звуки. Например, при обычном нажатии будет звучать барабан, а при сильном ударе по клавише будет ещё звучать, например, тарелка.
Добавлена функция «соло» для правой клавиатуры. В двух вариантах «соло верхней нотой» и «соло нижней нотой». Этот режим позволяет совмещать звуки двух музыкальных инструментов. Например, если нажать «До» 1-й октавы, то одиночная нота будет звучать звуком текущего пресета. А если, удерживая «До», нажать ещё «Ми» и «Соль» 1-й октавы, то эти две ноты будут звучать уже тем звуком, который настроен в 6-м пресете текущего набора пресетов. (Техническую демонстрашку для этой функции я скоро запишу на видео, а вот сыграть что-нибудь, используя эту функцию, я пока не смогу, ибо недостаточно продвинут для того, чтобы играть подобное сходу, «из головы».)
Все пресеты, хранящиеся в энергонезависимой памяти EEPROM, теперь можно сохранить в виде резервной копии на SD-карту, в файл формата JSON. Это даёт возможность восстановить настроенные пресеты после «сброса на заводские настройки». Лично мне этой возможности очень сильно не хватало, т.к. при изменении внутреннего формата пресета приходилось то и дело переинициализировать всю EEPROM значениями по-умолчанию.
Добавлена возможность настраивать чувствительность датчика давления — т.е. задавать уровень давления, при котором система будет звучать «на полную громкость». И можно даже задавать некоторую нелинейность зависимости громкости от давления.
В прошивке центрального модуля сейчас 16000 строк (на C++), а в прошивке клавиатур — 2600 строк (на C++).
Публикацию проекта v3 в открытый доступ я не планирую, ибо практического смысла в этом не вижу.
Моё наблюдение за игрой Людовика показывает, что то, что он делает левой рукой, очень интересно. И очень мне непривычно; в музыкальной школе меня такому не учили даже близко, а самому узнать про такой подход к игре мне было просто неоткуда. Подобное басовое сопровождение он делает весьма часто. А значит приём достоин освоения.
Вот, осваиваю потихоньку. Промежуточный вариант — на этой записи:
В этот раз я использовал мой самодельный звуковой модуль с Кетроном, линейный выход на звуковую карту я в нём пока не сделал, поэтому пришлось записывать с колонки, с помощью микрофонов в телефоне.
Как это всегда бывает при попытках сыграть то, что руки ещё не запомнили, пока получается в лучшем случае «на троечку». Автоматизм в левой уже начал появляться, но до свободы в правой ещё далеко.
(А потом будет «следующий уровень» — в некоторых композициях Людовик сочетает подобную басовую линию с удерживанием аккордов. Такое — совершенно непохоже на традиционные «бас-аккорд», и поэтому очень интересно. Как говорится, «а что, так тоже можно было чтоли?»)
Рис. 1 КДПВ
P.S. пожалуй, стоит чуть пояснить смысл этой фразы:
в музыкальной школе меня такому не учили даже близко
Игра на выборке — это всё-таки несколько не то. Может быть, это особенность моего восприятия, но выборку я не воспринимаю как аккомпанемент. Звучание выборной левой и правой я не воспринимаю раздельно; это общее звучание со своим общим ритмом и фразами.
Мясо и овощи режем соломкой. Готовим в воке или в глубокой сковороде.
Сначала обжариваем мясо (минут 5). Добавляем размолотую в ступке зиру. Затем добавляем пекинскую капусту и лук. Прогреваем пару минут, добавляем томатную пасту. Жарим ещё 1-2 минуты. Добавляем болгарский перец, жарим, помешивая, 1-2 минуты. Добавляем стебли киндзы, нарезанный пластинками чеснок, сельдерей. Овощи доводим до полуготовности. Заливаем мясо и овощи водой или бульоном, и варим на среднем огне до полной готовности овощей (минут 10).
Лапшу я использую готовую (у нас в местном магазине продается «Лагманная», хорошая). Просто варим, как написано на упаковке.
Кладем в тарелку лапшу, сверху накладываем мясо+овощи (т.н. «ваджу»), посыпаем зеленью киндзы.
Мой баян хранит пресеты в EEPROM. Естественно, в двоичном виде; это очень удобно: читаешь прямо из EEPROM прямо в нужную структуру — и всё.
Но есть нюанс: в процессе разработки довольно часто меняется формат этой самой структуры (добавляются новые поля, меняется размер старых, и т.д.). В результате приходится заново инициализировать EEPROM, потому что прочитанные оттуда структуры старого формата не лягут в структуру нового формата.
Захотелось иметь возможность делать резервную копию всех 48 пресетов, которые хранятся в EEPROM. Резервную копию в виде файла на SD-карте (которая всё равно уже есть в системе). И раз уж это будет файл, то пусть он будет текстовым, чтобы его можно было редактировать при необходимости.
Раз так, то не надо изобретать свой велосипед, а надо использовать готовое. Мне нравится формат JSON; там ничего лишнего.
И, оказывается, как раз для меня сделали отличную библиотеку для работы с JSON-файлами: ArduinoJson. Очень рекомендую, если кто-то собирается решать задачу, похожую на мою.
Обожаю, когда не нужно парсить текстовые файлы самостоятельно.
Рис. 1
P.S. Забыл объяснить, что MIDI-система теперь умеет сохранять резервный JSON-файл, и, что более интересно, читать из него пресеты и записывать их обратно в EEPROM. Причем данные могут сохраняться из «старого» формата пресета и восстанавливаться в «новый»; при этом те поля, которых нет в JSON-файле, просто инициализируются значениями по-умолчанию. И теперь мне больше не придётся вручную, по бумажке, восстанавливать настроенные ранее пресеты.
Сегодня я закончил сборку 3-й версии MIDI-баяна. Ключевая особенность этой версии — клавиатуры, чувствительные к скорости нажатия (как на пианино).
Последняя операция была — установка сменных вкладышей в ограничители потока воздуха. Поскольку штатных резонаторов в моём баяне нет, я использую напечатанные на 3Д принтере ограничители потока воздуха. А для того, чтобы расход воздуха можно было регулировать, в ограничителях используются сменные вкладыши (107 штук всего). Сейчас диаметр отверстий во вкладышах 1.5 мм. При таких отверстиях расход воздуха очень маленький — как на настоящих концертных баянах. Непривычно, но пусть будет пока так. Если захочу, чтобы было похоже на мой старый Рубин-5 — просто рассверлю вкладыши до 2 или до 2.5 мм.
Звук для видео писал телефон со звуковой карты. Получилось чуть хуже чем в реальности, потому что телефон сжимает динамический диапазон (т.е. уменьшает разницу между тихими и громкими звуками). Но кое-что заметить можно.
Как-нибудь позже запишу звук через компьютер, чтобы более достоверно показать разницу.
В целом — авантюру по созданию MIDI-баяна с клавиатурой, чувствительной к скорости нажатия, я считаю успешной. Сохранились все те возможности, которые были дальше и добавились новые. В том числе возможность для добавления кое-каких эффектов (об этом — позднее).
Stay tuned, как говорится.
P.S. Всего каких-то 2 года разработки — и я получил то, что изначально хотел. 🙂
«Почти» — потому что я пока ещё не брался за герметизацию. Пока только прикручены модули (включая панель управления на ажурке) и протянуты шлейфы.
«Резонаторы» (ограничители потока воздуха) тоже прикручены, но в них пока не установлены вкладыши (с отверстиями 2.5 мм). Но без них тоже нельзя, т.к. один из них является основой, к которой крепится плата центрального модуля и держатель аккумуляторов.
Всё включается, запускается и работает. (Очень удобно, что контроллер клавиатуры мигает 3 раза синим цветом после того, как устанавливает связь с центральным модулем и получает от него настройки. Сразу видно, если клавиатура не подцепилась нормально.)
Следующий этап — крепление шлейфа левой клавиатуры к меху и подключение левой половины.
Платы посажены на герметик, положения магнитов и датчиков настроены. Пришлось заменить два датчика, т.к. у них диапазон напряжений на выходе заметно отличался от «среднего по больнице».
Это, конечно, не фортепиано, но если смотреть издалека, в сумерках и прищурившись — то довольно похоже звучит. Не думаю, что можно сделать существенно лучше. Основные параметры сканера — настраиваемые, потом можно будет с этими настройками поиграться и попробовать улучшить звучание. Но в целом — вот так.
Теперь — монтировать панель управления на правую ажурку.