Dialing in the perfect sidechain envelope

I’m using the ENV effect to generate a sidechain envelope from a kick trigger, outputting the envelope via CV. This envelope is controlling the VCA of my sub bass. I’m trying to dial in the envelope settings to get it ‘just right’ so the kick and sub bass are sitting together in the mix.

Ideally, I’m trying to use only the ENV output without taking up an attenuverter. I figure this must be possible, but it’s not working as expected.

To create the inverse envelope, I set:

  • attack: I’ll get to this in a second, bear with me…
  • decay=0
  • sustain=100%
  • release is variable. About 100 is good. Curve= -20%
  • depth=-100
  • offset is variable, determining how much pumping
  • hold=0
  • sidechain is set to my kick midi note.

The output envelope and kick looks like this

Pretty good eh? Unfortunately it’s got an audible click at the start of the envelope. Adjusting the attack unfortunately does nothing, so I’m stuck with the click. No value of attack increases the envelope attack. It’s always fixed to what looks like attack=~2.

The perfect sidechain envelope is almost within reach, if it wasn’t for this unsolvable click.

Am I missing something or is this a bug?

It does not sound right that attack does nothing. I have just checked the envelope fx here, and it absolutely works like you would expect.
Perhaps you could setup something ultra simple, like just plugging the envelope into an oscillator (pitch) so you can hear that the envelope is working correctly?


I had some weird things going on when changing the envelope shape as well… Can’t remember exactly, but it also had to do with controls not actually changing the shape (they did change the visual shape on the Hapax screen, but not the actual cv output). It wasn’t consistent though, as it later did work. Didn’t look too deep into it though…

I tried various envelope shapes tonight - positive and negative. Nothing I do affects the attack when measured on a scope. It’s always vertical whether I set it to 1, 10 or 100. Very weird.

I flashed the firmware again but no luck

Perhaps try it straight from Hapax boot.
(If something else is also sent to the cv out with the envelope, that could screw with it. )

1 Like

are you playing this live, or is this playing back a sequence?
(not that it really matters, as I suspect the underlying issue affects both)

I suspect what you are seeing is caused by slight latency that is kind of inevitable in this scenario.
(given midi in a serial protocol, and also hapax will not be running it sequences at audio rate)

this is why we usually so do things like side chaining in the audio realm where it can be sample accurate.
frankly, Id say this is a (natural/expected) limitation of this approach.

you could test this theory, by splitting trigs on to different tracks, and using a bit of micro-timing to give the side chain env a little ‘head start’ :wink:

one could argue that the solution to get this working, would be linked to things like delay compensation…
( this has been discussed to death, so not going over that again)

anyway, if you can show Squarp the issue, and demo the latency/microtiming effect, then you can submit this as part of a feature request.

but as I mentioned above, id not say this is a bug, rather a limitation of the approach (in a similar way to how midi lfos are not perfect lfos either) … but perhaps long term, its something squarp might be able to improve as part of delay compensation (which is a huge topic !)

I should also point out, that all this does not mean this ‘side chaining’ is useless… rather, how useful it is, will be dependent on material/synths it’s used on, as its rather dependent on the ‘on note’ behaviour of the thing being side-chained… so basically ymmv for different use-cases/users/setups.

Great suggestion - an empty project with a loop of 4 triggers driving an ENV effect out of CV4 resulted in both normal and inverted envelopes with variable attack length.

There’s something about the project I’m working in that is causing the envelope attack to be zero. There are no other FX active in the project so I’m leaning towards this being a bug.

Thanks for the detailed response @thetechnobear . Latency isn’t an issue, the issue is that the envelope outputted to CV does not respond to changes to the attack parameter, and it appears to be project-specific. I’ll follow up with a bug submission.


Are you sure no gates or whatever are being sent to that port?

No extra gates, but good suggestion as there is a lot going on in that project and it was worth ruling it out.

With a bit more digging, I figured out the root cause. tl:dr; From what I can see, Firmware 1.12 envelopes outputting to CV do not behave as stated in the manual.

The length of each envelope stage (A,D,S & R), at least when outputted via CV, are proportional to the note length. Not just the duration of the sustain phase as you would typically expect.

The issue I observed originally was when the note length was 1/16. In this case, the envelope attack length is always zero, no matter what the parameter setting is.

Here’s how to reproduce the issue. I’m using Mordax Data for a scope so can capture the envelopes in some detail.

  1. Create a new project with a drum track with a 1 bar loop. Lay out notes on steps 1,2,3,4 a la kick drum.

  2. Add an ENV effect to the project. For simplicity, we use the default ADSR settings. Set the output to a CV channel (I’m using CV4). Set the sidechain note to the 4/4 note set in step 1 above. Parameter settings are as follows:

Without adjusting any ADSR settings, we can change the shape of the envelope by adjusting the note length. This yields unexpected results, especially when the note lengths are very short.

  1. Set the row note length to 2.

Looks like a solid ADSR.

  1. Set the row note length to 1:

No sustain phase.

  1. Set the row note length to 1/2:

No decay or sustain phase.

  1. Set the row note length to 1/4.

Attack phase is shortened. No decay or sustain phase.

  1. Set the row note length to 1/8:

Attack phase is almost zero. No decay or sustain phase. Release is shortened.

  1. Finally, set the row note length to 1/16.

No attack, decay or sustain phase. Release is shortened.

The ENV FX manual entry states that the duration of ADH & R are defined in clock ticks - absolute values. Sustain is set at a level until the key is released.

From what I can see above, the current version of envelopes (V1.12) don’t behave in this way.

Submitted a bug report. The perfect sidechain envelope is still within reach!

1 Like

This is behaving as designed, so this is intentional rather than a bug, but maybe the design is wrong.

Here’s the current behaviour:

  • When a note off is received, the envelope goes to the RELEASE stage, no matter the current stage. What this means is the ATTACK, HOLD and DECAY stages will be short-circuited to RELEASE as soon as the note off message is received.
  • When entering the release stage, the envelope value is set to SUSTAIN, no matter the previous value in the previous stage. This results in a consistent slope in the RELEASE stage regardless of the incoming note length.

Another design which I’m guessing would be a better fit to your expectations:

  • When a note off is received, as soon as the SUSTAIN stage is reached (or if currently in SUSTAIN), we jump to RELEASE. So the envelope would wait for completion of A & H & D before jumping to R. By nature, this also ensures the value of the envelope is SUSTAIN when entering the RELEASE stage.
    tl;dr: A & H & D should probably not short-circuit to R when receiving a note-off.

Having written this, I do think the first design is wrong and we should go with the latter one
EDIT: The latter one is not always desirable either, see below.

What do you think?


On gate off, you should immediately enter release.
However the level should be taken from where ever it last was… it should not go to sustain level.

Note: this is also true if, env has gone thru attack and is now descending thru decay when gate off is received

in other words, release always descends from current level.

at least this is how I’ve always implemented envelopes . It’s sinple and effective.


Yes, that would be the traditional envelope, which only works with gates but not triggers, so a bit finicky to use as a sidechain envelope.
But still a more valid design than the current one.

Waiting for AHD may make sense in response to a trig.
A practical example would be emulating the pinging of a LPG, with a slopped attack to emulate the the slight slew of the rising edge in that circuit

Yes maybe the envelope effect should behave different for drum triggers vs note gates (poly track). For note gates you would expect the traditional envelope behaviour. For drum triggers you would expect it to complete the whole envelope stage as if the note was held, but only as long as the attack+decay+hold time.

I’d rather not introduce inconsistencies between track modes.

Ok fair enough. I see now that it is possible to set a note length for drum mode as well, so it isn’t really an issue. I guess this works for gate trigger outputs as well?

With the release of Hapax 1.13 I can confirm that the new envelope behavior and settings support dialing in the perfect sidechain envelope!

It’s now possible to make precise, easily adjustable, AR envelopes when setting the gate length to be very short.

Thanks to everyone on the thread for contributing to the conversation here and thanks @Thibault_Squarp for a quick turnaround.