I'm building my first electronic instrument. With a piano keyboard (made of plywood), 61 keys, 12 tone polyphony (even number bigger than the number of fingers).
The controlling electronic is done, now will be time for the user interface. The device will allow for some parametrisation. It will be possible to define the tuning frequency. It will be possible to define the waveform (256 8-bit samples) It will be possible to define the envelope ADSR parameters.

In the user interface I have to make a possibility to define the ADSR parameters.
I have now a question because I don't have such experience with sound synthesis.

How are the ADR (S is simple) parameters well represented in user interfaces? and in what units?
Do we describe them in units of speed (minimal value is slow rise/fall, maximal value is fast rise/fall) or in units of time (minimal value is fast rise/fall, maximal value is slow rise/fall)?
What actual units are used to measure/define the parameters? just (milli-)seconds? Or some special units? Or relative (to what?)?
What are good limits, good choices for minimal and maximal values? What scales are used for the selection? linear? logarithmic? exponential? something else?

Internally, the device is keeping the parameters as 32-bit numbers which represent a value added to / subtracted from an accumulator in each iteration which is exactly what the generator needs but not convenient for a user.
And the 32-bit value combined with a 44.44...kHz sampling frequency allows for rise times ranging from instant to as long as 26 hours which is much more than needed.

I have noticed that on some devices/softwares the selecting rotary dials are not labelled with actual values which is not helpful.

I'm asking for some information in this topic because I would like to make a parameter selection which works well and feels good. Of course I can later adjust based on actual usage of the device but it's nice to have a starting point.

I'm planning to reuse a UI board from a washing machine, with a 512x38 pixel screen, 8 buttons, and a rotary selector. I'd imagine using buttons to select which parameter I'm altering, to save/load presets, and using the rotary selector to adjust the actual value of the parameter. On the (long) screen I'd provide a preview of the envelope shape.

  • 2
    As an anecdote, the Commodore 64 SID sound chip from 1982 uses 4 bits for specifying ADSR envelope times, allowing for only 16 different values. One might think that's unusable, but look at how the developer Bob Yannes used the four bits: c64-wiki.com/wiki/ADSR In short, there is one table (or value mapping) for Attack, and another for D and R times (S being sustain level, not time), each with a different set of values, allocating values for musically meaningful ranges of each. Aug 12 at 19:36
  • 1
    This doesn’t just vary by synth maker it varies by circuit design and is a factor in different synths having different characters. I suggest that something actually more important that the ranges of values for envelope parameters is the envelope curves themselves. Despite the little diagrams, attack, decay, and release behavior in real analog synths are not straight lines. Some digital models let you select different curves. Also if you can modulate your modulators you can envelope your envelopes to create different curves. Lots of options in how you build this Aug 12 at 20:53

I think there is no definite answer to this but as a fellow DIY synth maker here are a few insights.

First for the parameters. If you have a limit of available knobs, the most useful things to have first are:

  • the attack time: the time to reach the value set by velocity
  • the decay time: the time to reach the sustain level
  • the sustain level
  • the release time: time to reach zero from the sustain level.

For the typical values, it really depends on the type of synth usage: lead synth will have a tendency to have very short attack release whereas chords synth can use up to seconds. One way to palliate this is to have logarithm knobs/scales which will allow you to have good precision on short times, but will allow very long times also. How much long is needed is a bit hard to answer but attack times longer than 20s are very hardly used.

In my opinion, finely labelling the values is not very important as a synth programmation is mainly done by "the feeling" and not in a Cartesian way. But if you do, milliseconds would be a good choice: the more the longer while keeping an idea of what it will give.

Hope that helps!


It will be possible to define the tuning frequency

Make sure it's 440 Hz unless the user really wants something different. Detuning different oscillators against each other can make sense, but this should not require specifying an absolute frequency for each of them separately.

It will be possible to define the waveform (256 8-bit samples)

Sample-wise waveform is frankly a pretty useless thing to control. Most waveforms you would generate this way sound pretty nasty-crippled-sawtooth-ish. Different-sounding ones can be achieved, but it requires a lot of fiddly tweaking.

There's a reason that waveform is more commonly selected from either predefined library ones, or parametrised analogue-like ones (typically sine / triangle / sawtooth / PWM-square) – that gives you much quicker access to almost the same possibilities, and any finer tweaking is then done with filters and/or FM or ring modulation.

How are the ADR (S is simple) parameters well represented in user interfaces? and in what units? Do we describe them in units of speed ... or in units of time

I've seen both ways. I personally prefer them in units of time. Definitely use logarithmic pots for this, else you're either getting uselessly fine control for long attack times, but can't properly dial in short ones, or else preclude slow times entirely.

For attack, the longest sensible time is something like 1 second and you'll want good resolution down to about 5 ms, perhaps even shorter. For decay, you may want to permit significantly longer times.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.