xxxxxxxxxx
// IanM 2018
// https://www.openprocessing.org/user/78596/#sketches
//
// drum test
let playing = false
let oscA = ''
let oscB = ''
let oscC = ''
let noise = ''
let envA = ''
let envC = ''
let fft
let DRUMS = 4
let DRUMX = 100
let DRUMY = 100
let DRUMSP = 10
let DRUMW = 100
let DRUMH = 100
function setup() {
createCanvas(windowWidth, windowHeight);
background(0,0,80)
fill('red')
stroke('white')
for (let i=0; i<DRUMS; i++) {
rect(DRUMX + i*(DRUMW+DRUMSP), DRUMY, DRUMW, DRUMH, 20)
}
setupNotes()
fft = new p5.FFT()
}
function draw() {
fill(0,0,80)
rect(0, windowHeight/2, windowWidth, windowHeight/2)
let spectrum = fft.analyze();
strokeWeight(2);
stroke(0,0,80)
fill(0,200,0); // spectrum is green
for (var i = 0; i< spectrum.length/20; i++){
fill(spectrum[i]/4, spectrum[i], 0)
var x = map(i, 0, spectrum.length/20, 0, windowWidth);
var h = map(spectrum[i], 0, 255, 0, windowHeight/2);
rect(x, windowHeight - h, spectrum.length/20, h )
}
/*
var waveform = fft.waveform();
noFill();
beginShape();
stroke(255,0,0); // waveform is red
strokeWeight(1);
for (var i = 0; i< waveform.length; i++){
var x = map(i, 0, waveform.length, 0, width);
var y = map( waveform[i], -1, 1, 0, height);
vertex(x,y);
}
endShape();
*/
}
function setupNotes() {
oscA = new p5.Oscillator();
oscA.setType('triangle');
oscA.freq(40);
oscA.amp(0);
oscA.start();
oscB = new p5.Oscillator();
oscB.setType('sine');
oscB.freq(80);
oscB.amp(0);
oscB.start();
noise = new p5.Noise()
noise.start()
noise.amp(0)
envA = new p5.Env()
envA.setADSR(0.001, 0.1, 0.2, 0.1)
envA.setRange(1, 0)
oscC = new p5.SinOsc()
envC = new p5.Env()
envC.setADSR(0.001, 0.5, 0.1, 0.5)
envC.setRange(1,0)
oscC.freq(440)
oscC.amp(0);
oscC.start()
}
function kick() {
oscA.amp(1, 0.01);
oscB.amp(1, 0.01);
oscA.amp(0.001, 0.5);
oscB.amp(0.001, 0.5);
oscA.freq(120, 0.001)
oscB.freq(50, 0.001)
oscA.freq(0.001, 0.5)
oscB.freq(0.001, 0.5)
}
function tap() {
envA.play(noise)
}
function tone() {
envC.play(oscC, 0, 0.1)
}
function mouseClicked() {
if (mouseX > DRUMX && mouseX < DRUMX + DRUMS*(DRUMW+DRUMSP) && mouseY > DRUMY && mouseY < (DRUMY+DRUMH)) {
let d = floor((mouseX - DRUMX)/(DRUMW+DRUMSP))
switch(d) {
case(0) :
kick()
break
case(1) :
tap()
break
case(2) :
tone()
break
case(3) :
kick()
break
default :
break
}
}
}