Свой MIDI-арпеджиатор на Arduino: модульная прошивка и евклидовы ритмы
Компоненты и материалы
| Arduino Nano R3 | × | 1 |
| Потенциометры (вращающиеся) | × | 7 |
| Тактильные кнопки 12 мм | × | 7 |
| MIDI-разъем (DIN-5) | × | 1 |
| Резистор 220 Ом | × | 4 |
| Светодиоды | × | 2 |
О проекте
Обновление 11.03.2019
Создал новую прошивку — код полностью переписан. Теперь модульная структура позволяет запускать арпеджиатор на разных платформах, не только Arduino. Добавлены евклидовы ритмы. Подробности позже!
Репозиторий: github.com/raszhivin/arpeggio2
Железо осталось прежним, новые исходники совместимы с приведенным ниже чертежем Fritzing.
Обновление 25.06.2019
Собрал новый вариант железа, см. видео.
Введение
Электронная музыка — мое хобби, играю на Korg Volca Keys. Нашел веб-приложение «Chord Progression Arpeggiator» — впечатлила сила и простота музыкальных алгоритмов. Вручную вбивать ноты арпеджио в Volca долго и негибко.
Как разработчик ПО, решил сделать Arduino-устройство, генерирующее арпеджио в виде MIDI-сообщений и отправляющее их через DIN (MIDI) порт. Арпеджиатор работает с любым硬件 или софтовым синтезатором, но у меня только Volca Keys.

Основы музыкальной теории
(Адаптировано с reddit, автор kmmeerts)
Звук — это волны. Основная частота определяет высоту тона. Два инструмента на одной ноте звучат разным тембром, но мы слышим одну ноту. Октава — интервал между нотой и нотой с удвоенной частотой. Нота, разделенная на 12 полутонов: [A, A#, B, C, C#, D, D#, E, F, F#, G, G#]. После 12 повторяется.
Из 12 нот строятся гаммы (масштабы). Арпеджиатор использует гептатонические диатонические режимы (7 нот). Каждый режим — это шаблон тонов и полутонов. Мажор (Ионийский): [T T S T T T S] (T — тон, S — полутон). От каждой ступени строим аккорд: берем ноту, пропускаем одну в гамме, берем следующую — триада. Арпеджио — это последовательное воспроизведение нот аккорда.
Аккордовая прогрессия определяет песню. Композитор выбирает режим, тонику, последовательность аккордов. Арпеджиатор автоматизирует генерацию нот по выбранной прогрессии.
Схемы
Схема проста: 7 потенциометров, 7 кнопок, MIDI-порт, 2 светодиода, 4 резистора. Собирается на макетке. Новичкам рекомендую пройти базовые уроки Arduino:

Управление
Потенциометры:
- Октава тоники (0..7)
- Октава аккорда (0..7)
- Задержка между нотами (BPM)
- Тоника / корневая нота (C...B)
- Шаги арпеджио (1...5)
- Музыкальный режим (Ионийский, Дорийский...)
- Стиль арпеджио (Восходящий, Нисходящий, Восх+Нисх, Случайный)
Кнопки: нажатие запускает соответствующую аккордовую прогрессию.
Демонстрация
Видео 1: обзор функционала и органов управления.
Видео 2: джем-сессия с арпеджиатором.
Синхронизация
Можно синхронизировать темп с Korg Volca: соедините аудиоджек арпеджиатора с «SYNC OUT» синтезатора. В коде arpeggiator.ino раскомментируйте нужный вариант:
// Синхронизация: выберите один вариант:
#define EXT_SYNC
//#define INT_SYNC
EXT_SYNC — синхро по SYNC IN, INT_SYNC — темп от потенциометра.
Рад любому фидбэку и идеям по улучшению!
Удачи и веселья!
Код
Исходный код
https://github.com/raszhivin/arpeggiator
Схемы (Fritzing)
arpeggiator_LICtzK2a2Q.fzz
Производственный процесс
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Unopad: Бесшовный Arduino MIDI-контроллер для Ableton Live
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- USB-BLE MIDI-адаптеры на Arduino: беспроводное подключение инструментов к iOS
- Сборка функционального 3D-печатного манипулятора на Arduino: пошаговое руководство
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Бесконтактный термометрический шлюз для быстрого и точного скрининга
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
- Своё рулевое управление (джойстик) для игр на Arduino