Espruino:Примеры/MIDI-контроллер с помощью BLE-функции Puck.js: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 13: | Строка 13: | ||
Пользоваться этим модулем очень просто: | Пользоваться этим модулем очень просто: | ||
<syntaxhighlight lang="javascript | <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-данные внутри веб-страницы. | ||
{{Примечание1|Способ рассылки BLE-данных в [[Puck.js]] модифицирован, поэтому название [[Puck.js]] будет изменено на [[PuckCC]].}} | |||
{{Примечание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 | <syntaxhighlight lang="javascript"> | ||
// Превращает устройство в MIDI-контроллер: | // Превращает устройство в MIDI-контроллер: | ||
exports.init = function () { ... } | exports.init = function () { ... } | ||
Строка 58: | Строка 58: | ||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 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-данные внутри веб-страницы.
Функция 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) { ... }
См.также
Внешние ссылки