Arduino:Примеры/Midi
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Проигрыватель MIDI-нот [1]
Этот урок показывает, как проигрывать MIDI-ноты, передаваемые от Arduino.
MIDI (Musical Instrument Digital Interface, т.е. цифровой интерфейс музыкальных инструментов) – это удобный протокол для управления синтезаторами, секвенсорами и другими музыкальными устройствами. MIDI-устройства, как правило, делятся на два широких подкласса: контроллеры (т.е. девайсы, которые генерируют MIDI-сигналы на основе определенных человеческих действий вроде нажатия на клавишу или поворота ручки громкости) и синтезаторы (включая семплеры, секвенсоры и т.д.). Последняя подгруппа при помощи MIDI-данных может создавать звуковые, световые и некоторые другие эффекты.
MIDI – это протокол последовательной передачи данных, который оперирует 31250 битами в секунду. Впрочем, возможностей последовательного порта Arduino (а также всех последовательных портов, имеющихся на Arduino Mega) хватает для того, чтобы справиться с такой нагрузкой.
MIDI-байты делятся на два типа: командные байты и байты данных. Командные байты – это всегда байты со значением 128 или выше (или от 0x80 до 0xFF в шестнадцатеричном виде), а байты данных – это всегда байты со значением 127 и меньше (от 0х00 до 0х7F). Командные байты – это сообщения вроде Note On (начало активации ноты), Note Off (конец активации ноты), Pitch Bend (модуляция звука) и т.д. Байты данных – это сообщения о высоте ноты, скорости, громкости, уровне модуляции и т.д. Более подробно о характеристиках протокола MIDI можно почитать, например, здесь. Данные MIDI записываются, как правило, в шестнадцатеричном виде, поскольку «банки» и инструменты MIDI часто группируются по 16. Более подробную информацию можно прочесть в этом введении в MIDI или в этом примере.
Необходимое оборудование
- Плата Arduino UNO;
- Один разъем MIDI;
- Один 220-омовый резистор;
- Провода-перемычки;
- MIDI-устройство (опционально, для тестирования);
Внимание!
В этом примере используется класс Serial. Поэтому, если в основе вашей платы лежит микроконтроллер 32u4 (то есть, допустим, у вас плата вроде Leonardo), замените Serial на Serial1.
Цепь
Тип MIDI-разъема – «мама». Он подключается к Arduino следующим образом:
- 5-ый контакт MIDI-разъема подключаем к 1-ому цифровому контакту Arduino
- 2-ой контакт MIDI-разъема подключаем к «земле»
- 4-ый контакт MIDI-разъема подключаем к 5-вольтовому напряжению (через 220-омовый резистор)
Схема
Код
/*
Проигрыватель MIDI-нот
Этот скетч демонстрирует, как использовать 1-ый цифровой контакт
для передачи данных с MIDI-нотами.
Если подключить эту цепь к синтезатору, она последовательно
проиграет ноты с F#-0 (0x1E) по F#-5 (0x5A).
Цепь:
* 5-ый контакт MIDI-разъема подключен к 1-ому цифровому контакту
* 2-ой контакт MIDI-разъема подключен к «земле»
* 4-ый контакт MIDI-разъема подключен к 5-вольтовому контакту (через 220-омовый резистор)
К MIDI-разъему подсоедините MIDI-кабель, а к нему – MIDI-синтезатор, а затем проиграйте музыку.
Создан 13 июня 2006 года,
модифицирован 13 августа 2012 Томом Иго (Tom Igoe)
Этот код не защищен авторским правом.
http://www.arduino.cc/en/Tutorial/Midi
*/
void setup() {
// задаем скорость передачи MIDI-данных:
Serial.begin(31250);
}
void loop() {
// проигрываем ноты с F#-0 (0x1E) до F#-5 (0x5A):
for (int note = 0x1E; note < 0x5A; note ++) {
// активируем 1-ый канал (0x90),
// выставляем длительность ноты (note),
// задаем среднюю скорость (0x45):
noteOn(0x90, note, 0x45);
delay(100);
// активируем 1-ый канал (0x90),
// выставляем длительность ноты (note),
// задаем нулевую скорость (0x00):
noteOn(0x90, note, 0x00);
delay(100);
}
}
// проигрываем MIDI-ноту.
// проверку на то, является ли значение командного байта больше 127,
// а значение байта данных меньше 127, не делаем.
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(cmd);
Serial.write(pitch);
Serial.write(velocity);
}
См.также
- serial.begin()
- for() loop
- Serial Call Response
- For Loop
- ASCII Table
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino