Драм-машина + MIDI-синтезатор - Своими руками
Своими руками

Драм-машина + MIDI-синтезатор

>

Драм-машина + MIDI-синтезаторДрам-машина, ритм-машина или ритм-компьютер — электронный музыкальный инструмент для создания и редактирования повторяющихся музыкальных ударных фрагментов.

Т.е. – это музыкальный инструмент, который воспроизводит последовательности и паттерны (повторяющиеся элементы). Обычно драм-машины производят звуки перкуссии, барабанные ритмы и т. д., но у этой есть встроенный MIDI-синтезатор, усилитель и динамики, поэтому она может воспроизводить «мелодичные», а также перкуссионные звуки. Это позволяет пользователю программировать свои собственные ритмы и удары.
Пользователь также можете прикрепить пэды (подклад, разновидность музыкальной партии), которые позволят ему воспроизводить звуки ударных «вживую» либо поверх запрограммированного барабанного ритма, либо как отдельное исполнение.

Музыкальные ноты воспроизводятся MIDI-чипом VS1053, который имеет 166 голосов (то есть якобы разных инструментов). Он имеет высокую степень полифонии (до 64), поэтому он может воспроизводить отдельные ноты или аккорды.

Шаблоны программируются с помощью сенсорного экрана 320×240 точек. Есть до 8 треков и до 16 ступеней.
У каждого трека может быть свой «голос» и разная амплитуда. Всего 119 «мелодичных» голосов и 47 «ударных» голосов. С мелодичным голосом, например фортепиано, каждая доля на дорожке может воспроизводить отдельную ноту.

Пользователь можете сохранять и загружать различные «Установки» и переключаться между ними во время выступления.
Весь MIDI-аппарат работает автономно с собственным динамиком и батареей.
Инструменты и материалы:-Arduino Nano;-Модуль VS1053;-Сенсорный 3,2-дюймовый дисплей ILI9341 SPI;-Резисторы 2,2 и 3,3 кОм;-Динамик 8 Ом;
-Литиевая батарея;
-Блок питания;
-Паяльные принадлежности;-Энкодер;-Пьезоэлектрический диск;-Усилитель PAM8403;
Шаг первый: управление VS1053
Есть несколько моделей VS1053. Желательно для устройства использовать модуль именно зеленого цвета.
Есть еще красный и синий. Синий – мастер использовал в своем MIDI-терменвоксе, он тоже работает без изменений. Красный по умолчанию не работает в режиме MIDI, но его можно модифицировать, чтобы перевести в «живой» MIDI-режим.
Драм-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторVS1053 – хороший чип, но довольно сложный. Мастер использует только его MIDI-часть. Можно управлять VS1053 через последовательный интерфейс, но здесь используется шина SPI, так как это более удобно при работе с Arduino Nano. Любой байт, который вы отправляете по шине SPI, обрабатывается как MIDI-команда.
Списки MIDI-команд можно найти в Интернете. VS1053 реагирует на некоторые, но не на все. Программа DrumSynth0.exe показывает те, которые, работают. Список доступен на GitHub.
Также можно загрузить техническое описание VS1053 из Интернета. Раздел «8.9 Поддерживаемые форматы MIDI» – это почти все, что говорится о MIDI. В разделе «10.10 MIDI в реальном времени» говорится об использовании GPIO0 и GPIO1 для включения MIDI, но плата, которую мастер использует, не требует специального включения. Также можно загрузить список MIDI-сообщений (не все из которых поддерживаются VS1053).

Подключите модуль VS1053 к Arduino Nano, как показано на схеме, и загрузите файл INO (в конце шага) в Arduino. Мастер использовал беспаечный макет.

Разъем модуля VS1053 представляет собой двухрядный штыревой разъем. Он сделал вывод, используя разъем ленточного кабеля от сломанного ПК.

Скетч drumsynth0.ino получает байт от ПК по последовательной линии и отправляет его в VS1053. Это очень простая программа, которая позволяет протестировать VS1053. Подключите выходное гнездо к наушникам или динамику компьютера.
Программа Windows DrumSynth0.exe отправляет команды на VS1053. Нажмите кнопку «90 note vel (90 нот)», чтобы сыграть ноту. Вы можете написать свою собственную программу для Windows, или воспользуйтесь одной из множества терминальных программ, доступных в Интернете.

После того, как Arduino отправит байт, он должен отправить фиктивный байт, чтобы переключить часы и позволить VS1053 отправить байт обратно в ответ. Функция SPItransfer () показывает, как это сделать.
DrumSynth0.inodrumsynth0.pdf
Драм-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторШаг второй: дисплей
Дисплей представляет собой 2,8-дюймовый цветной TFT ЖК-экран с контроллером ILI9341, 320×240 пикселей. В интернет-магазинах доступно множество экранов, например, вы можете предпочесть разработать свой прибор с сенсорным экраном большего размера. Мастер выбрал дисплей SPI 320×240, потому что он может обновляться достаточно быстро. Дисплей большего размера 480×320 был бы лучше, но мог бы быть слишком медленным.

В купленный мастер дисплей встроен регулятор 3V3. Если вы посмотрите на заднюю часть печатной платы, вы увидите, что она подключена к выводу VCC. Это чип 662K. Таким образом, он может питаться от 5 В, и можно подключить его напрямую к выводу 5 В Arduino. Вывод питания светодиода также может подключаться напрямую, к выводу 5 В. Убедитесь, что на вашем дисплее есть регулятор 3V3. Если его нет, вам понадобится отдельный регулятор.

Для логических выводов дисплея нужен сигнал 3,3 В. Нельзя подключать их напрямую к 5-вольтовым контактам ввода-вывода Arduino. Мастер использовал резисторы 2К2 и 3К3, чтобы понизить напряжение.

Есть готовые библиотеки для ILI9341, но протестировав, их мастер решил написать свою. Библиотеку SimpleILI9341 можно скачать ниже.
Также ему не понравилось, как в Arduino IDE используются «библиотеки». Это затрудняет контроль версий. Поместите все эти файлы в одну папку:
DrumSynth1.ino
SimpleILI9341.h
SimpleILI9341.cpp

SimpleILI9341 имеет стандартный набор команд рисования, очень похожий на все подобные библиотеки.
Некоторые из библиотек, которые можно загрузить, используют специальные циклы синхронизации. SimpleILI9341 написан на C, а не на ассемблере, поэтому он не так быстр, как мог бы быть, но более портативен, и делит шину SPI с другими устройствами.
Программа для Windows позволяет создавать свои собственные шрифты и иконки.
Функция ILI9341Begin () в библиотеке показывает выбранный автором набор команд инициализации. Пользователь может изменить команды, если выберет другой дисплей ILI9341 (например, с большим количеством пикселей или другой ориентацией).

Сенсорным экраном управляют две функции: BeginTouch () и GetTouch (). BeginTouch () устанавливает контакт CD устройства и позволяет настроить xy min, max положения касания так, чтобы положение совпадало с координатами пикселей. GetTouch () возвращает истинное значение, если происходит касание, а также возвращает координаты.
drumsynth1.pdfSimpleILI9341.cppSimpleILI9341.hDrumSynth1.ino
Драм-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторШаг третий: пользовательский интерфейс
Есть флажок Beat для каждого из 16 ударов для каждого из 8 каналов. Нажмите на флажок такта, чтобы включить воспроизведение ноты в этом такте. Нота будет воспроизводиться голосом этого канала.

Голос для канала можно изменить, нажав кнопку Voice канала. При нажатии на голосовую кнопку появляется панель, которая позволяет выбрать один из 166 голосов и установить амплитуду канала.

MIDI имеет 128 стандартных голосов, называемых номерами «General MIDI patch» от 0 до 127, мастер использует только первые 119. Он также имеет 47 номеров «General MIDI Percussion » (от 35 до 81). Перкуссионные голоса находятся на канале 9: часть MIDI-команды с номером патча (инструмента) игнорируется, а номер ноты выбирает другой звук перкуссии.

Нажмите Voice для включения или отключения всего канала.
Светодиоды Beat показывают, какой бит в данный момент воспроизводится. Если вы нажмете на один из них, удары справа будут отключены, так что у вас может быть, например, всего 8 ударов.

Темп Slider устанавливает скорость, с которой играют удары.
Кнопка Run включает или отключает запуск шаблона.

Клавиатура нот появляется, когда текущая Нота принадлежит мелодичному голосу. Мелодичным голосом может быть, например, пианино или ксилофон. Клавиатура Note отображает ноту, которая будет воспроизведена. Можно изменить заметку, нажав на клавиатуру или на левую/правую кнопки по бокам клавиатуры.

Всякий раз, когда вы вносите изменения, шаблон сохраняется в текущей “настройке”. Процессор может запомнить 6 различных настроек. Кнопка настройки позволяет загрузить новую настройку.
Драм-машина + MIDI-синтезаторManual.pdfШаг четвертый: энкодер
Выбор голоса требует большого количества щелчков – их всего 166, – поэтому мастер решил добавить поворотный энкодер. Драм – машиной можно пользоваться и без нее.

Если вам нужен кодер, вы должны включить его, определив макрос HasEncoder define:

#define HasEncoder

Вы найдете его (с комментариями) в верхней части эскиза.

Кодировщик позволяет установить и определить
темп
работает ли он
Голос текущего канала
громкость текущего канала
Нота текущего ритма или канала
количество ударов на бар
текущая настройка
сколько каналов включено
Если вы нажмете на один из этих элементов управления, он будет выделен красным цветом. Затем поворачивая ручку энкодера, вы регулируете это значение.
Если вы нажмете на ручку, то следующий элемент управления будет выделен.
Энкодер, который мастер использовал, имеет 24 позиции срабатывания, и для каждого “щелчка” он производит полный цикл квадратурных сигналов. Другие энкодеры могут работать по другому. Возможно, вам придется написать свою собственную функцию энкодера.
Функция CheckEncoder () получает входные данные от выводов кодировщика и преобразует их в счетчики вверх / вниз. Если ваш кодировщик другой, вам придется переписать CheckEncoder ().
Драм-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторШаг пятый: добавление ударных
Вы можете дополнительно добавить барабанные пэды, чтобы играть вместе с предварительно записанными ритмами или записывать новые ритмы.

В наиболее популярных конструкциях в качестве датчика используется пьезоэлектрический диск эхолота. Пьезодиск приклеен к нижней стороне гибкой мембраны и вырабатывает напряжение при ударе о мембрану. Выход пьезоэлектрика соединен с выводом АЦП Arduino, и величина результирующего напряжения определяет, насколько громко Arduino воспроизводит звук “барабана”.

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

Пьезокристалл генерирует электричество, когда он сжимается или расширяется. И наоборот, напряжение на кристалле заставляет его сжиматься или расширяться.

Компрессия и расширение минимальные. Чтобы использовать пьезодатчик в качестве датчика ударных, его следует согнуть.
Если вы поместите пьезо между гибкой мембранной подушкой и твердой поверхностью, вы получите напряжение, когда палка ударится точно над пьезо и “раздавит” его.

Нужно сконструировать барабанную площадку так, чтобы удар по ней в любом месте вблизи центра заставлял мембрану наклоняться внутрь и сгибать диск. Если вы ударите его дальше от центра, он все равно должен наклониться, но в меньшей степени.
У мастера есть пенопластовый лист средней плотности толщиной 5 мм. Он приклеил датчик к пенопласту, затем приклеил слой поролона и DVD-диск.

Когда вы ударяете по конструкции карандашом, выходной сигнал составляет от 2 до 5 В и длится до 20 мс. Пьезо следует рассматривать как конденсатор. Чтобы предотвратить дрейф входного сигнала АЦП, датчик должен быть подключен к фиксированному напряжению (0 В или 5 В) через большой резистор. Обычно к датчику подключают резистор 1 МОм. Вместо этого он включил внутренние подтяжки Arduino на аналоговых выводах. Таким образом, показание АЦП обычно составляет 1023 и падает при ударе по конструкции.

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

Функция CheckDrumpads() эскиза Arduino считывает каждый АЦП по очереди каждые миллисекунды или около того. Если он видит скачок напряжения выше 10 мВ, то затем следит за максимальным значением АЦП примерно через 10 мс после того, как напряжение снова опустится ниже 10 мВ.

Можно подключить от 0 до 8 барабанных пэдов, подключенных к контактам A0 – A7. Константа numDrumpadPins указывает, сколько вы прикрепили, и определяет, сколько времени Arduino посвящает проверке АЦП.

Когда функция CheckDrumpads() распознает попадание, она воспроизводит ноту. Drum-pad 0 соединен с выводом A0 и, следовательно, с каналом 0 (самая верхняя линия дисплея). Барабан-колодка 1 подключается к каналу 1 (следующая строка) и так далее.

Амплитуда воспроизведения зависит от того, насколько сильно вы ударяете по диску. В команде NoteOn() вы увидите, что амплитуда равна (i-mean[chan]). Если ваш АЦП дает большие напряжения, вы можете разделить (i-mean[chan]) на 2 или 3.

Если канал “включен” (голубой круг в правом конце линии горит), то эскиз запоминает этот удар. Он устанавливает один из флажков beat. Если канал “отключен” (круг не горит), то нота просто воспроизводится и забывается.

Если вы решите иметь барабанные пэды, вы можете подключить их через D-разъем или, возможно, разъем RJ45 (LAN) или разъем RJ11 (телефон).
Драм-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторШаг шестой: сборка
Четыре платы – Arduino, VS1053, дисплей и монтажная плата – образуют сэндвич. На изображении контур Arduino желтый, VS1053 – синий, дисплей – зеленый, а плата – оранжевый.
Драм-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторМакет платы показан выше. Голубые линии – это медные полоски – убедитесь, что вы сделали разрывы там, где это необходимо (пурпурные круги). Прямые красные линии – это ссылки на компонентной стороне платы. Изогнутые красные линии – это изолированный гибкий провод. Синими линиями показаны контуры дисплея и модулей VS1053. Плата (зеленый контур) показана со стороны компонента; дисплей и модули VS1053 показаны со стороны меди.

Мастер использовал разъемы для контактов платы VS1053 и дисплея.
От D2 до D10 можно использовать в любом порядке; обновить номера контактов в начале эскиза INO
От A0 до A7 – для пэдов ударных.
D11, D12, D13 предназначены для SPI и не могут быть переназначены
D0, D1 предназначены для последовательного ввода / вывода
Драм-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторЧтобы MIDI-синтезатор был портативным он должен включать собственные динамики и усилитель.
Мастер использует усилитель PAM8403. Они доступны и очень дешевы. PAM8403 может управлять динамиком от 4 до 8 Ом, мастер использует 8 Ом.

Так же был установлен регулятор громкости. VS1053 имеет MIDI-команду для общей громкости выходного сигнала, которую можно использовать вместо этого, но ручная регулировка громкости будет более удобной.
Драм-машина + MIDI-синтезаторОбщий ток Arduino VS1053 и дисплея 115 мА. Можно запитать схему от перезаряжаемой литий-ионной батареи, но мастер решил использовать элементы AA. После тестирования он выяснил, что для корректной работы устройства нужно 6 элементов.
Драм-машина + MIDI-синтезаторДля корпуса можно использовать любую подходящую коробку. В коробке он сделал вырез для экрана и просверлил отверстия для динамика, потенциометра громкости и поворотного энкодера.

Батарейный отсек на 6 элементов АА вклеен в крышку термоклеем. Также из листового полистирола сделал пенал для стилуса.
Драм-машина + MIDI-синтезаторДрам-машина + MIDI-синтезаторВсе готово, но на этом мастер не планирует останавливаться.
Драм-машина + MIDI-синтезатор

SitesReady

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

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.