How to get envelopes with slow attack to not be so quiet?

Here’s my problem: I often want what I call an ‘edgeless’ sound - meaning that it has a slow attack and a slow decay.

This doesn’t interact with how sequencers work so well because of this scenario.

Sequencer trigger output starts an envelope, which modulates the level of a VCA.

Envelope output voltage increases proportional to the attack time of the envelope.

If the envelope reaches the peak voltage, it starts the sustain phase, and then decays based on the release time.

BUT If another trigger occurs during the Attack phase, the level goes to zero and the attack ramp starts again.

The net result is that you get your smooth attack but the overall level is low.

This is, of course, Just How Envelopes Work. But it drives me nuts because I can jack up the signal volume, but if I ever decrease the attack time to the point where it reaches full volume before the next trigger, the signal gets LOUD. In other words the volume of the signal is attack-time dependedent.

Attack Time Dependent Volume is difficult to compensate for. You can kinda-sorta use a compressor to keep it from getting too loud, but compressors introduce their own artifacts.

Honestly I think I’ve answered my own question here as “You can’t get there from here” but I’d be interested if other people have run into this issue, and if they have a solution that makes them happy.

Oh and here’s an oddball patch where I make a failed attempt to address this by using a trigger buffer to delay triggers until EOC. It does allow notes to achieve full volume, but it’s it’s own kind of interestingly wonky effect.

SlowEnvelopeExample.vcv (5.0 KB)

Doesn’t the behavior depend on the design of the envelope generator? - There are so many different ones to choose from, each with its own behavior. You mention sustain, so I presume you are using some form of ADSR.

Perhaps an AD would be better suited for your “edgeless” sound? One that always continues attack until the peak is reached, so subsequent triggers received during the attack will be ignored. But I think you want a trigger received during the decay to start a new attack from the current level, rather than resetting to 0 upon each attack. I used the Submarine EN-104 in my Subharmonicon emulator to get that exact behavior. I imagine there are other envelope generators that can do the same.

If you really want to implement ADSR, then perhaps lengthen the release enough such that it does not reach 0 before the next attack begins, so each trigger starts at a progressively higher point. Or better yet, increase the length of your clock gate, so that the envelope spends more time on the attack then it does on release. I use an LFO and increase the pulse width. That would allow symmetric attack and release times, yet still have the sound continue to increase until peak is reached (assuming there is a trigger on each clock pulse)

2 Likes

Thanks for the thoughtful reply. One way I’ve avoided the issue is to use a Befaco Rampage with Cycle turned on. That doesn’t really sync, but if you want a 2 second attack time, sync is probably not the biggest concern. :laughing:

compressor?

Edit: nvm saw you did mention them.

Shapemaster with the channel set not to retrigger?

3 Likes

Another way to do it with ShapeMaster would be to sequence the length of the envelope for each note using something like ADDR Seq. So all your envelopes could have the same shape with (relatively) slow attack, but the time taken for the envelope to ‘play’ from start to finish varies depending on how close your triggers are together (presuming this is a programmed rather than random sequence and you know when the triggers are coming). ShapeMaster envelopes also allow for sustain while gate is high.

1 Like

you can use the

and leave the ZERO flag to off

(ZERO means: if a retrig comes, the current value goes to ZERO) (BUSY means if the ENV is running, won’t accept any retrig)

4 Likes

In other words @synthi, you just solved my problem. :thumbsup:

I was trying to do something else like using the envelope to xor with it’s input trgger, so if the envelope’s non-zero it won’t trigger.

3 Likes

And hey, you can chain complex DASD?

I didn’t realise you simply wanted it to not retrigger if the envelope is running, which will result in skipped triggers, and therefore potentially some ‘odd’ sounding behaviour when your pitch CV changes part way through an envelope cycle which does not get retriggered and generate a new attack at the same time.

That’s why I talked about sequencing the length on ShapeMaster which would potentially solve your volume issues without skipping any triggers/notes.

yes of course with the
COMPLEX DAHD
too

I was/am dealing with the issue that if a new trigger happens during the attack phase, the net effect is that the signal amplitude goes down as the attack time goes up.

This video illustrates the issue. Here’s the patch: AttackVsVolume.vcv (7.8 KB)

You are not interpreting your results correctly. The new trigger does not occur during the attack - it is actually occurring after the release, and it goes to zero because your clock pulse width is 50%, and the release is faster than the attack, so of course it goes to 0 before each clock pulse.

It is actually impossible to retrigger during the attack phase with a single clock. There must be a low gate state before you can trigger a new cycle, and the instant the gate goes low, you enter the release phase, regardless whether the attack ever reached peak or not.

If you are going to use an ADSR with an attack that is longer than the clock gates, then I see two obvious options to eventually achieve full volume.

  • Increase the decay and release times to be longer than the attack time.
  • Or increase the clock pulse width so that the low gate state is short enough that the signal does not have enough time to reach 0.

Either of the above should cause each clock cycle to raise the voltage during the attack more than it falls during the release, such that eventually you reach peak voltage, and then the decay and sustain can kick in.

If you have short clock gates and long envelope attacks, then I still think you would be better off with an AD envelope instead of ADSR. With an AD you will still want to consider what happens when you get a trigger during the decay phase. Some ADs do not allow a retrigger during attack or decay. Some allow a retrigger during decay, but start the attack from the current value (which is what I think you want). And some allow a retrigger during decay and immediately reset to 0 before initiating the attack.

There may be some AD that allow retrigger during attack and immediately reset to 0 before starting the next attack, which you definitely do not want.

2 Likes

Thanks for the analysis. I’ve been making a music a long time and I’m always having to learn new thing.

Maybe this could help?

1 Like

TLDR, How about a slew limiter?

I’ve used Slew Limiters on envelopes before, and it’s a cool effect, but it has the same problem. If the rising slew is too slow it never gets to a good volume before going down. PS A Befaco Rampage can be either an envelope generator or a slew limiter :wink:

I think overall that there are two things that I’m trying that seem to work out with musically useful results:

  1. Use an RGate to turn triggers into longer gates, which gives the attack phase a fighting chance to rise to it’s max value.
  2. Use @synthi 's envelope which have a ‘Busy’ flag that makes it ignore new trigger until the envelope ends.

#1 is maybe closer to a reasonable solution. #2 will make notes get dropped, if that’s a concern. I’m not too precious about individual notes in my sequences. :grin: You can actually have one sequence trigger a different series of notes by modulating the attack and decay times.

Thanks for everyone’s suggestions.

sounds to me like you need some sort of polyphony: the trigger should let the note go through the whole envelope, and if there is another trigger, that should go to a new note with its own envelope, resulting in overlapping sounds. (at least that’s what i would want…) like a piano, where previous notes would still sound out, even if you have released the key.

I think you can do that coming from the MIDI-CV module but there isn’t anything like that in Rack. For one thing, in Rack, polyphonic pitch & gate signals don’t ‘know’ about what the envelope’s doing.

It suggests a module idea: A polyphonic envelope/VCA combo – like Vult Slap, that makes those kinds of decisions about voice allocation. I think most polyphonic modules don’t get very clever with their inputs. They just think of (e.g.) 8 Pitch CVs or 8 Triggers as being in ‘lanes’ – voice 1 cv gate goes to voice one on the output, voice 2 goes to voice 2 etc.

It wouldn’t be a super-heavy lift to make an Envelop/CV pair work the way you talked about it though.

1 Like

I was going to say that back in the day many analog poly-synths had a control for this (my Voyetra-8 did), so I would be astounded if there weren’t a VCV ADSR that would to this. Clearly there is!

And, no doubt there are others that either have a control, or no control but chose “trigger does not reset to zero” as their only option