xxxxxxxxxx
100
//press number key 1-7 for note C4 to B4
//one note at a time
//press key "s" to add square wave
//press key "d" to deduct square wave
//press key "t" to add triangle wave
//press key "y" to deduct triangle wave
let sineOsc, squareOsc, triangleOsc;
let squareAmp = 0,
triangleAmp = 0;
let sound, recorder;
let pitches = []; // Array to store sounds
function setup() {
createCanvas(400, 200);
// Oscillator setup
sineOsc = new p5.Oscillator("sine");
sineOsc.amp(0.5);
sineOsc.start();
squareOsc = new p5.Oscillator("square");
squareOsc.amp(squareAmp);
squareOsc.start();
triangleOsc = new p5.Oscillator("triangle");
triangleOsc.amp(triangleAmp);
triangleOsc.start();
// Text display
textFont("Monospace");
textSize(14);
textAlign(LEFT, TOP);
}
function draw() {
background(200);
fill(50);
text(
`Sine wave: Frequency set by keys 1-7\nSquare wave: Amplitude: ${squareAmp.toFixed(
2
)}\nTriangle wave: Amplitude: ${triangleAmp.toFixed(2)}`,
10,
10
);
}
function keyPressed() {
let notes = {
1: 261.63,
2: 293.66,
3: 329.63,
4: 349.23,
5: 392.0,
6: 440.0,
7: 493.88,
}; // C4, D4, E4, F4, G4, A4, B4
if (notes[key]) {
let freq = notes[key];
updateFrequency(freq);
}
switch (key) {
case "s":
squareAmp = min(squareAmp + 0.1, 1);
squareOsc.amp(squareAmp);
break;
case "d":
squareAmp = max(squareAmp - 0.1, 0);
squareOsc.amp(squareAmp);
break;
case "t":
triangleAmp = min(triangleAmp + 0.1, 1);
triangleOsc.amp(triangleAmp);
break;
case "y":
triangleAmp = max(triangleAmp - 0.1, 0);
triangleOsc.amp(triangleAmp);
break;
}
}
function updateFrequency(freq) {
sineOsc.freq(freq);
squareOsc.freq(freq);
triangleOsc.freq(freq);
}
function mousePressed() {
if (sineOsc.started) {
sineOsc.stop();
squareOsc.stop();
triangleOsc.stop();
} else {
sineOsc.start();
squareOsc.start();
triangleOsc.start();
}
}