|
| 1 | +var osc, envelope, fft; |
| 2 | +var myPhraseAttack, myPhraseRelease, myPart; |
| 3 | +var atPattern = [1, 0,0,0]; |
| 4 | +var relPattern = [0, 0,1,0]; |
| 5 | +var scaleArray = [60, 62, 64, 65, 67, 69, 71, 72]; |
| 6 | +var note = 0; |
| 7 | +var startPoint = 0; |
| 8 | +var endPoint = 0; |
| 9 | +var numWaveforms = 50; |
| 10 | + |
| 11 | +function setup() { |
| 12 | + createCanvas(710, 200); |
| 13 | + osc = new p5.SinOsc(); |
| 14 | + envelope = new p5.Env(0.1, 1.0, 0.1, .5, .1, .5, .1, 0.0); // |
| 15 | + envelope.setExp(true); |
| 16 | + //envelope.setADSR(0.1, 1.0, 1.0, 0.2, 5.0, 0.0); //AT, AL, DT, SL, RT, RL |
| 17 | + osc.amp(0.); |
| 18 | + osc.start(); |
| 19 | + myPhraseAttack = new p5.Phrase('testerAttack', makeSoundAttack, atPattern); |
| 20 | + myPhraseRelease = new p5.Phrase('testerRelease', makeSoundRelease, relPattern); |
| 21 | + myPart = new p5.Part(); |
| 22 | + myPart.addPhrase(myPhraseAttack); |
| 23 | + myPart.addPhrase(myPhraseRelease); // comment this back in to check release |
| 24 | + myPart.setBPM(100); |
| 25 | + myPart.loop(); |
| 26 | + myPart.start(); |
| 27 | + fft = new p5.FFT(); |
| 28 | + endPoint = width / numWaveforms; |
| 29 | + noFill(); |
| 30 | + background(20); |
| 31 | +} |
| 32 | + |
| 33 | +function draw() { |
| 34 | + |
| 35 | + |
| 36 | + var waveform = fft.waveform(); // analyze the waveform |
| 37 | + beginShape(); |
| 38 | + stroke(255, 255, 0); |
| 39 | + for (var i = 0; i < waveform.length; i++){ |
| 40 | + var x = map(i, 0, waveform.length, startPoint, endPoint); |
| 41 | + var y = map(waveform[i], -1, 1, height, 0); |
| 42 | + vertex(x, y); |
| 43 | + } |
| 44 | + endShape(); |
| 45 | + startPoint = endPoint + 1; |
| 46 | + endPoint += (width / numWaveforms); |
| 47 | + if (endPoint > width) |
| 48 | + { |
| 49 | + background(20); |
| 50 | + startPoint = 0; |
| 51 | + endPoint = (width / numWaveforms); |
| 52 | + } |
| 53 | +} |
| 54 | + |
| 55 | + |
| 56 | +function makeSoundAttack(time, playbackRate) |
| 57 | +{ |
| 58 | + var midiValue = scaleArray[note]; |
| 59 | + var freqValue = midiToFreq(midiValue); |
| 60 | + osc.freq(freqValue * 2, .01, time); // comment this back in to check pitch changes |
| 61 | + envelope.play(osc, time); |
| 62 | + //envelope.triggerAttack(osc, time); |
| 63 | + note = (note + 1) % scaleArray.length; |
| 64 | + setTimeout(redrawWaveform, time * 1000.0); |
| 65 | + |
| 66 | +} |
| 67 | + |
| 68 | +function makeSoundRelease(time, playbackRate) |
| 69 | +{ |
| 70 | + //envelope.triggerRelease(osc, time); // comment this back in to check release |
| 71 | +} |
| 72 | + |
| 73 | +function redrawWaveform() |
| 74 | +{ |
| 75 | + background(20); |
| 76 | + startPoint = 0; |
| 77 | + endPoint = (width / numWaveforms); |
| 78 | +} |
0 commit comments