Skip to content

Commit 87d0342

Browse files
committed
Add labels and number-input for clarity
1 parent 5f4d191 commit 87d0342

File tree

1 file changed

+51
-27
lines changed

1 file changed

+51
-27
lines changed

examples/envelope_designer/sketch.js

Lines changed: 51 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ var attackLevel = 1.0;
33
var decayTime = 0.2;
44
var decayLevel = 0.2;
55
var releaseTime = 0.5;
6-
var releaseLevel = 0;
6+
var releaseLevel = 0.0;
77
var sustainTime = 0.5;
88

99
var 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

4639
function 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

6258
function 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

Comments
 (0)