5e7a1ee623207b7a7f9bfba15ed.../fof.js

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