How to humanize MIDI velocity for realistic drums and keys
Robotic-sounding MIDI is usually a velocity problem — every note triggers the same sample at the same volume.
Robotic-sounding MIDI is usually a velocity problem — every note triggers the same sample at the same volume. Real drummers and pianists hit harder on accents (beat 1, 3) and softer on ghost notes and off-beats. Vary velocities between 80-115 with intentional dynamic patterns, not random jitter.
- Beat 1 + 3: velocity 105-115 (accents)
- Beat 2 + 4 (snare backbeat): velocity 100-110
- Ghost notes / off-beats: velocity 50-75
- Hi-hats: alternate 90 (open) / 70 (closed) for groove
- Avoid full randomization — humans aren't random, they follow musical phrasing
Map out the accents first
Identify the musically important beats: in 4/4 that's usually beat 1 and 3 for kicks, beat 2 and 4 for snares. Set those notes to velocity 105-115. Everything else should be quieter. Don't start by randomizing — start by making the structure clear, then vary inside it.
Add ghost notes below 75
Ghost notes are the soft hits between the main beats — usually on the snare (16th note ghosts between beat 2 and 4) and hi-hat (alternating velocity 16ths). Set them to 50-75. Without ghost notes, programmed drums feel skeleton-like. With them, the groove starts to breathe.
Vary the hi-hats with intent
Alternate hi-hat velocities — open on the 1, closed on the 2-and-3-and-4-and. Or accent every 4th 16th (creates a 'spitting' pattern). Try velocity 90 on accented hats and 65 on the rest. Even small variation (10-15 velocity units) makes the hat pattern sound like a human, not a sample.
Don't use full randomization
DAW 'humanize' functions that randomize velocity by ±20 create unnaturally even chaos — humans accent musically, not randomly. If you use randomization, limit it to ±5 on top of an intentional velocity map. The pattern should still be recognizable when you remove the randomization.
Apply this in Cue
Open the app with this question pre-loaded. Free to use, no signup.
Try this in Cue