-
Notifications
You must be signed in to change notification settings - Fork 0
/
tools.js
62 lines (52 loc) · 1.53 KB
/
tools.js
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
if(typeof hasRunSetup === 'undefined') {
console.log("Run Once")
//create an array to hold our cc values and init to a normalized value
cc=Array(128).fill(0.5)
getMIDIMessage = function(midiMessage) {
var arr = midiMessage.data
if (arr[0] != 176) {
console.log("Incorrect channel: Ignore")
return
}
var index = arr[1]
//console.log('Midi received on cc#' + index + ' value:' + arr[2] + 'channel:' + arr[0]) // uncomment to monitor incoming Midi
var val = (arr[2])/127.0 // normalize CC values to 0.0 - 1.0
cc[index]=val
}
// To be used in Hydra
function c(id, from = 0, to = 1) {
return () => { return cc[id] * (to - from) + from}
}
// To be used inside p5 draw function:
function _c(id, from = 0, to = 1) {
return cc[id] * (to - from) + from
}
function onMIDISuccess(midiAccess) {
console.log("Success");
var inputs = midiAccess.inputs;
var outputs = midiAccess.outputs;
for (var input of midiAccess.inputs.values()){
input.onmidimessage = getMIDIMessage;
}
}
function onMIDIFailure() {
console.log('Could not access your MIDI devices.');
}
m = []
let knobID = 0
for(i = 0; i < 4; i++) {
const page = []
for(o = 0; o < 4; o++) {
const row = []
for(u = 0; u < 4; u++) {
row.push(knobID) // cc(i*16+u+4*o, 0)
knobID++
}
page.push(row)
}
m.push(page)
}
navigator.requestMIDIAccess().then(onMIDISuccess, onMIDIFailure)
_ = new P5({mode: 'WEBGL'})
hasRunSetup = true
}