The Psytrance Kick Generator: Genetic Synthesis and the Overprocessing Trap

April 2026 • 12 minute read • → Try the demo

I built a kick drum synthesizer that breeds its own samples using genetic algorithms. You give it two parent kicks, it runs crossover and mutation on their pitch envelopes, drive curves, and circuit blends, and outputs four offspring. You pick the best ones, breed again. After a few generations you usually land on something genuinely strange and usable.

This post explains how it works. But more importantly, it explains what I learned about overprocessing — and why adding another EQ, another phase dispersion, another something on top of something is almost always the wrong move. You end up chasing your tail, dialing in a chain you built on a bad foundation.

How Psytrance Kicks Actually Work

A psytrance kick is not a sample. It's a physical model of impact. You have a transient — a sharp, broad-spectrum click that registers as "hit" in your eardrum — followed immediately by a pitch sweep that drags the fundamental frequency from somewhere in the 2–5kHz range down to a 40Hz sub. That sweep is the body of the kick. The sub tail is the weight.

I built this in Python and JavaScript with Claude Code: 8 frequency control points, 8 corresponding time points, and a phase accumulator that sweeps through them. The same architecture you'd build in Max/MSP with a cycle~ object driven by a function~ envelope, just running in your browser.

The synthesis chain is: pitch envelope → sine wave → waveshaper → amplitude envelope → normalize. That's it. No filters. No compression. No multiband anything.

The Pitch Envelope: Where Character Lives

The 8 frequency control points define almost everything about the character of the kick. These are the only parameters that truly matter:

freq1 — the initial transient frequency. 3000–5500Hz gives you that metallic "click" on impact. Lower values make the attack feel soft and sluggish. Higher values get thin and percussive, almost like a rimshot.

freq8 — the final sub frequency. Always 40Hz in this system. 40Hz cuts through club systems universally. 50Hz starts competing with bass. 35Hz disappears on small speakers.

If you think you need to tune your kick to the key of the track — I'm sorry about that my friend, but that sounds like you need therapy. 40Hz is 40Hz. It sits below the musical content of everything else in the mix. Nobody on a dancefloor has ever thought "that kick is slightly sharp."

The shape between them — this is where everything interesting happens. A fast initial drop (freq1 → freq3 compressed into the first 5ms) gives you the aggressive "snap" characteristic of dark progressiv and hi-tech. A gradual exponential curve gives you a more musical, rounded attack. The champion kick in the demo drops from 3806Hz to 527Hz in under 4ms, then decelerates for the remaining sweep to 40Hz.

The time envelope controls when each frequency breakpoint fires. The champion's time array — [0, 0.02, 0.28, 1.32, 3.96, 9.30, 18.70, 33.74] ms — shows the pitch drop is nearly complete by 34ms. From 34ms to 207ms, the kick is pure 40Hz sine wave with the amplitude envelope shaping the decay.

Waveshaping: The DNA of Texture

The raw sine wave is too clean for psytrance. It needs grit. The synthesizer runs the signal through a waveshaper after pitch synthesis, choosing from eight different circuits:

tanh: Smooth saturation. Adds harmonics gradually, never clips hard. Transparent at low drive, warm at medium drive. The standard choice for musical saturation.

diode: Asymmetric response — harder clipping on positives, softer on negatives. Sounds like real analog hardware. Adds second-harmonic content. The champion kick uses diode heavily.

hard_clip: Clips at ±0.5. Brutal. Generates lots of odd harmonics. Sounds like a signal pushed too hard into a cheap preamp.

fold, soft_clip, asymmetric, sine: Various other waveshaping flavours — wavefolding creates additional complexity, asymmetric creates tonal imbalance, sine-based shaping rounds things out differently than tanh.

The Overprocessing Trap

The trap looks like this: your kick sounds almost right, so you reach for a compressor to add punch. Then another one for transient shaping. Then a saturator for character. Then an EQ to fix what the saturator broke. Then a limiter because now it's clipping. Six processors deep and the kick sounds worse than when you started — just noisier and harder to fix.

Every processor you add is a decision you have to dial in. And every dial you touch is compensating for something the previous processor did. You're not building a kick anymore, you're managing a chain.

The discipline is doing less. If the kick needs character, that character should come from the synthesis — the pitch envelope shape, the sweep speed, the sub frequency. If it sounds thin without the saturator, the problem is the envelope, not the signal chain. Fix the source, not the symptom.

The Amplitude Envelope

The amplitude envelope has four stages. Total length is one 1/8 note at whatever BPM you set — at 145 BPM that's ~207ms, at 160 BPM it's ~188ms. All stage boundaries scale proportionally.

0–10ms: Logarithmic curve from 100% to 30%. Counterintuitive — the attack drops in volume immediately after the onset. This compresses the transient slightly, preventing the initial click from being too sharp while maintaining impact. Like a compressor with instant attack and zero release.

10–28ms: Linear recovery from 30% to 100%. The kick comes back up to full volume after the compressed attack.

28–85ms: Sustain at full volume. The pitch sweep is mostly complete by here; this stage is pure sub content.

85ms → last 20ms: Full hold. The sub tail stays at full amplitude — this is the most important stage. Cutting volume here early is the most common mistake in kick design. The low end lives in this region. If it fades too soon, the kick loses all its weight in a mix.

Last 20ms: Logarithmic fade to exactly -inf dB. Fixed duration regardless of BPM. Prevents clicks at the sample boundary and makes room for the bass to breathe at the 1/8 note cutoff. The fade is steep enough to be inaudible as a fade — it sounds like a clean cut.

Genetic Breeding

The breeding system works on the same principle as biological crossover: take parameters from two parents, blend them with slight randomness, then add mutation.

For each frequency control point: pick a blend ratio slightly above or below 0.5 (normally distributed around 0.5 with σ=0.05), then apply the blend. So a parent with freq1=4500 and a parent with freq1=2800 might produce an offspring with freq1=3750, or freq1=3200, or freq1=4100 depending on the random blend.

Mutation fires independently on each parameter at ~35% probability. When it fires, the value is multiplied by a factor drawn from a normal distribution centred on 1.0 with σ=0.18. This means most mutations are small (±10%), occasional large changes (±30%), and rare extreme ones.

freq8 is always locked at 40Hz regardless of breeding or mutation. The sub fundamental doesn't evolve — it's a constraint. If it drifted upward you'd lose the sub content that makes psytrance kicks recognizable. If it drifted downward you'd fall off the frequency response of most sound systems.

The time envelope has an additional constraint: time points must remain monotonically increasing. After each time mutation, the value is clamped to be at least 0.3ms after the previous point. This prevents the pitch envelope from having control points in the wrong order, which would cause the interpolation to break.

Circuit blends are handled differently: each offspring randomly inherits one parent's full circuit blend, then there's a 40% chance of mutation — which completely replaces the blend with a randomly selected circuit (or mix of two circuits). Circuits don't crossover numerically the way frequencies do, because blending 50% hard_clip + 50% tanh is a different thing from either parent, not a midpoint between them.

The Fitness Function is You

Standard genetic algorithms use a fitness function — an objective measure of how good each individual is. This system has no fitness function. You are the fitness function.

This is intentional. What makes a psytrance kick good isn't computable. It's the feeling of physical impact, the way the sub interacts with a specific mix, whether the attack has the right amount of grit for the energy level of the track. An algorithm can optimize toward a target; it can't tell you what the target should feel like.

The loop is: listen, select, breed, listen. Typically 3–5 generations to find something genuinely usable. Sometimes generation 1 produces the winner. The randomization button drops you into a completely different part of the parameter space if you get stuck in a local minimum.

Try It

Runs entirely in your browser — no server, no upload, no tracking. The synthesis engine is a direct JavaScript port of the Python source. Click play to hear each kick. Select two as parents, breed, repeat. Download any kick as a 44.1kHz 16-bit mono WAV.

→ Open full page version

The Python source for the full synthesis engine — including the 8-circuit waveshaper, the breeding scripts, and the JSON config format — is on GitHub: github.com/liberated-waveforms/darkpsy-kick-generator

If you're building kicks and want a starting point beyond the presets, the NEURALAX_STARTER pack includes 175 samples at 145 BPM — kicks, percs, textures, atmospheres, all synthesized and curated for psytrance production. Free via Telegram bot.

→ Get NEURALAX_STARTER free