xxxxxxxxxx
112
/*
----- Sound Mini Series by Patt Vira -----
Name: EP2_p5.Oscillator
Video Tutorial: https://youtu.be/kFKgoUWxfJc
Connect with Patt: @pattvira
https://www.pattvira.com/
----------------------------------------
*/
// Piano keys
let octave = 4;
let num = octave * 7;
let y = 300;
let whiteKeys = [];
let whiteX0; let whiteW; let whiteH;
let blackKeys = [];
let blackX0; let blackW; let blackH;
// Midi Notes
let startingMidi = 48;
let whiteInc = [0, 2, 4, 5, 7, 9, 11,
12, 14, 16, 17, 19, 21, 23,
24, 26, 28, 29, 31, 33, 35,
36, 38, 40, 41, 43, 45, 47];
let blackInc = [1, 3, 0, 6, 8, 10, 0,
13, 15, 0, 18, 20, 22, 0,
25, 27, 0, 30, 32, 34, 0,
37, 39, 0, 42, 44, 46, 0];
// GUI
let waveTypes, type;
let volume, v;
function gui() {
waveTypes = createSelect();
waveTypes.position(0, height + 10);
waveTypes.size(100);
waveTypes.option('Sine');
waveTypes.option('Square');
waveTypes.option('Triangle');
waveTypes.option('Sawtooth');
waveTypes.selected('Sine');
volume = createSlider(0, 1, 0.5, 0.1);
volume.position(0, height + 30);
volume.size(100);
}
function setup() {
createCanvas(600, 400);
colorMode(HSB);
gui();
whiteW = width/num;
whiteH = 100;
whiteX0 = 0;
blackW = whiteW / 2;
blackH = whiteH / 2;
blackX0 = whiteX0 + whiteW - (blackW/2);
for (let i=0; i<num; i++) {
whiteKeys[i] = new Key(whiteX0 + i*whiteW, y, whiteW, whiteH, color(255), startingMidi + whiteInc[i % num]);
blackKeys[i] = new Key(blackX0 + i*whiteW, y, blackW, blackH, color(0), startingMidi + blackInc[i % num]);
}
}
function draw() {
background(239, 80, 53);
type = waveTypes.selected().toLowerCase();
v = volume.value();
let activeKeys = 0;
for (let i=0; i<num; i++) {
if (mouseIsPressed &&
mouseX >= blackKeys[i].x && mouseX <= blackKeys[i].x + blackKeys[i].w &&
mouseY >= blackKeys[i].y && mouseY <= blackKeys[i].y + blackKeys[i].h) {
blackKeys[i].playSound(type, v);
activeKeys += 1;
} else {
blackKeys[i].stopSound();
if (mouseIsPressed &&
mouseX >= whiteKeys[i].x && mouseX <= whiteKeys[i].x + whiteKeys[i].w &&
mouseY >= whiteKeys[i].y && mouseY <= whiteKeys[i].y + whiteKeys[i].h && activeKeys == 0) {
whiteKeys[i].playSound(type, v);
} else {
whiteKeys[i].stopSound();
}
}
}
for (let i=0; i<num; i++) {
whiteKeys[i].updateParticles();
whiteKeys[i].display();
}
for (let i=0; i<num; i++) {
if ((i%7) != 2 && (i%7) != 6) {
blackKeys[i].updateParticles();
blackKeys[i].display();
}
}
}