Volume Tapered Keyboard Zones

I know we can create velocity splits in order to access two sounds at different velocities using the same range of keys and I know this other topic was discussed before (can’t find that conversation now)…

… the one thing I increasingly want to be able to do is have overlapping sounds where the sounds taper in volume in the overlap.

For instance: Octives C1-C3 has a cello, octives C2-C4 has a viola. I don’t want the viola to start playing at full ‘velocity’ starting at C2 nor do I want the cello to just cut out from volume 127/full velocity the note before C3, I’d like both sounds to taper inversely across the C2-C3 octive.

Is there a scripting template for allowing this or another way of easily integrating this into GP? Some keyboards have this functionality built in.

This is trivial with GP Script — just respond to Note messages and use them to set a widget that’s grouped with another widget, the second inverted, and then map those widgets to gain controls for the different sounds.

I get this in theory (I have no idea how to actulaly script it) but it sounds like this would have to be done for every note in an octive (or more) to get a smooth crosfade across an octive… and notes played outside this cross fade range would need to have their own audio path un-affected by these gain stages.

I’m a visual thinker… three sounds (red, gree, blue) and the line graph would be volume from each note:

What would be the way to easily define the range and how many notes the volume curve is applied over this range? Could that curve be adjusted so it’s log vs. linear in it’s application?

Building splits is easy and I think building a tool that builds splits based on output volume, easily… perhaps with widgets controllilng the note points of the curve… would be very powerful.

Are there any examples of this already?

Within a hardware synth, this can be done because it all happens at the lowest level of the sound generating, but doing this later on (from the outside) with the options MIDI offers, it’s not so trivial anymore because there is (AFAIK) no “volume per note” available.
The only way one could achieve something similar is using the velocity value and adjust it per played note, depending of the position of the key. But this maybe will not result in a volume change at all and might change the whole character of a sound, depending of how it’s designed to react to velocity changes.

Another thing to try could be to separate each single played note to its own audio channel via mixer plugins… there one could adjust the real volume. But i guess this will afford some heavy scripting and a lot of virtual wiring - nothing i would like to do. :grimacing:
Sorry, i just was still dreaming… it’s not possible to do this!
In most cases, we only have a stereo sum output from the plugins and if there only was a three note chord played, how should we separate the three notes from each other when they ring at the same time on the same two audio channels?
And then we don’t have any options to affect the audio mapping of mixers in GP-Script (or do we?)… maybe that would be something useful to implement - not for this purpose, but i think it could become useful in some particular cases.

As I said, this is easy with GP Script - I just woke up in the middle of the night (sigh) and created a simple gig file to demonstrate crossfading from an acoustic piano to an electric piano as you move up or down the keyboard.

This is linear but you can just change the widget scaling to make the crossfade follow some other kind of curve

KeyCrossfade.gig.zip (106.2 KB)

This can be done with a scriptlet as well by capturing the MIDI In note and using two pairs of grouped widgets but I leave that as an exercise — I’m going back to bed now :slight_smile:


…but this approach would mean that the volume of the whole instrument will be “faded out” no matter if there was a “loud” note to be present at that time…
Imagine you would play a loud bass note on the lower split region and then at the same time play a chord that lies in the “crossfaded” region… the script would instantly cut the volume of all ringing notes, so the formerly loud bass note would be turned silent which could lead to an unwanted effect.
The only MIDI parameter which we have “per note” would be the velocity, but it can be very diffrent to what a change of the volume would do.

1 Like

Oh…told you it was the middle of the night….so if I understand properly, then you would just need to use the incoming velocity of a note as a bias to adjust the volumes

Which will only work if the sound is designed to make the velocity change the volume of a note - if it controls a filter or a split, you might get strange effects again. I think the only thing that can do this properly is the sound engine itself (via DCA/VCA or such).


MIDI MPE, Volume per note?
how should that work?

  1. That’s true for most sounds
  2. But I was suggesting that the velocity value be used as a bias for setting the widget value that controls the volume gain so it doesn’t really matter what the velocity actually does to the sound itself.

Hm… i’m not sure if this would actually bring a satisfactory result, but worth a try.

Or you use the same plugin 2x

One for the range where the volume should remain and the other range where the volume is controlled by the widget - assuming in this range you play monophonic.

I don’t know either - but it’s a starting point for experiments

I think what @dhj has made here is very cool and would work for traditional left hand walking bass lines or carefully played monophonic runs but it’s not what I had in mind and has the issues that @schamass suggested.

If played polophonicly within and simultaniously outside of this octive range, say if you were walking down the keyboard with chord shapes with both hands, as soon as you key a note in this range you’ll hear an abrupt drop in volume, almost like a portmento effect only with volume instead of pitch.

The only way I can think this can work in the literal way I described it and how some hardware keyboards work, outside of a plugin supporting the idea internally, would be to make a rackspace with 13 instances of the VST that you want to fade out, with coorosponding 13 midi in blocks all set to a single note, the last one set to the full volume range of notes, and each instance adjusted in volume for the desired taper. Which is crazy talk. Maybe this could be zoned into 4 instances that cover ranges of 3 notes each but that is still a laborious approach.

I haven’t used a keyboard that can do this but I know there are several that do… are they not just recieving midi ‘localy’ in order to trigger their own internal sounds? So it’s not the MIDI part of the equation that is the issue/solution, it’s the VST/sound engine itself, correct?

I’ve yet to see a VST that supports this idea either. Has anyone else? Seems like something a plugin like SampleTank which has multiple stereo pair outs and a whole internal mixer matrix designed to play multiple samples via splits internally could do.

The XK-5 could actually be set up to do this using sysex to control the matrix volume on a per note basis, but still a very laborious route and I don’t think cross fading the organ across an octive is a good use case scenario here, at least not for me.

Getting string sections to seamlessly blend and having a Rhodes that blends seamlessly across a grand piano are the two main ideas I am looking to build.

This is not too elegant, but I guess you could have (let’s say) 5 additional mid input blocks each for the two sounds where the sounds overlap (let’s say cello and viola) and have each mid input block with a limited range of one note (or you could do it by two notes, etc.) and precisely control the velocity for that/those note[s].

So, the sounds would overlap and you can arrange the velocities of each to do what you want. (Like a said, cluttered and not too elegant, but it should work). (One day I won’t be afraid of scripting, hah!).

Doing it with output veoloties might be a workable approach depending on the VST being played and how it’s being played but not a true cross fade where the envelope is volume based.

Worth an experiement, still a bit fidly to setup.