-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmidi.js
More file actions
executable file
·68 lines (54 loc) · 2.34 KB
/
midi.js
File metadata and controls
executable file
·68 lines (54 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
let midi;
export default midi;
export let pressed = false;
export function askMidiPermissions () {
navigator.permissions.query({ name: "midi" }).then((result) => {
if (result.state !== 'granted') {
document.querySelector('#message').innerHTML += `<p>NotAllowedError: MIDI Permission denied</p>`;
} else {
navigator.requestMIDIAccess().then(onMIDISuccess, onMIDIFailure);
}
});
}
function onMIDISuccess(midiAccess) {
console.log('MIDI ON')
document.querySelector('#message').innerHTML += `<p>MIDI ready!</p>`;
midi = midiAccess;
midiAccess.inputs.forEach((entry) => { entry.onmidimessage = onMIDIMessage; });
}
function onMIDIMessage(event) {
let str = `MIDI message received: `; /*at timestamp ${event.timeStamp} [${event.data.length} bytes]*/
for (let i=0; i<event.data.length; i++) {
let character = event.data[i];
str += `${i}: ${character} |`;
}
if (event.data[0] != 248) console.log(str);
//document.querySelector('#message').innerHTML = str;
if (event.data[0] == 153 && event.data[1] == 40 && event.data[2] > 0) window.invertMode = !window.invertMode;
if (event.data[0] == 153 && event.data[1] == 41 && event.data[2] > 0) pressed = true;
if (event.data[0] == 137 && event.data[1] == 41 && event.data[2] == 0 ) pressed = false;
if (event.data[0] == 153 && event.data[1] == 42 && event.data[2] > 0) window.restart();
if (event.data[0] == 153 && event.data[1] == 43 && event.data[2] > 0) window.switchAnim();
for (let i=1; i<=8; i++) {
let ctrl = document.querySelector('#ctrl'+i);
if (event.data[0] == 176 && event.data[1] == 20+i) {
const midiValue = Number(ctrl.min) + (Number(event.data[2])/127) * (Number(ctrl.max)-Number(ctrl.min))
ctrl.value = midiValue;
if (window.pop) {
const popCtrl = window.pop.document.querySelector('#ctrl'+i);
popCtrl.value = midiValue;
}
console.log('MIDI'+i+': '+ctrl.value);
}
}
let bpm = Math.round(Math.pow(Number(document.querySelector('#ctrl2').value), 4));
document.querySelector('#bpm').value = bpm;
if (window.pop) {
let bpm = Math.round(Math.pow(Number(document.querySelector('#ctrl2').value), 4));
document.querySelector('#bpm').value = bpm;
//console.log(v);
}
}
function onMIDIFailure(msg) {
document.querySelector('#message').innerHTML += `<p>MidiAccessError: ${msg}</p>`;
}