Go Back   Cockos Incorporated Forums > REAPER Forums > MIDI Hardware, Control Surfaces, and OSC

Reply
 
Thread Tools Display Modes
Old 03-15-2018, 12:36 AM   #1
minotaur
Human being with feelings
 
minotaur's Avatar
 
Join Date: Jul 2016
Location: Strasbourg, France
Posts: 31
Default Asking help to build realistically automated midi drum channel

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

Last edited by minotaur; 03-15-2018 at 12:46 AM.
minotaur is offline   Reply With Quote
Old 03-15-2018, 12:56 AM   #2
G-Sun
Human being with feelings
 
G-Sun's Avatar
 
Join Date: May 2010
Location: Norway
Posts: 7,318
Default

Not a direct answer to your question,
but two suggestions:
- Jamstix http://www.rayzoon.com/jamstix3.html
- Play the parts on a midi-device. This will create velocity and timing imperfections
__________________
Reaper x64, win 11
Composer, text-writer, producer
Bandcamp
G-Sun is offline   Reply With Quote
Old 03-15-2018, 06:33 AM   #3
minotaur
Human being with feelings
 
minotaur's Avatar
 
Join Date: Jul 2016
Location: Strasbourg, France
Posts: 31
Default

Quote:
Originally Posted by G-Sun View Post
Not a direct answer to your question,
but two suggestions:
- Jamstix http://www.rayzoon.com/jamstix3.html
- Play the parts on a midi-device. This will create velocity and timing imperfections
Thanks for your reply! I'll check out Jamstix, I don't know it, although I gather it's a drum VST with a similar algorhythms of humanization in-built. Unfortunately it's no OSX compatible, I'm on a Mac...

What I aim at is to create a template/plugin/midi routing scheme that could be applied to any drum software/sampler library, or even any software instrument that could benefit from this kind of proportionate filtered randomization.

And yes, there's always the possibility to play the parts, sure, but that would be just like applying random destructive midi humanization to one particular track, which I already do. With live recording on a midi input I had little success playing believeable funky hi-hat patterns for example also, whereas preparing a properly routed basis once, then allowing myself from then on to program linear notes would be WAY more beneficiary for me on the long term, not to mention it requires zero actual skill to be developed. I'm working on a solution that's created specifically for hand programmed or 100% quantized perfect midi data, and the reason for that is the convienience it would offer to program one track, but be able to use the data in it to be potentially routed to other instruments as well - so when I'd play the parts it would still be exactly the same thing across instruments, which creates that genuine robotic feeling I specifically try to avoid here.

Imagine being able to program one quarter of the data for orchestral stuff, for example.
minotaur is offline   Reply With Quote
Old 03-15-2018, 12:11 PM   #4
dub tree
Human being with feelings
 
Join Date: Jan 2008
Posts: 308
Default

There are some cool scripts you can get from ReaPack that might help you with your MIDI editing workflow.

Something like MPL's "MIDI note selector" lets you select every X note, for instance, then you could easy edit the velocities of every other kick, without having to manually select each one.

Or Kawa's "SelectBottomNotes" to select all the kicks in one click. Or "Auto Selection" to select all notes based on the editing grid.

Or SPK77's "select all MIDI notes and events right of cursor"

Or SPK77's "MIDI velocity tool" to expand/compress velocity range, create slopes, etc.

There are hundreds of things like that, for which you might be able to find a use in your workflow, that aren't built into Reaper by default.

It's all worth checking out; you might find something really useful, and can cobble together your own custom set of tools for MIDI editing.

It's not quite what you asked for, but some of those scripts can really help with automating certain tedious aspects of editing.
dub tree is offline   Reply With Quote
Old 03-15-2018, 03:56 PM   #5
Tod
Human being with feelings
 
Tod's Avatar
 
Join Date: Jan 2010
Location: Kalispell
Posts: 14,745
Default

Really and truly there's no better way to get the realism you want then just playing it in with your midi keyboard or some other midi device with pads. It'll aslo be way faster than what you're suggesting.

Even if you have to do it one measure at a time, one kit piece at a time, it will end up way better.
Tod is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 12:45 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.