ADSR specification 
Hey there!
I just started playing with WASM-4 yesterday and I'm really enjoying it! Thank you all who are involved. 

I am building a step sequencer and I realised that the ADSR parameters of the tone function are not what you would call "Standard". 

Maybe it's some vintage specification, I don't know but usually you would have a them specified as 
Attack - time to reach the set volume level
Decay -  time to reach the sustain volume level
Sustain -  a secondary volume level that is sustained through the duration of the note. 
Release - time after the release of the note until the volume has reached 0.
This of course relies on the note having a duration. 

The current specification leads to all sorts of weird states like having volume when the volume is all the way down or really big jumps in volume just because you introduced some attack.
Also there is no way to add attack and decay but still be able to mix your tone at a lower level than maximum.

It would be really great if the `tone` function had a duration parameter so the specification could change. 

something like
`tone(freq1, envelope, duration | (volume << 16), flags)`

or even better 

`tone(freq, ampAttack | (ampDecay << 16), ampSustain | (ampRelease << 16), freqAttack | (freqDecay << 16), freqSustain | (freqRelease << 16), duration | (volume << 16), flags)` 

The envelope parameters are split so the sustain part of the frequency envelope will now have 16bits, enough to describe the sustained frequency. 
The amp sustain could be a full independent volume level or something relative to the volume parameter.

I think this allows more musical variety and is much more resembling of how synthesisers work. 

Thanks again.

