11var attackTime = 0.001
22var attackLevel = 1.0 ;
33var decayTime = 0.2 ;
4- var decayLevel = 0.2 ;
4+ var sustainTime = 0.5 ;
5+ var sustainRatio = 0.2 ;
56var releaseTime = 0.5 ;
67var releaseLevel = 0.0 ;
7- var sustainTime = 0.5 ;
88
99var attackTimeInput , attackLevelInput ;
10- var decayTimeInput , decayLevelInput ;
10+ var decayTimeInput ;
11+ var sustainTimeInput , sustainRatioInput ;
1112var releaseTimeInput , releaseLevelInput ;
12- var sustainTimeInput ;
1313
1414var maxTime = 1 ;
1515var maxLevel = 5 ;
16- var xScale = 100 ;
1716
1817var env , osc ;
1918
@@ -30,21 +29,21 @@ function setup() {
3029 attackTimeInput = createLabeledSlider ( 'Attack time' , 0 , maxTime , attackTime , 20 , 15 ) ;
3130 attackLevelInput = createLabeledSlider ( 'Attack level' , 0 , maxLevel , attackLevel , 20 , 40 ) ;
3231 decayTimeInput = createLabeledSlider ( 'Decay time' , 0 , maxTime , decayTime , 20 , 65 ) ;
33- decayLevelInput = createLabeledSlider ( 'Decay level ' , 0 , maxLevel , decayLevel , 20 , 90 ) ;
34- sustainTimeInput = createLabeledSlider ( 'Sustain time ' , 0 , maxTime , sustainTime , 20 , 115 ) ;
32+ sustainTimeInput = createLabeledSlider ( 'Sustain time ' , 0 , maxTime , sustainTime , 20 , 90 ) ;
33+ sustainRatioInput = createLabeledSlider ( 'Sustain ratio ' , 0 , 1 , sustainRatio , 20 , 115 ) ;
3534 releaseTimeInput = createLabeledSlider ( 'Release time' , 0 , maxTime , releaseTime , 20 , 140 ) ;
3635 releaseLevelInput = createLabeledSlider ( 'Release level' , 0 , maxLevel , 0 , 20 , 165 ) ;
3736}
3837
3938function draw ( ) {
40- background ( 30 , 100 , 155 ) ;
39+ background ( 255 ) ;
4140
4241 // Update latest values
4342 attackTime = float ( attackTimeInput . value ( ) ) ;
4443 attackLevel = float ( attackLevelInput . value ( ) ) ;
4544 decayTime = float ( decayTimeInput . value ( ) ) ;
46- decayLevel = float ( decayLevelInput . value ( ) ) ;
4745 sustainTime = float ( sustainTimeInput . value ( ) ) ;
46+ sustainRatio = float ( sustainRatioInput . value ( ) ) ;
4847 releaseTime = float ( releaseTimeInput . value ( ) ) ;
4948 releaseLevel = float ( releaseLevelInput . value ( ) ) ;
5049
@@ -56,7 +55,7 @@ function draw() {
5655}
5756
5857function playEnv ( ) {
59- env . set ( attackTime , attackLevel , decayTime , decayLevel , releaseTime , releaseLevel ) ;
58+ env . set ( attackTime , attackLevel , decayTime , sustainRatio , releaseTime , releaseLevel ) ;
6059 env . play ( osc , 0 , sustainTime ) ;
6160}
6261
@@ -65,33 +64,42 @@ function drawADSR() {
6564 var xScale = ( width - textPadding ) / maxTime / 4 ;
6665 var yScale = ( height - textPadding ) / maxLevel ;
6766 var x , y ;
67+ var shape_color = color ( 30 , 200 , 205 ) ;
6868
69- fill ( 130 , 200 , 255 ) ;
69+ fill ( shape_color ) ;
7070 noStroke ( ) ;
7171 textAlign ( LEFT , BOTTOM ) ;
7272
7373 beginShape ( ) ;
7474 // Start
7575 vertex ( 0 , height ) ;
7676 // Attack
77- x = attackTime * xScale ;
78- y = height - attackLevel * yScale ;
77+ x = attackTime * xScale ;
78+ y = height - attackLevel * yScale ;
7979 vertex ( x , y ) ;
80+ fill ( 0 ) ;
8081 text ( "Attack" , x , y ) ;
82+ fill ( shape_color ) ;
8183 // Decay
8284 x = x + decayTime * xScale ;
83- y = height - decayLevel * yScale ;
85+ y = height - ( releaseLevel + sustainRatio * ( attackLevel - releaseLevel ) ) * yScale ;
8486 vertex ( x , y ) ;
87+ fill ( 0 ) ;
8588 text ( "Decay" , x , y ) ;
89+ fill ( shape_color ) ;
8690 // Sustain
87- x = x + sustainTime * xScale ;
91+ x = x + sustainTime * xScale ;
8892 y = y ;
8993 vertex ( x , y ) ;
94+ fill ( 0 ) ;
9095 text ( "Sustain" , x , y ) ;
96+ fill ( shape_color ) ;
9197 // Release
92- x = x + releaseTime * xScale ;
93- y = height - releaseLevel * yScale ;
94- text ( "Sustain" , x , y ) ;
98+ x = x + releaseTime * xScale ;
99+ y = height - releaseLevel * yScale ;
100+ fill ( 0 ) ;
101+ text ( "Release" , x , y ) ;
102+ fill ( shape_color ) ;
95103 vertex ( x , y ) ;
96104 // End
97105 vertex ( width , y ) ;
0 commit comments