Hey everyone!
I've been playing around with an idea in my head for a while, I'd like to create a solution to make my midi drum programming more human by automation of certain things. Now I know there are on-the-fly midi velocity randomizers, but there are two particular ideas I'd like to ask you to help me figure out.
Currently what I do is trying to get as close to a human-played drum sound (feel) as possible in a Metal context. I'm primarily a bassist, and have been genuinely amazed by the likes of Matt Halpern, Steve Judd or Dirk Verbeuren, so I use a lot of ghost notes, I never repeat any part exactly, there's always a lot going on and it's often polyrhytmic. Especially because the velocities and the deliberate "human" traits (like playing certain instruments a bit late), usually a 6 minute song's drum programming takes me about 4 hours. Now, there's few things in the studio I can imagine being more boring than programming drums. I write everything in one midi item, I work in 3-4 passes, first is genuinely figuring out what a drummer should play under which part, I use straight velocities, like a draft. Then I usually write variations, third pass is writing breaks, and fourth is humanizing the whole thing. The last one is a big chunk of that time is readjusting velocities, others are manually asynchronizing notes - both of those latter I'd like to have made on-the-fly by a reascript/vst/au/whatever plugin, similar to what "Midi Velocity and timing humanizer" does from schwa. (Maybe just expanding that plug would work, as I'm already using that - I just don't know how to write code.) So I want to program parts with linear velocities and perfect timing, and during playback the plugin dynamically changes the midi output that is routed to my drum VST, based on a set of things.
I realized lately that I operate on a set of rules that I apply in every song, of which these I don't know how to automate the following:
I'd like one note in my overall drum programming (let's take my main big snare hit as an example) to be delayed by an amount that relates to the same note's velocity. The harder the hit, the more delay in milliseconds, so ghostnotes are accurate, double rimshot hits at 127 are late. What would be even better, is if this functionality would respond to the rarety of the same note (or a set of other notes, like in the case of toms), so the farther the previous / next note is, the bigger the delay gets based on the velocity of the note. What I want to achieve is to have my drummer play fast high velocity parts fairly accurately (like a blastbeat), but airy, bombastic slow tempo parts (like a typical Rammstein mid-tempo verse let's say) genuinely late on the snare. I'd like to apply this to a couple of midi notes within a midi event, but not every instrument within the drums of course, and I'd like to randomize the affected notes also within a set of boundaries (so for example when hitting a crash and a snare, or a bass drum and a floor tom at full velocity, they wouldn't be hit exactly the same moment - again, I'm talking about milliseconds here). I don't want anything to arrive early, only a bit late based on these variables. I find that it helps the feel a lot, and it's a bitch to manually program/adjust for each note.
The reason why I want certain delays in milliseconds and not in midi ticks/samples, is because it'd make it easier to set up one basis preset for all the tempos, as essentially these humanizing elements are due to how muscles work in the human body when playing drums, which do not get affected by the exact bpm tempo of a song (also, tempo changes within a song wouldn't effect by how much the drummer is late when hitting hard).
The other thing is similar, I'd like the possibility for my bassdrums (or my cymbals for that matter) to dynamically change output velocity based on how fast the pattern is that's being played, similar to a compressor's attack/release fashion, so 145 bpm 16th notes would have lower velocity, where quarter notes would have higher velocity, whole notes would have 127 for example). It sounds way more human when double bass / double stroke patterns are not at full velocity, but just one hit notes (more or less) are, so the more rare, the harder.
One third thing that comes to mind, eventually it would be awesome if I could say that certain notes within a measure would be less or more affected. Fast patterns (especially breaks) usually sound better when you accentuate the first note (with higher velocity but no corresponding extra delay), or the 1st and 3rd just ever so slightly... I think this could be useful.
I have found ways to route my main linear midi programming to a bunch of other tracks, where each track filters every note except one, then I can put a humanizer on them, but I'm unable to figure out how to get the velocity data to modify the boundaries of these automations. And it might be easier to just get all these into one plugin window, if anyone knows how to add functionality to aforementioned Midi Humanizer.
The very essence of this project would be that we could program lousy and inhumane drum patterns, and this would turn them into something "sloppy" enough to pass for human.
I hope what I described was clear enough, let me know your thoughts on this one
And of course, those who can help me figure this out - eternal love forever to you
Thanks
M