Адаптер USB в MIDI на Arduino


В данной статье мы рассмотрим простейший адаптер USB в MIDI на основе платы Arduino Micro или Arduino Leonardo, опционально с возможностью фильтрации данных MIDI.

Внешний адаптера USB в MIDI на основе платы ArduinoНеобходимые компоненты

  1. Плата Arduino Micro (купить на AliExpress) или Arduino Leonardo.
  2. Оптопара 6n137 (купить на AliExpress).
  3. Переключатель (коммутационный диод) 1N4148 (купить на AliExpress).
  4. Конденсатор 100 нФ (купить на AliExpress).
  5. Резисторы 220 Ом и 10 кОм (купить на AliExpress).
  6. Резистор для сквозного монтажа (Through Hole Resistor) 470 Ом.
  7. Светодиод (купить на AliExpress).
  8. Держатель для светодиода.
  9. DIN Audio / Video Connector, 5 Contacts (аудио/видео коннектор) – 2 шт.
  10. Пластмассовый корпус.
  11. Печатная плата.

Общие принципы работы проекта

MIDI (Musical Instrument Digital Interface) представляет собой цифровой интерфейс музыкальных инструментов (стандарт сопряжения электронных музыкальных инструментов с компьютером и программным обеспечением).

Автор этого проекта потратил достаточно много времени на поиск в сети Интернет адаптера USB в MIDI на основе платы Arduino, но проекты, которые он нашел, не удовлетворили его (по качеству), поэтому он решил сделать собственный адаптер подобного типа.

Первоначально проект рассматриваемого в данной статье адаптера был сконструирован на основе платы Arduino Leonardo, а после того, как автор убедился в его работе, была изготовлена его версия на основе платы Arduino Micro. Обе этих платы построены на основе микроконтроллера ATmega32u4, который, по сути, сам является преобразователем интерфейсов USB в MIDI.

Вид внутренностей адаптера USB в MIDI на основе платы Arduino

Внешний вид корпуса адаптера

В проекте используется оптопара и несколько резисторов чтобы создать два полностью изолированных контура тока. В качестве оптопары в проекте использована 6n137 – она достаточно быстрая и широко распространенная. Как показано ниже на приведенной схеме, у коннектор MIDI OUT два контакта замкнуты на землю – это стандартно для MIDI.

Непосредственно для решения задач преобразования интерфейсов автор проекта использовал библиотеку Control Surface – по его мнению это лучшая библиотека для решения подобных задач, которая отрабатывает все (даже самые сложные) аспекты протокола MIDI.

Также данная библиотека позволяет добавлять все виды дополнительного оборудования в проект. К примеру, вы можете добавить в проект несколько потенциометров, ножных переключателей или кнопок, подключенных к аналоговым/цифровым входам чтобы добавить функциональности в управлении протоколом MIDI.

Также вы можете использовать обратную связь чтобы обрабатывать данные перед тем как они будут поступать из MIDI в USB или в другом направлении. Автор данного проекта использовал это чтобы исправить не совсем корректное применение MIDI в его синтезаторе Roland D50. Дело в том, что его синтезатор передает команду "all notes off" каждый раз когда происходит отжатие последней нажатой клавиши. А многие современные аудио приложения интерпретируют это как немедленное прекращение запущенных процессов. А если мы в нашем адаптере будем фильтровать эту фразу "all notes off", то наш синтезатор D50 снова становится полезным в качестве "ведущей клавиатуры (master keyboard)". В представленный ниже код программы добавлена функция фильтрации фразы "all notes off".

При использовании библиотеки Control Surface было обнаружено, что она не может корректно обрабатывать большие пакеты SysEx (эксклюзивных системных сообщений). Это приводит к ошибкам в работе с редактором синтезатора D50 поскольку он часто использует большие пакеты SysEx. В связи с этим автором проекта в комментариях к программе добавлены инструкции по поводу того, как бороться с данной проблемой. Автор библиотеки Control Surface указал, что эта проблема будет устранена им в версиях библиотеки 2.x, поэтому, когда вы будете читать эту статью, возможно, эта проблема с большими пакетами будет уже устранена.

Также вы можете попробовать использовать другие библиотеки для работы с MIDI или даже написать свой собственный код для этого – представленная в этом проекте схема устройства должна корректно работать с любыми библиотеками, поддерживающими преобразование USB в MIDI и Serial MIDI.

Схема проекта

Схема адаптера USB в MIDI на основе платы Arduino Micro представлена на следующем рисунке.

Схема адаптера USB в MIDI на основе платы Arduino MicroПосле окончательной сборки у автора получилась конструкция следующего вида:

Внешний вид конструкции проекта

Исходный код программы (скетча)

Источник статьи

(Проголосуй первым!)
Загрузка...
3 071 просмотров

Комментарии

Адаптер USB в MIDI на Arduino — 20 комментариев

  1. Ребята, не будьте такими же идиотами как я и читайте документацию. Если вы используете плату с поддержкой usb а это платы на atmega32u4 то помимо установки библиотеки Control Surface вам понадобится установить ещё одну под названием MIDIUSB иначе будет сыпать ошибками об отсутствующем файле и не будет компилироваться.

  2. мне бы хотелось добавить пичбэнд резистор к дополнительным контролерам в библиотеке. кто знает как это делается?

    • Вам лучше задать этот вопрос на гитхабе непосредственно автору этой библиотеки

  3. На Arduino UNO не работает, пробовал привязать softSerial, но компилятор ругается, разбираться не стал взял библиотеку usbmidi и поменял пару строк в примере и все заработало. Осталось сделать это все плаг энд плей

    • Да, спасибо за конструктивный комментарий. Будем признательны если опишите ваше решение немного поподробнее

      • Схема подключения та же, плаг энд плей на уно не получится сделать, поэтому устанавливаем две программы на пк loopMidi и hairless midi. Закачиваем в ардуино мой код и наслаждаемся.
        #include
        #include
        SoftwareSerial softSerial(8, 9); // RX, TX

        void setup() {

        softSerial.begin(31250); //MIDI baudrate
        Serial.begin(115200);
        }

        void loop() {

        //Handle USB communication
        USBMIDI.poll();

        //Forward MIDI
        while(USBMIDI.available()) softSerial.write(USBMIDI.read());
        softSerial.flush();
        while(softSerial.available()) Serial.write(softSerial.read());
        USBMIDI.flush();
        }

  4. Добрый день! Так же собрал на Леонардо, все отлично. Не подскажите, возможно ли схему дополнить выходом midi Thru?

    • Добрый вечер. К сожалению, не подскажу. Я плохо разбираюсь в работе со звуком и в различных модификациях midi. Эту статью я перевел для своего сайта потому что она вызвала очень большой интерес на источнике, с которого я ее переводил.

      • Понял. Проще наверное отдельный midi-thru сделать на 74HC14AN, вроде бы много схем в сети.

        • Возможно, но я просто не изучал данный вопрос, не могу поэтому здесь подсказать ничего конкретного

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *