WaveStack is on the iOS App Store

Vac

Vactrol-style semi-stable envelope for VCV Rack

The Vac module panel in VCV Rack.

Vac is a semi-stable attack/release envelope generator in 6 HP. It has the usual A/R shape, and each stage has a STAB (stability) control that varies its timing from one cycle to the next by an amount you set, much as the response of a vactrol (an LED driving a photoresistor) drifts. At STAB=0 it is an ordinary, repeatable envelope. Turn STAB up or down and each trigger’s rise or fall, or both, stretches or shortens by a fresh random amount, so a repeated pattern no longer plays with identical timing on every note.

How the drift works

Each rising-edge trigger samples a fresh random factor for the rise and fall stages, scaled exponentially by their STAB knobs:

factor = exp(STAB · r · ln 2.5)     where r = random 0..1
  • STAB = 0 → factor = 1 (perfectly stable, like any normal envelope).
  • STAB = +1 → factor in 1×-2.5× (stages run longer, by a random amount each cycle).
  • STAB = −1 → factor in 0.4×-1× (stages run shorter).

The exponential form is log-symmetric around 1, so STAB never shortens a stage to zero. A multiplicative factor also matches how a vactrol drifts: its timing scales up and down rather than gaining or losing a fixed amount. Rise and fall have independent STAB controls, so you can keep attacks tight while letting releases wander, or vice versa.

Controls

ControlFunction
RISEAttack time
RISE STABBipolar stability of the rise stage (0 = stable; ± = random longer/shorter per trigger)
FALLRelease time
FALL STABBipolar stability of the fall stage
CURVEBlends linear-rate to exponential-rate stage shaping (Swell-style), applied to both stages
LOOP (button + LED)Latches auto-retriggering: when the fall completes, a new cycle starts. Toggling LOOP on from idle also kicks off a cycle (no external trigger needed)

Inputs

InputFunction
TRIGRising edge starts one A/R cycle
RISE CVRise time modulation (±5V → ±50%)
RISE STAB CVRise stability modulation
FALL CVFall time modulation
FALL STAB CVFall stability modulation
CURVE CVCurve modulation (±5V → ±50%)

Outputs

OutputFunction
ENVThe envelope, 0-10V
END1ms trigger fired at the end of each fall stage (chain it, or use it to clock other events at the envelope’s own drifting rate)

Context menu

  • Continuous drift (rate wobbles during stage): instead of one random factor sampled per stage, the rate varies smoothly throughout each stage, so the speed changes partway through a rise or fall as well as between cycles.

Patch ideas

Humanized plucks: trigger Vac from a sequencer’s gate, set a short RISE and medium FALL, and set RISE STAB and FALL STAB to about ±0.2. Each note’s envelope is slightly different in length, while the notes still start on the sequencer’s steps.

Self-running drifting LFO: turn on LOOP with no trigger patched and Vac runs on its own. Raise the STAB controls and it becomes a slow LFO whose period changes on every cycle. Take END to clock other modules at that varying rate.

Vactrol-style filter pings: send ENV to a filter’s cutoff or a VCA, trigger it rhythmically, and use FALL STAB to vary the length of each decay, as a vactrol-based low-pass gate does.

Generative timing: patch END to the TRIG of another Vac, or back into a sequencer’s clock, so the drifting release time sets when the next event happens. Small STAB values give rhythms whose spacing varies slightly from beat to beat.

Fixed timing: set both STAB knobs to 0 and Vac is a repeatable A/R envelope with a linear-to-exponential CURVE control.

In the synthesis guide

Pair with