cordova-plugin-midi-sender
Version:
MIDI Communication Plugin
65 lines (56 loc) • 1.87 kB
JavaScript
var exec = require('cordova/exec');
var MIDISender = function() {};
/**
* @param {number} channelNum 0-15
* @param {number} programNum 1-128
* @return {void}
*/
MIDISender.sendProgramChange = function(channelNum, programNum) {
// add 192 for the 192-207 program change range
channelNum = parseInt(channelNum) + 191;
exec(function(){}, function(){}, "MIDISender", "sendProgramChange", [channelNum, programNum]);
};
MIDISender.sendNote = function(channelNum, programNum, valueNum) {
channelNum = parseInt(channelNum) + 143;
exec(function(){}, function(){}, "MIDISender", "sendNote", [channelNum, programNum, valueNum]);
};
MIDISender.sendControlChange = function(channelNum, programNum, valueNum) {
channelNum = parseInt(channelNum) + 175;
exec(function(){}, function(){}, "MIDISender", "sendControlChange", [channelNum, programNum, valueNum]);
};
/**
* @param {function} callback
* @return {void}
*/
MIDISender.getIncoming = function(callback)
{
exec(
function(data)
{
// For Int -> Note value
var notes = ['C','C#','D','D#','E','F','F#','G','G#','A','A#','B'];
var dc = parseInt(data.channel);
if (dc > 191 && dc < 208) { // Program Change
data.channel = dc - 192;
data.type = 'Program Change';
} else if (dc > 143 && dc < 160) { // Note
data.channel = dc - 143;
var octave = Math.floor(parseInt(data.data) / 12) - 2;
var remainder = parseInt(data.data) % 12;
data.data = notes[remainder]+octave;
data.type = (parseInt(data.value) > 0)? 'Note On': 'Note Off';
} else if (dc > 175 && dc < 192) { // CC
data.channel = dc - 175;
data.type = 'Control Change';
} else {
data.channel = dc;
}
callback.call(this, data);
},
function() {},
"MIDISender",
"getIncoming",
{}
);
};
module.exports = MIDISender;