Programming drums that don't sound programmed

December 2025 · Audio · 4 min read

I make records as drunkgiantbird and program the drums myself in Ableton. Over about six months I worked out how to get them sounding like a person played them. This note goes through what I changed, in the order I did it: samples and velocity first, then timing drift, then the tempo track.

Where sample libraries fall short

A drum library is a set of discrete recordings. Each drum is recorded at a few velocity bands, with round-robin samples so consecutive hits don't play the same file.

Both of those cause problems when you listen closely. Velocity bands mean a hit at 96 and a hit at 97 can land on two different recordings, while a real drummer's dynamics are continuous. Round-robin variation is random, but a drummer's variation follows effort, where they are in the phrase, and which limb is playing.

Sampling my own hits

I started with velocity, not timing. Before this I was using MODO Drum. I moved off it and sampled my own kit, recording hits across a range of textures instead of relying on preset velocity layers.

I needed the tone to change with how hard each hit was played, not just the volume. A rimshot hit by a tired player sounds different from a fresh one, and that difference shows up in the tone before it shows up in the volume. So the samples had to capture how effort changes the sound.

With those samples in place I could draw velocity against the phrase. A right hand drops a few points over a long run of eighth notes. Accents come back up. A fill uses energy, and the bar after it is a little softer.

Drift with correction

Most humanise features add a uniform random offset to each note. That sounds like noise, and it's easy to hear. Real timing error is correlated: a drummer drifts, notices, corrects, overshoots a little and settles.

So I scripted the drift instead of randomising it. The MIDI gets nudged along a slow wandering curve with the correction built in, so the timing leans one way for a phrase and then comes back. I wrote the script in Python, and it generates the MIDI that goes into Ableton.

Drift without the correction sounded sloppy after a few bars.

A moving tempo track

Even with velocity and drift sorted, a perfectly constant tempo underneath still gave it away within a few bars. So the tempo track moves. It pushes a couple of BPM into choruses and settles after a fill, the way a band's tempo moves because the players are listening to each other and not a click.

It also helps the drift. The note offsets are now relative to a tempo that's moving, which is how a real drummer's timing behaves.

The order I'd do it in again

Humanise controls are mostly about timing, so that's the obvious place to start. I'd still start with dynamics. Once the velocity sounded played, the timing work was much easier to judge.

By the end of the six months the process was quick enough to keep up with writing songs instead of slowing it down.

A few people who heard the tracks asked me who the drummer was.