Does a MIDI random delay plugin exist?

This is just a thought that occurred to me and I’m not sure I’ve thought it through very well or if there’s a better way to do it, but…

I’m sure most of us have created fat layered sounds by running one midi controller to half a dozen different synths. Generally works great.

But it’s not quite the same sound as having six different keyboard players playing six different keyboards. Just like putting a piano through a chorus pedal doesn’t really sound the same as multiple pianos.

In particular I find it difficult to get satisfying results layering percussive kind of sounds, especially multiple pianos. Trying to replicate the sound of three different piano players playing in unison, or recording three different takes in a DAW and then layering them together.

So I thought about a “midi delay” kind of plugin that simply adds a random delay to midi note on and note off events. I’m picturing a midi in block in GP routed in parallel to three or four of these “midi random delay” blocks. On the other side of those blocks I’d put my instrument VSTi’s.

Except I can’t seem to find such a thing. Anyone ever seen or tried something like this?

GP Script SendLater

Or this?

1 Like

Or try this scriptlet:

//Called when a NoteOn or NoteOff message is received
//Note: this will NOT be called for NoteOn/NoteOff messages if you have explicit
//NoteOnEvent/NoteOffEvent respectively callbacks defined
//Called when a NoteOn or NoteOff message is received
//Note: this will NOT be called for NoteOn/NoteOff messages if you have explicit
//NoteOnEvent/NoteOffEvent respectively callbacks defined

var Latency : Parameter 0..1000 = 0

On NoteEvent(m : NoteMessage)
 if IsNoteOn(m) then
   SendLater(m, RandomRange(0, Latency))
1 Like

I did find MIDIFripp in my quick search, but I don’t see a randomize function in there. If it’s just fixed delays then it’s easy enough to accomplish the same thing with audio delays on the back side of the instruments.

I hadn’t thought about doing it in a script. I’ll play with that scriptlet and see what happens! Thanks!

Ok, than randomize it with widget and a script?

I think so.

What I’m trying to replicate is the concept of multiple people playing in unison. In practice we humans are not robots, so we’ll press keys and release keys at different times. That’s the effect I’m going for.

If I run three instances of that scriptlet into three different instances of Pianoteq, each with different piano models and each slightly detuned, I’m looking to get something closer to the sound of three different piano players playing three different pianos “in unison” but not perfectly in unison.

Try Melda MUnison
But this is working on a single instrument, maybe with wet balances and multiple usages you can get the effect.

But I fear there is a huge latency…

But you are the only playing, right?
When more people play, why need that, they will not play in sync :wink:

I’ll give that a look, but I’m not sure it’s really the same thing. Seems like a more traditional “doubler” with a lot of extras.

I’ll see what the midi scriptlet approach sounds like.

The problem I run into with piano kind of sounds (fast attack) is that any kind of delay effects that simply duplicate the audio wave and shift them in time tend to produce artifacts and un-natural sounds.

Yes, it will be me playing one keyboard into three or five or 12 different instances of piano VSTs. I’m trying to replicate the SOUND of multiple people playing, but doing it in a way that is similar to actually having four different people playing four different pianos together in a room. Or the effect of playing multiple takes and layering them on top of each other.

So all notes you play should play right now on the 1st instance.
On the 2nd instance a little bit delayed and so forth for the next instances right?

maybe my scriptlet helps, but not really because every single note gets a random delay.

But who knows :wink:

After 30 seconds of playing on it, it is exactly what I wanted and gives exactly the effect I wanted. Thanks!

The only thing I’ll add is to also add randomize to the NoteOff events as well.

You’re a piano player and surely you’ve tried layering multiple piano VSTs in the past with varying degrees of success in “fattening up” your piano sound. To my ears, this sounds very different than other approaches to that.

To be clear, here’s what I’m doing:

Give it a try and see what you think of the sound. Maybe you don’t like it, but it’s definitely different than what I’ve been able to achieve with audio effects that do “doubling” or chorus, etc. (I’m using pretty short “latencies”, like well under 100 ms.)

1 Like

As I have Pianoteq too, can you upload a gig?

Consider detuning (very slightly) the instances. You can get a really rich tone that way

Sure, I can upload something, although there’s really nothing to it beyond what I’ve shown above.

I have the outputs of all three pianoteqs playing different models and routed to the same reverb external to it. I’ve turned off the Delay and Reverb effects inside Pianoteq just to cut down on multiple reverbs, but I haven’t played around with it.

This was just an idea I had this morning. It’s not ground breaking or anything, but to my ears it’s definitely different than what I’d been doing before.

Yeah, I was thinking that too. I didn’t do it in the gigfile here, but I haven’t really messed around much yet.
Piano Delay.gig (632.5 KB)

[By the way, in that gigfile I don’t think most of those knobs are actually connected to the plugins. I just copied a panel I had available.]

Sounds interesting,
I am wondering if the same effect could be done with Pianoteq alone in Layer Mode.
The just need a random parameter to delay notes.

I write to them, maybe they like it :wink:

And just sent them a message.

@Vindes: Is it worth to upgrade to Pianoteq Pro?

I haven’t played too much with the layering in Pianoteq 7, but when I did it wasn’t really doing much for me because it sounded just like when I run two Pianoteq instances in parallel. I figure I can do that already, so why bother spending the effort to do it in Pianoteq rather than GP?

I haven’t really fully thought through this idea yet, or messed around with it enough to know whether it’s really something I want to use. Like I said, just an idea I had this morning.

One thing I’m not really crazy about is that if you put three of these in parallel with random delays in the 0-40 ms range (which I think is what I had in that gigfile) you’re going to end up delaying your playing by some random amount. If all three notes come out with delays toward the long end of the range, you can feel it. I’m wondering if there’s a better algorithm than just random delays on all three.

Originally I was thinking about this as one plugin block that took a single midi input and fed multiple outputs. My thought was to set it up so that one of the outputs was always zero delay, but it would be random which one it was. That way you don’t have the same piano always playing first.

Even better, if the scriptlet could see into the future it could play some notes 20 ms before I play them, and as long as they center the randomness around zero then you could get the same effect without adding lag. I suspect that’s not going to happen until GP5, though.

Regarding PTQ Pro, I’ve thought about it but not sure I’d use any of the incremental Pro features. I really don’t tweak sounds in Pianoteq much. I’ve had so many analog synth VSTs over the years that I’ve learned that I’m just not that kind of sound editor. I end up using presets and just making very basic tweaks. The further I get down into the weeds the more I regret the time sink it becomes, so I’ve stopped doing it.

If that would work I would stop working and only bet on horses :wink: