Espruino:Примеры/MIDI-контроллер с помощью BLE-функции Puck.js
MIDI-контроллер с помощью BLE-функции Puck.js[1]
В этом руководстве мы создадим MIDI-контроллер при помощи BLE-функции Puck.js. Кроме того, по этой ссылке можно почитать о модуле для реализации MIDI-контроллера при помощи проводного соединения.
Правильно запрограммировав Puck.js, вы можете превратить его в любое BLE-устройство, включая MIDI-контроллер.
Первыми над этим проектом начали работать Джо Боубир и Джордж Мандис. Но теперь их код преобразован в модуль «ble_midi» (более подробно о модулях читайте тут), чтобы им было легче пользоваться.
Пользоваться этим модулем очень просто:
var midi = require("ble_midi");
midi.init();
setWatch(function() {
// Когда нажата кнопка...
digitalPulse(LED,1,10);
// midi.send(channel, controller, value);
midi.send(0, 60, 100);
}, BTN, { repeat:true, edge:"rising", debounce:10 });
Теперь, когда вы в следующий раз подключитесь к своему Puck.js, он будет воспринят как MIDI-инструмент. Нажатие на кнопку выполнит функцию send(), которая и отправит MIDI-команду.
Вы даже можете воспользоваться Web MIDI API, чтобы получать MIDI-данные внутри веб-страницы.
Примечание: Способ рассылки BLE-данных в Puck.js модифицирован, поэтому название Puck.js будет изменено на PuckCC.
Примечание: Чтобы всё это работало автоматически, может потребоваться Mac.
Функция midi.send() отправляет команду типа Control Change. Зачастую вместо неё лучше вызвать midi.noteOn(0,note,velocity) или midi.noteOff(0,note,0).
Справочник
Отсчёт каналов в этих функциях начинается с нуля, так что канал «0» на самом деле означает канал «1».
// Превращает устройство в MIDI-контроллер:
exports.init = function () { ... }
// Отправляет необработанную MIDI-команду:
exports.cmd = function (cmd, d1, d2) { ... }
// Отправляет MIDI-команду типа Control Change
// (0xB0; события потокового управления):
exports.send = function (channel, controller, value) { ... }
// Отправляет MIDI-команду Note On (0x90; активация ноты):
exports.noteOn = function (channel, note, velocity) { ... }
// Отправляет MIDI-команду Note Off (0x80; деактивация ноты):
exports.noteOff = function (channel, note, velocity) { ... }
См.также
Внешние ссылки