Как сделать MIDI-контроллер с Arduino

Как музыкант, который накопил коллекцию музыкальных инструментов и шумовых коробок, скромный Arduino является идеальным инструментом для создания собственного MIDI-контроллера. В то время как Raspberry Pi, возможно, взяли корону для Интернета вещей (IoT)

проекты, простые Arduino Uno (какие бывают типы Arduino?

) имеет более чем достаточно мощности для этого проекта.

Первый раз с использованием Arduino? Не беспокойтесь, у нас есть полное руководство для начинающих Arduino

Прочитать, прежде чем заняться этим проектом.

Arduino-Midi-контроллер-Макетная

Что такое MIDI?

MIDI расшифровывается как цифровой интерфейс музыкальных инструментов. Он описывает стандартный способ общения музыкальных устройств друг с другом. Если у вас есть электронная клавиатура, у вас, вероятно, есть MIDI-интерфейс. Хотя есть несколько технических деталей, связанных с внедрением MIDI, важно помнить, что MIDI не аудио! MIDI-данные — это простой набор инструкций (одна инструкция называется «сообщением»), которые другое устройство может реализовать для создания разных звуков или параметров управления.

MIDI поддерживает 16 каналов. Это означает, что каждый кабель может поддерживать 16 различных устройств, независимо взаимодействующих друг с другом. Устройства подключаются с помощью 5-контактного кабеля DIN. DIN означает «Немецкий институт стандартизации» и представляет собой просто кабель с пятью контактами внутри разъема. USB часто используется вместо 5-контактного DIN, или может использоваться интерфейс USB-MIDI.

MIDI-кабель-мужчина

Изменение управления и изменение программы

Существует два основных типа сообщений MIDI: изменение управления и изменение программы.

Сообщения Control Change (CC) содержат номер контроллера и значение от 0 до 127. Сообщения CC часто используются для изменения настроек, таких как громкость или высота звука. Устройства, поддерживающие MIDI, должны поставляться с руководством, объясняющим, какие каналы и сообщения настроены по умолчанию, и как их изменить (так называемое сопоставление MIDI).

Сообщения Program Change (ПК) проще, чем сообщения CC. Сообщения ПК состоят из одного номера и используются для изменения предустановки или патча на устройстве. Сообщения на ПК иногда называют «Patch Change». Как и в случае с сообщениями CC, производители должны предоставить документ с изложением того, какие предварительные настройки изменены конкретным сообщением.

Что тебе понадобится

  • Arduino
  • 5-контактная розетка DIN
  • 2 х 220 Ом резисторы
  • 2 х 10 кОм резисторы
  • 2 х мгновенные выключатели
  • Монтажные провода
  • макетировать
  • MIDI кабель
  • MIDI-устройство или интерфейс USB

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

Схема сборки

Arduino-Midi-контроллер замыкание

MIDI соединение

MIDI-Распиновка

Подключите ваш MIDI-разъем следующим образом:

  • MIDI контакт 5 для передачи Arduino (TX) 1 через резистор 220 Ом
  • MIDI-контакт 4 для Arduino + 5В через резистор 220 Ом
  • MIDI контакт 2 для Arduino Ground

Кнопка подключения

Кнопки работают, изменяя сопротивление, которое «видит» Arduino. Контакт Arduino проходит через переключатель прямо на землю (НИЗКИЙ) через резистор 10 кОм (резистор «понижающий», гарантирующий, что значение остается низким). Когда кнопка нажата, значение, видимое схемой, изменяется на + 5 В без резистора (ВЫСОКО). Arduino может обнаружить это изменение, используя digitalRead (контактный) команда. Подключите кнопки к контактам 6 и 7 на цифровом входе / выходе Arduino (I / O). Подключите обе кнопки:

  • Левая сторона кнопки до + 5В
  • Правая сторона кнопки к Arduino Ground через резистор 10 кОм
  • Правая сторона кнопки к выводу Arduino (6 или 7)

MIDI-тестирование

Теперь, когда все оборудование закончено, пришло время протестировать его. Вам понадобится интерфейс USB-MIDI (многие аудиоинтерфейсы могут сделать это) и кабель MIDI. MIDI-порт, подключенный к макету, отправляет данные, поэтому это вывод. Ваш компьютер получает данные, поэтому это ввод. В этом проекте используется отличная библиотека Arduino MIDI v4.2 от Forty Seven Effects. После того, как вы установили библиотеку, вы можете включить ее в свой код, перейдя в Эскиз> Включить библиотеку> MIDI.

Вам также понадобится программа для мониторинга входящих MIDI-данных:

  • MIDI-монитор для OS X
  • MIDI-OX для Windows
  • на свой компьютер и загрузите следующий тестовый код (не забудьте выбрать правильную плату и порт из Инструменты> Доска а также Инструменты> Порт меню).

    #include
    #include
    #include
    #include
    #include
    MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut
    void setup() {
    Serial.begin(31250); // setup serial for MIDI
    }
    void loop() {
    midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel
    delay(1000);  // wait 1 second
    midiOut.sendProgramChange(12,1); // send a MIDI PC -- 12 = value, 1 = channel
    delay(1000);  // wait 1 second
    }

    Этот код отправит сообщение CC, подождите 1 секунду, отправит сообщение на ПК, затем будет ждать 1 секунду в течение неопределенного времени. Если все работает правильно, вы должны увидеть сообщение на вашем MIDI-мониторе.

    Если ничего не происходит, не паникуйте! Попробуйте устранить неполадки:

    • Убедитесь, что все соединения правильные
    • Убедитесь, что MIDI-порт подключен правильно — на внешних краях должно быть 2 запасных контакта.
    • Дважды проверьте правильность схемы
    • Убедитесь, что схема подключена к интерфейсу USB-MIDI с помощью кабеля MIDI.
    • Убедитесь, что ваш MIDI-кабель подключен к вход на вашем интерфейсе USB-MIDI
    • Убедитесь, что у Arduino есть сила
    • Установите правильный драйвер для вашего интерфейса USB-MIDI

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

    Тестирование кнопок

    Теперь пришло время проверить правильность работы кнопок. Загрузите следующий тестовый код. MIDI не нужно подключать для проверки этой части.

    const int buttonOne = 6; // assign button pin to variable
    const int buttonTwo = 7; // assign button pin to variable
    void setup() {
    Serial.begin(9600); // setup serial for text
    pinMode(buttonOne,INPUT); // setup button as input
    pinMode(buttonTwo,INPUT); // setup button as input
    }
    void loop() {
    if(digitalRead(buttonOne) == HIGH) { // check button state
    delay(10); // software de-bounce
    if(digitalRead(buttonOne) == HIGH) { // check button state again
    Serial.println("Button One Works!"); // log result
    delay(250);
    }
    }
    if(digitalRead(buttonTwo) == HIGH) { // check button state
    delay(10); // software de-bounce
    if(digitalRead(buttonTwo) == HIGH) { // check button state again
    Serial.println("Button Two Works!"); // log result
    delay(250);
    }
    }
    }
    

    Запустите этот код (но не отключайте USB-кабель) и откройте последовательный монитор (Вверху справа> Последовательный монитор). Когда вы нажимаете кнопку, вы должны увидеть «Button One Works!» Или «Button Two Works!» В зависимости от нажатой кнопки.

    Есть один важный момент, который стоит убрать из этого примера — де-отскок программного обеспечения. Это простая задержка в 10 миллисекунд (мс) между проверкой кнопки и повторной проверкой кнопки. Это повышает точность нажатия кнопки и помогает предотвратить шум, запускающий Arduino. Вам не нужно делать это, хотя это рекомендуется.

    Создание контроллера

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

    Этот пример отправит различное сообщение CC для каждой нажатой кнопки. Я использую это для управления Ableton Live 9.6 на OS X. Код похож на оба тестовых примера выше.

    #include
    #include
    #include
    #include
    #include
    const int buttonOne = 6; // assign button pin to variable
    const int buttonTwo = 7; // assign button pin to variable
    MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut
    void setup() {
    pinMode(buttonOne,INPUT); // setup button as input
    pinMode(buttonTwo,INPUT); // setup button as input
    Serial.begin(31250); // setup MIDI output
    }
    void loop() {
    if(digitalRead(buttonOne) == HIGH) { // check button state
    delay(10); // software de-bounce
    if(digitalRead(buttonOne) == HIGH) { // check button state again
    midiOut.sendControlChange(56,127,1); // send a MIDI CC -- 56 = note, 127 = velocity, 1 = channel
    delay(250);
    }
    }
    if(digitalRead(buttonTwo) == HIGH) { // check button state
    delay(10); // software de-bounce
    if(digitalRead(buttonTwo) == HIGH) { // check button state again
    midiOut.sendControlChange(42,127,1); // send a MIDI CC -- 42 = note, 127 = velocity, 1 = channel
    delay(250);
    }
    }
    }
    

    Примечание — вы не сможете использовать Serial.println () с выходом MIDI.
    Если вы хотите отправить сообщение ПК вместо CC, просто замените:

    midiOut.sendControlChange(42,127,1);

    С:

    midiOut.sendProgramChange(value, channel);
    

    В бою

    Ниже приведена демонстрация в качестве контроллера для Ableton Live (Лучшее программное обеспечение для DJ на любой бюджет

    ). В верхнем правом углу отображаются аудиометры, а в верхнем среднем — входящие миди-сообщения (через MIDI Monitor в OS X).

    Вы сделали MIDI-контроллер?

    Существует много практических применений для пользовательского контроллера MIDI. Вы можете построить огромный блок с ножным управлением или стильный студийный контроллер. Вы сделали пользовательский MIDI-контроллер? Дайте мне знать в комментариях, я хотел бы видеть их!

    Изображение предоставлено Китом Джентри через Shutterstock.com

Ссылка на основную публикацию
Adblock
detector