xxxxxxxxxx
38
function setup() {
createCanvas(400, 400);
}
let voices = [{note: 0, playing: false}, {note: 0, playing: false}, {note: 0, playing: false}];
let releaseOrder = [0,1,2]; //voice numbers in release order, old > new
function draw() {
background(220);
}
function keyPressed() {
if (keyCode < 65 || keyCode > 90) return; //a-z
let freeVoice = releaseOrder.find(voice => !voices[voice].playing);
if (freeVoice > -1) {
voices[freeVoice].playing = true;
voices[freeVoice].note = keyCode;
}
print('pressed ' + JSON.stringify(voices));
}
function keyReleased() {
if (keyCode < 65 || keyCode > 90) return; //a-z
let matchedVoice = voices.findIndex(voice => voice.playing && voice.note == keyCode);
if (matchedVoice > -1) {
voices[matchedVoice].playing = false;
//find voice in releaseOrder
let roIndex = releaseOrder.findIndex(ro => ro == matchedVoice);
releaseOrder.splice(roIndex, 1); //remove
releaseOrder.push(matchedVoice); //re-add at end
print('releaseOrder ' + JSON.stringify(releaseOrder) + '\n');
}
print('released ' + JSON.stringify(voices));
}