@@ -3,7 +3,7 @@ var attackLevel = 1.0;
33var decayTime = 0.2 ;
44var decayLevel = 0.2 ;
55var releaseTime = 0.5 ;
6- var releaseLevel = 0 ;
6+ var releaseLevel = 0.0 ;
77var sustainTime = 0.5 ;
88
99var attackTimeInput , attackLevelInput ;
@@ -27,36 +27,32 @@ function setup() {
2727 osc . start ( ) ;
2828 osc . freq ( 440 ) ;
2929
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 ) ;
30+ attackTimeInput = createLabeledSlider ( 'Attack time' , 0 , maxTime , attackTime , 20 , 15 ) ;
31+ attackLevelInput = createLabeledSlider ( 'Attack level' , 0 , maxLevel , attackLevel , 20 , 40 ) ;
32+ 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 ) ;
35+ releaseTimeInput = createLabeledSlider ( 'Release time' , 0 , maxTime , releaseTime , 20 , 140 ) ;
36+ releaseLevelInput = createLabeledSlider ( 'Release level' , 0 , maxLevel , 0 , 20 , 165 ) ;
4437}
4538
4639function draw ( ) {
4740 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 ( ) ;
41+
42+ // Update latest values
43+ attackTime = float ( attackTimeInput . value ( ) ) ;
44+ attackLevel = float ( attackLevelInput . value ( ) ) ;
45+ decayTime = float ( decayTimeInput . value ( ) ) ;
46+ decayLevel = float ( decayLevelInput . value ( ) ) ;
47+ sustainTime = float ( sustainTimeInput . value ( ) ) ;
48+ releaseTime = float ( releaseTimeInput . value ( ) ) ;
49+ releaseLevel = float ( releaseLevelInput . value ( ) ) ;
50+
5551 drawADSR ( ) ;
5652
5753 // Text
5854 textAlign ( CENTER ) ;
59- text ( 'click to play' , width / 2 , height / 2 ) ;
55+ text ( 'Click anywhere to play' , width / 2 , height / 2 ) ;
6056}
6157
6258function playEnv ( ) {
@@ -68,6 +64,7 @@ function drawADSR() {
6864 var textPadding = 50 ;
6965 var xScale = ( width - textPadding ) / maxTime / 4 ;
7066 var yScale = ( height - textPadding ) / maxLevel ;
67+ var x , y ;
7168
7269 fill ( 130 , 200 , 255 ) ;
7370 noStroke ( ) ;
@@ -80,24 +77,51 @@ function drawADSR() {
8077 x = attackTime * xScale ;
8178 y = height - attackLevel * yScale ;
8279 vertex ( x , y ) ;
83- text ( ` Attack: \n ${ attackTime . toFixed ( 3 ) } s \n ${ attackLevel . toFixed ( 3 ) } ` , x , y ) ;
80+ text ( " Attack" , x , y ) ;
8481 // Decay
8582 x = x + decayTime * xScale ;
8683 y = height - decayLevel * yScale ;
8784 vertex ( x , y ) ;
88- text ( ` Decay: \n ${ decayTime . toFixed ( 3 ) } s \n ${ decayLevel . toFixed ( 3 ) } ` , x , y ) ;
85+ text ( " Decay" , x , y ) ;
8986 // Sustain
9087 x = x + sustainTime * xScale ;
9188 y = y ;
9289 vertex ( x , y ) ;
93- text ( ` Sustain: \n ${ sustainTime . toFixed ( 3 ) } s` , x , y ) ;
90+ text ( " Sustain" , x , y ) ;
9491 // Release
9592 x = x + releaseTime * xScale ;
9693 y = height - releaseLevel * yScale ;
97- text ( `Release: \n ${ releaseTime . toFixed ( 3 ) } s \n ${ releaseLevel . toFixed ( 3 ) } ` , x , y ) ;
94+ text ( "Sustain" , x , y ) ;
9895 vertex ( x , y ) ;
9996 // End
10097 vertex ( width , y ) ;
10198 vertex ( width , height ) ;
10299 endShape ( ) ;
100+ }
101+
102+ function createLabeledSlider ( labelText , minVal , maxVal , initVal , xpos , ypos ) {
103+ var slider = createSlider ( minVal , maxVal , initVal , 0 ) ; // '0' to use continuous
104+ var label = createElement ( "label" , labelText ) ;
105+ var numInput = createInput ( str ( initVal ) , 'number' ) ;
106+
107+ slider . size ( width / 2 ) ;
108+ slider . position ( xpos , ypos ) ;
109+ slider . input ( ( ) => {
110+ numInput . value ( slider . value ( ) ) ;
111+ } ) ;
112+
113+ numInput . size ( width / 8 ) ;
114+ numInput . position ( xpos + slider . size ( ) . width + 10 , ypos ) ;
115+ numInput . input ( ( ) => {
116+ if ( numInput . value ( ) > maxVal ) {
117+ slider . value ( maxVal ) ;
118+ } else if ( numInput . value ( ) < minVal ) {
119+ slider . value ( minVal ) ;
120+ } else {
121+ slider . value ( numInput . value ( ) ) ;
122+ }
123+ } ) ;
124+
125+ label . position ( numInput . position ( ) . x + numInput . size ( ) . width + 10 , ypos + 3 ) ;
126+ return numInput ;
103127}
0 commit comments