Espruino:Примеры/MIDI-контроллер с помощью BLE-функции Puck.js: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показаны 2 промежуточные версии 1 участника)
Строка 13: Строка 13:
Пользоваться этим модулем очень просто:
Пользоваться этим модулем очень просто:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
var midi = require("ble_midi");
var midi = require("ble_midi");
midi.init();
midi.init();
Строка 29: Строка 29:
Вы даже можете воспользоваться [https://webaudio.github.io/web-midi-api/ Web MIDI API], чтобы получать MIDI-данные внутри веб-страницы.
Вы даже можете воспользоваться [https://webaudio.github.io/web-midi-api/ Web MIDI API], чтобы получать MIDI-данные внутри веб-страницы.


'''Примечание:''' Способ рассылки BLE-данных в [[Puck.js]] модифицирован, поэтому название [[Puck.js]] будет изменено на [[PuckCC]].
{{Примечание1|Способ рассылки BLE-данных в [[Puck.js]] модифицирован, поэтому название [[Puck.js]] будет изменено на [[PuckCC]].}}


'''Примечание:''' Чтобы всё это работало автоматически, может потребоваться [[Mac]].
{{Примечание1|Чтобы всё это работало автоматически, может потребоваться [[Mac]].}}


Функция midi.send() отправляет команду типа '''Control Change'''. Зачастую вместо неё лучше вызвать '''midi.noteOn(0,note,velocity)''' или '''midi.noteOff(0,note,0)'''.
Функция midi.send() отправляет команду типа '''Control Change'''. Зачастую вместо неё лучше вызвать '''midi.noteOn(0,note,velocity)''' или '''midi.noteOff(0,note,0)'''.
Строка 39: Строка 39:
Отсчёт каналов в этих функциях начинается с нуля, так что канал ''«0»'' на самом деле означает канал ''«1»''.
Отсчёт каналов в этих функциях начинается с нуля, так что канал ''«0»'' на самом деле означает канал ''«1»''.


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
// Превращает устройство в MIDI-контроллер:
// Превращает устройство в MIDI-контроллер:
exports.init = function () { ... }
exports.init = function () { ... }
Строка 58: Строка 58:


=См.также=
=См.также=
{{ads}}


=Внешние ссылки=
=Внешние ссылки=
Строка 65: Строка 63:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 20:45, 22 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


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

См.также

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