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) { ... }

См.также

Внешние ссылки