xxxxxxxxxx
82
let pressed = [];
let frequencies = [];
let forces = [];
let synth;
function success (midi) {
console.log('Got midi!', midi);
var inputs = midi.inputs.values();
console.log(inputs);
for (var input = inputs.next();
input && !input.done;
input = inputs.next()) {
// each time there is a midi message call the onMIDIMessage function
input.value.onmidimessage = onMIDIMessage;
}
}
function onMIDIMessage (message) {
// console.log(message.data);
if(message.data[0] == 144){
console.log(`PRESS ${message.data[1]} with ${message.data[2]}`);
pressed.push(message.data[1]);
playSynth(message.data[1], message.data[2]);
}
if(message.data[0] == 128){
console.log(`OFF ${message.data[1]} at ${pressed.indexOf(message.data[1])} position`);
let index = pressed.indexOf(message.data[1]);
if (index > -1) {
pressed.splice(index, 1);
}
}
redraw();
}
function failure () {
console.error('No access to your midi devices.')
}
function setup() {
createCanvas(800, 400);
if (navigator.requestMIDIAccess) {
navigator.requestMIDIAccess()
.then(success, failure);
}
synth = new p5.PolySynth();
noLoop();
}
function draw() {
background(220);
noStroke();
textSize(8);
console.log(pressed);
for(let i=0; i<128;i++)
{
if(pressed.indexOf(i) != -1){
fill("red");
} else{
fill("white");
}
rect(6 * i + 10, 10, 5, 100);
text(i, 6 * i, 400 - i * 2)
}
}
function playSynth(pitch, velocity) {
userStartAudio();
let note = pitch;
// note velocity (volume, from 0 to 1)
velocity = map(velocity, 0, 127, 0, 1);
// time from now (in seconds)
let time = 0;
// note duration (in seconds)
let dur = 1/2;
console.log("Playing"+note);
synth.play(note, velocity, time, dur);
}