// one of the reference // https://p5js.org/reference/#/p5.Envelope/triggerAttack // This adds slider to control sound and experiments with // envelope. let attackLevel = 1.0; let releaseLevel = 0; let attackTime = 0.001; let decayTime = 0.3; let releaseTime = 0.5; let osc, envelope; let display = " "; let vol; function setup() { var canvas = createCanvas(200, 200); canvas.parent("sketch-holder"); // set up volume slider para = createP("Volume"); para.parent("sketch-holder"); volSlider = createSlider(0, 100, 40); volSlider.parent("sketch-holder"); vol = volSlider.value()/100; // Instantiate the envelope envelope = new p5.Env(); envelope.setADSR(attackTime, decayTime, vol, releaseTime); envelope.setRange(attackLevel, releaseLevel); // set up oscillator osc = new p5.Oscillator('Triangle'); osc.start(); osc.amp(envelope); // declare variables midi = 0; } // setup function draw() { background(200 - midi, midi, 3 * midi); vol = volSlider.value()/100; if (midi > 0) { text("Note: " +display + "\nMidi value: " + midi + "\nFrequency: " + (round(1000* midiToFreq(midi))/1000) + "Hz", 30, height/2 - 25 ); } else { text("Type a note key:\nc, C, d, D, e, f, F, g, G, a, A, b" + "\nor `, 1, 2, ...9, 0, -, =", 20, height/2 - 25); } text("Vol: " + vol, 20, 160); } // draw // when a key is typed, interpret key, determine midi, and change frequency function keyTyped() { midi = interpretCh(key); // midi value associated with key pressed osc.freq(midiToFreq(midi)); envelope.setADSR(attackTime, decayTime, vol, releaseTime); envelope.triggerAttack(); } // when a key is released, turn of the key and clear the display function keyReleased() { midi = 0; envelope.triggerRelease(); interpretCh(""); //// return false; } function interpretCh(aCh) { // display is global let midi; switch(aCh) { case 'c': case '`': display = "Middle C"; midi = 60; break; case 'C': case '1': display = "C#"; midi = 61; break; case 'd': case '2': display = "D"; midi = 62; break; case 'D': case '3': display = "D#"; midi = 63; break; case 'e': case '4': display = "E"; midi = 64; break; case 'f': case '5': display = "F"; midi = 65; break; case 'F': case '6': display = "F#"; midi = 66; break; case 'g': case '7': display = "G"; midi = 67; break; case 'G': case '8': display = "G#"; midi = 68; break; case 'a': case '9': display = "A"; midi = 69; break; case 'A': case '0': display = "A#"; midi = 70; break; case 'b': case '-': display = "B"; midi = 71; break; case '=': display = "C above middle C"; midi = 72; break; default: display = "rest"; midi = 0; } return midi; } // interpretCh