[Fpga-synth] Envelope - linear attack & expo decay/release?
Scott Nordlund
gsn10 at hotmail.com
Thu Apr 2 21:31:59 CEST 2009
I know I was always dissatisfied with the envelope curves on the DX7. I'm not sure but I would assume a linear envelope was run through a exponential look-up table to generate an acceptable curve. It sounded fine for decays, but long attacks (rising envelope segments in general) seemed to delay for a while and then suddenly go up to full amplitude, forcing me to use multiple envelope segments to get an acceptable attack.
If you look at analog envelope circuits, those with an exponential attack still use an exponential RC decay (I mean the curve here, not the envelope stage, with the rate of change slowing as it approaches the destination value), it's just that it goes up to a higher voltage rather than down to 0. I believe some also implement a linear attack with an integrator (I've never compared them to see which I prefer). The DX7 method presumably results in exponential growth.
So you may want to experiment with linear attack/exponential decay, or inverted exponential attack/exponential decay (which is what you should get if you're implementing a difference equation for all stages). If you do it this way, you'll probably want the transition to the decay stage to begin when the attack is within maybe 10% of its destination value, so that it doesn't become infinitely slow as it approaches the threshold value.
It's worth considering also (though it adds further confusion) that an analog VCA may have an exponential response...
----------------------------------------
> Date: Thu, 2 Apr 2009 08:20:30 -0700
> From: ebrombaugh1 at cox.net
> To: fpga-synth at rubidium.dyndns.org
> Subject: [Fpga-synth] Envelope - linear attack & expo decay/release?
>
> Here's a philosophical question:
>
> Last weekend I built an ADSR for my ARM/FPGA synth and it seems to work
> fine. The thing that's bugging me is that I used linear calculations for
> the gain, so when doing a long release that last little tail seems to
> cut off rather abruptly.
>
> The obvious solution is to use exponential decay for the release. I know
> how I'd implement that in hardware (scale the difference between where
> you are and where you're going by some constant related to the rate &
> add to current state). Question is, is the exponential curve also
> appropriate for the attack & decay phases?
>
> The ultimate envelope would seem to be one with the option for
> log/lin/expo curve on each segment, along with variable rate & target.
> You'd need three parameters to define every segment. Probably too
> complex, but certainly flexible.
>
> Thoughts? What have you tried in the past?
>
> Eric
> _______________________________________________
> Fpga-synth mailing list
> Fpga-synth at rubidium.dyndns.org
> http://rubidium.dyndns.org/cgi-bin/mailman/listinfo/fpga-synth
_________________________________________________________________
Rediscover Hotmail®: Get e-mail storage that grows with you.
http://windowslive.com/RediscoverHotmail?ocid=TXT_TAGLM_WL_HM_Rediscover_Storage1_042009
More information about the Fpga-synth
mailing list