Skip to content

Commit 9fcb678

Browse files
committed
fixed envelopes. now normal envelope works as expected, plus there is an ADSR setting option, and an AD ramp for more simple operation.
1 parent b773607 commit 9fcb678

File tree

7 files changed

+408
-6
lines changed

7 files changed

+408
-6
lines changed

examples/envelopeRamp/index.html

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>envelope_ramp</title>
6+
<script src="libraries/p5.js" type="text/javascript"></script>
7+
8+
<script src="libraries/p5.dom.js" type="text/javascript"></script>
9+
<script src="libraries/p5.sound.js" type="text/javascript"></script>
10+
11+
<script src="sketch.js" type="text/javascript"></script>
12+
13+
<style> body {padding: 0; margin: 0;} canvas {vertical-align: top;} </style>
14+
</head>
15+
<body>
16+
</body>
17+
</html>

examples/envelopeRamp/sketch.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
var osc, envelope, fft;
2+
var myPhraseAttack, myPhraseRelease, myPart;
3+
var atPattern = [1, 0,0,0];
4+
var scaleArray = [60, 62, 64, 65, 67, 69, 71, 72];
5+
var note = 0;
6+
var startPoint = 0;
7+
var endPoint = 0;
8+
var numWaveforms = 50;
9+
10+
function setup() {
11+
createCanvas(710, 200);
12+
osc = new p5.SinOsc();
13+
envelope = new p5.Env();
14+
envelope.setRampAD(.005,0.5);
15+
osc.amp(0.);
16+
osc.start();
17+
myPhraseAttack = new p5.Phrase('testerAttack', makeSoundAttack, atPattern);
18+
myPart = new p5.Part();
19+
myPart.addPhrase(myPhraseAttack);
20+
myPart.setBPM(100);
21+
myPart.loop();
22+
myPart.start();
23+
fft = new p5.FFT();
24+
endPoint = width / numWaveforms;
25+
noFill();
26+
background(20);
27+
}
28+
29+
function draw() {
30+
31+
32+
var waveform = fft.waveform(); // analyze the waveform
33+
beginShape();
34+
stroke(255, 255, 0);
35+
for (var i = 0; i < waveform.length; i++){
36+
var x = map(i, 0, waveform.length, startPoint, endPoint);
37+
var y = map(waveform[i], -1, 1, height, 0);
38+
vertex(x, y);
39+
}
40+
endShape();
41+
startPoint = endPoint + 1;
42+
endPoint += (width / numWaveforms);
43+
if (endPoint > width)
44+
{
45+
background(20);
46+
startPoint = 0;
47+
endPoint = (width / numWaveforms);
48+
}
49+
}
50+
51+
52+
function makeSoundAttack(time, playbackRate)
53+
{
54+
var midiValue = scaleArray[note];
55+
var freqValue = midiToFreq(midiValue);
56+
osc.freq(freqValue * 2, .001, time);
57+
envelope.rampAD(osc, time, 1 , 0);
58+
note = (note + 1) % scaleArray.length;
59+
setTimeout(redrawWaveform, time * 1000.0);
60+
}
61+
62+
63+
function redrawWaveform()
64+
{
65+
background(20);
66+
startPoint = 0;
67+
endPoint = (width / numWaveforms);
68+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>envelope_exponential_play</title>
6+
<script src="libraries/p5.js" type="text/javascript"></script>
7+
8+
<script src="libraries/p5.dom.js" type="text/javascript"></script>
9+
<script src="libraries/p5.sound.js" type="text/javascript"></script>
10+
11+
<script src="sketch.js" type="text/javascript"></script>
12+
13+
<style> body {padding: 0; margin: 0;} canvas {vertical-align: top;} </style>
14+
</head>
15+
<body>
16+
</body>
17+
</html>
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>envelope_exponential_trig_rel</title>
6+
<script src="libraries/p5.js" type="text/javascript"></script>
7+
8+
<script src="libraries/p5.dom.js" type="text/javascript"></script>
9+
<script src="libraries/p5.sound.js" type="text/javascript"></script>
10+
11+
<script src="sketch.js" type="text/javascript"></script>
12+
13+
<style> body {padding: 0; margin: 0;} canvas {vertical-align: top;} </style>
14+
</head>
15+
<body>
16+
</body>
17+
</html>
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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();
15+
envelope.setExp(true);
16+
envelope.setADSR(0.1, 1.0, .1, 0.2, .01, 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.triggerAttack(osc, time);
62+
note = (note + 1) % scaleArray.length;
63+
setTimeout(redrawWaveform, time * 1000.0);
64+
65+
}
66+
67+
function makeSoundRelease(time, playbackRate)
68+
{
69+
envelope.triggerRelease(osc, time); // comment this back in to check release
70+
}
71+
72+
function redrawWaveform()
73+
{
74+
background(20);
75+
startPoint = 0;
76+
endPoint = (width / numWaveforms);
77+
}

0 commit comments

Comments
 (0)