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 |
---|
развернутьArduino продукты |
---|
развернутьПримеры Arduino |
---|
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino