38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
var ws = ig.game.O868.ws
|
|
|
|
var keyMsgs = []
|
|
var useKeyboard = true // turns out guitar only has 33 unique notes while keyboard has 38
|
|
if (typeof useKeyboard != "undefined") {
|
|
var octaves = "=;>".split('')
|
|
var notes = "c cs d ds e f fs g gs a as b".split(' ')
|
|
for (let o of octaves)
|
|
for (let n of notes)
|
|
keyMsgs.push(`"m":"xf"U"i":"classic_piano*"o":${o},"n":"${n}?`)
|
|
} else /*use guitar*/ {
|
|
var guitarKs = ">6 >7 >8 >9 )( )= ); )< )> >= >; >< >> >) <; << <> <) <6 ;< ;> ;) ;6 ;7 =) =6 =7 =8 ) 6 7 8 9".split(' ')
|
|
guitarKs.forEach(k => keyMsgs.push(`"m":"xf"U"i":"guitar*"k":${k}%`))
|
|
}
|
|
|
|
|
|
var OFFSET = 15; // use this to adjust the translation of the narrow keyboard on the full 88 key range. I think 25 puts it in the middle ( 88/2 - (38/2) = 25 ). 15 makes notes match.
|
|
|
|
navigator.requestMIDIAccess().then(midi => {
|
|
window.midi = midi;
|
|
window.midiinput = midi.inputs.values().next().value;
|
|
midiinput.onmidimessage = function midimessagehandler(evt) {
|
|
var channel = evt.data[0] & 0xf;
|
|
var note_number = evt.data[1];
|
|
var cmd = evt.data[0] >> 4;
|
|
var vel = evt.data[2];
|
|
if(cmd == 8 || (cmd == 9 && vel == 0)) {
|
|
// NOTE_OFF
|
|
} else if(cmd == 9) {
|
|
// NOTE_ON
|
|
//press(MIDI_KEY_NAMES[note_number - 9 + MIDI_TRANSPOSE], vel / 100);
|
|
let keyMsg = keyMsgs[note_number - 21 - OFFSET];
|
|
if (keyMsg) ws.send(keyMsg);
|
|
} else if(cmd == 11) {
|
|
// CONTROL_CHANGE
|
|
}
|
|
}
|
|
}) |