1+ var attackTime = 0.001
2+ var attackLevel = 1.0 ;
3+ var decayTime = 0.2 ;
4+ var decayLevel = 0.2 ;
5+ var releaseTime = 0.5 ;
6+ var releaseLevel = 0 ;
7+ var sustainTime = 0.5 ;
8+
9+ var attackTimeInput , attackLevelInput ;
10+ var decayTimeInput , decayLevelInput ;
11+ var releaseTimeInput , releaseLevelInput ;
12+ var sustainTimeInput ;
13+
14+ var maxTime = 1 ;
15+ var maxLevel = 5 ;
16+ var xScale = 100 ;
17+
18+ var env , osc ;
19+
20+ function setup ( ) {
21+ var cnv = createCanvas ( 500 , 500 ) ;
22+ cnv . mousePressed ( playEnv ) ;
23+
24+ env = new p5 . Env ( ) ;
25+ osc = new p5 . Oscillator ( 'triangle' ) ;
26+ osc . amp ( env ) ;
27+ osc . start ( ) ;
28+ osc . freq ( 440 ) ;
29+
30+ attackTimeInput = createSlider ( 0 , maxTime , attackTime , 0 ) ;
31+ attackTimeInput . position ( 20 , 15 ) ;
32+ attackLevelInput = createSlider ( 0 , maxLevel , attackLevel , 0 ) ;
33+ attackLevelInput . position ( 160 , 15 ) ;
34+ decayTimeInput = createSlider ( 0 , maxTime , decayTime , 0 ) ;
35+ decayTimeInput . position ( 20 , 45 ) ;
36+ decayLevelInput = createSlider ( 0 , maxLevel , decayLevel , 0 ) ;
37+ decayLevelInput . position ( 160 , 45 ) ;
38+ sustainTimeInput = createSlider ( 0 , maxTime , sustainTime , 0 ) ;
39+ sustainTimeInput . position ( 20 , 75 ) ;
40+ releaseTimeInput = createSlider ( 0 , maxTime , releaseTime , 0 ) ;
41+ releaseTimeInput . position ( 20 , 105 ) ;
42+ releaseLevelInput = createSlider ( 0 , maxLevel , releaseLevel , 0 ) ;
43+ releaseLevelInput . position ( 160 , 105 ) ;
44+ }
45+
46+ function draw ( ) {
47+ background ( 30 , 100 , 155 ) ;
48+ attackTime = attackTimeInput . value ( ) ;
49+ attackLevel = attackLevelInput . value ( ) ;
50+ decayTime = decayTimeInput . value ( ) ;
51+ decayLevel = decayLevelInput . value ( ) ;
52+ sustainTime = sustainTimeInput . value ( ) ;
53+ releaseTime = releaseTimeInput . value ( ) ;
54+ releaseLevel = releaseLevelInput . value ( ) ;
55+ drawADSR ( ) ;
56+
57+ // Text
58+ textAlign ( CENTER ) ;
59+ text ( 'click to play' , width / 2 , height / 2 ) ;
60+ }
61+
62+ function playEnv ( ) {
63+ env . set ( attackTime , attackLevel , decayTime , decayLevel , releaseTime , releaseLevel ) ;
64+ env . play ( osc , 0 , sustainTime ) ;
65+ }
66+
67+ function drawADSR ( ) {
68+ var textPadding = 50 ;
69+ var xScale = ( width - textPadding ) / maxTime / 4 ;
70+ var yScale = ( height - textPadding ) / maxLevel ;
71+
72+ fill ( 130 , 200 , 255 ) ;
73+ noStroke ( ) ;
74+ textAlign ( LEFT , BOTTOM ) ;
75+
76+ beginShape ( ) ;
77+ // Start
78+ vertex ( 0 , height ) ;
79+ // Attack
80+ x = attackTime * xScale ;
81+ y = height - attackLevel * yScale ;
82+ vertex ( x , y ) ;
83+ text ( `Attack: \n${ attackTime . toFixed ( 3 ) } s \n${ attackLevel . toFixed ( 3 ) } ` , x , y ) ;
84+ // Decay
85+ x = x + decayTime * xScale ;
86+ y = height - decayLevel * yScale ;
87+ vertex ( x , y ) ;
88+ text ( `Decay: \n${ decayTime . toFixed ( 3 ) } s \n${ decayLevel . toFixed ( 3 ) } ` , x , y ) ;
89+ // Sustain
90+ x = x + sustainTime * xScale ;
91+ y = y ;
92+ vertex ( x , y ) ;
93+ text ( `Sustain: \n${ sustainTime . toFixed ( 3 ) } s` , x , y ) ;
94+ // Release
95+ x = x + releaseTime * xScale ;
96+ y = height - releaseLevel * yScale ;
97+ text ( `Release: \n${ releaseTime . toFixed ( 3 ) } s \n${ releaseLevel . toFixed ( 3 ) } ` , x , y ) ;
98+ vertex ( x , y ) ;
99+ // End
100+ vertex ( width , y ) ;
101+ vertex ( width , height ) ;
102+ endShape ( ) ;
103+ }
0 commit comments