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

См.также

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