Thoughts on Software Generated Envelopes
J.D. McEachin
jdm at synthcom.com
Thu Jul 18 18:36:50 CEST 1996
DIYers:
I'm pretty obsessed w/ envelopes. I started out on a DX7, which has something
like 7 envelopes per voice (6 for oscillator levels and 1 for pitch). I
quickly learned that envelopes are the key to complex, evolving sounds. When I
started playing around w/ analogue synths, I couldn't believe they only had 1
or 2 envelopes! Ever since I've wanted an analogue synth w/ 6-10 envelopes.
I've got a few ideas cooking for future Synthcom products, and most of them
will require lots of envelopes. Given the cost to implement many accurate
multi-stage looping envelopes in hardware, I have been giving some thought to
building a better software generated envelope (SGE).
As Juergen has pointed out in the past, the primary problem w/ SGE's is the
main loop time of the processor. Given the constraints of processing MIDI
data w/ an inexpensive embedded CPU, your typical loop time is usually around
1 msec. If your CPU is feeding a DAC w/ 8bit values to generate the envelope
once per loop, this doesn't give you alot of resolution with a fast attack.
You could use a timer interrupt to tell the CPU to feed the DAC the next SGE
value, but this usually has some overhead associated w/ it that will slow the
CPU down considerably.
My approach to situations like this where you're using too much CPU time
has always been - hardware assist! My solution is as follows: stick a
small SRAM between the CPU and the SGE DAC. The CPU can move a lot of SGE
data into the SRAM at once, and then go away. The DAC would read data out
of the SRAM using a counter. Multiplexing everything to provide multiple
envelopes would be easy. The CPU could generate values for linear, log,
or inverse-log envelope shapes.
For added fun you could add a state machine to do looping to provide
LFOs. If you're like Gene and Juergen (totally anti-CPU ;-), you could
build it to read everything out of an EPROM, w/ different rates for each
envelope/LFO.
What I would like to know is, what resolution is necessary to satisfy the ear?
There are two resolutions to contend w/ - time and amplitude. I'm wondering,
can someone hear the difference between a 0.1 msec attack and a .3 msec attack?
Can someone hear the difference between a 1.0 msec linear attack and a 1.0 msec
log attack? Has anyone read any scientific studies on this?
I suppose I'm going to have to do some experimenting w/ this...
Comments, anyone?
JDM
Synthcom Systems, Inc.
http://www.synthcom.com/
More information about the Synth-diy
mailing list