Here's a Sound to generate a sequence of non-overlapping random duration AR envelopes.
The idea in the example Sound is to use a TransformEventValues to replace the AR !Gate with a random gate sequence, to make the AR's attack and decay a function of !RanDur and !DutyCycle, and then to use that same TransformEventValues to set the value of !RanDur:
| randomDuration ranGate |
randomDuration := (!minDur s tick nextRandom abs * (!maxDur - !MinDur) s + !MinDur s) seededWith: 0.777.
ranGate := 1 gateTimeToNext: randomDuration dutyCycle: !DutyCycle.
(Array with: ranGate
with: (ranGate sampleAndHold: randomDuration))}