How do I get Velocity to do this to a modulation target?

Currently I am trying to find a way to cause velocity to affect only the amount of a modulation target in a fractional way (dividing by multiplication of 0-1), rather than taking a modulation target’s baseline value and adding to it.

in other words, i want velocity to change the amount of something as a multiplier with a value of 0 to +1, and the way that value would be applied is described by this algorithm in pseudocode:

velo.rotary.knob is the value of velocity sent to a modulation target
this pseudocode assumes the maximum positive value of this is +1 and the minimum is -1

velo.rotary.knob == 1 (
if midi.event.velocity==0 then target.parameter*=0 # low event velo, target nullified
if midi.event.velocity==64 then target.parameter*=0.5 # target value reduced by half
if midi.event.velocity==127 then target.parameter*=1 # full event velo, no change to target
velo.rotary.knob == 0 (
if midi.event.velocity==0 then target.parameter*=1 # no change
if midi.event.velocity==64 then target.parameter*=1
if midi.event.velocity==127 then target.parameter*=1
velo.rotary.knob == -1 (
if midi.event.velocity==0 then target.parameter*=1 # low event velo, no change to target
if midi.event.velocity==64 then target.parameter*=0.5 # target halved
if midi.event.velocity==127 then *= 0 # max event velo, null the target

It seems that in Vital, Velocity as a modulator source is currently adding to the target parameter’s value (multiplying by a value greater than 1), not multiplying the target value by a value of 0 to 1, which would be division. This tells me that I am wanting something in my user skills, but also the way velo works by default requires an extra acquired skill other than the simple stupid drag and drop and receive bacon method.

can this be achieved via bipolar mode? are there any tricks tips or best practices to aim for this kind of behavior?

Apologies, but I don’t quite follow the exact details of what you want to achieve, however I wonder if ‘mod remap’ will be part of your solution?

Are you familiar with this?

On the modulation matrix page, for every source -> target modulation, the manner of how the source modulates the target can be changed.
The default in linear but this can be changed to any pattern by drawing a shape (in the same way a LFO shape is drawn).

In the image below, velocity is mapped to filter cutoff.
Low velocity values will have no effect, mid values will have maxium effect, and high values will have no effect.

Perhaps mod remap would be a good place to start.
You may need to combine this with other modulators (or a macro knob) to achieve what you want. I’m not sure.

All the best.

1 Like

thanks, forgot about mod remap.

the pseudocode shows only 3 hard cases, but in between them would be a normal interpolation that would represent 127 levels of velocity.

it’s the way that velocity normally works in other words. I don’t know offhand the way to use velocity in vital because for me, velocity is a divisor, but in vital it seems to be multiplying the target by a value greater than 1. for instance, if you drop velo on an envelope that is targeting the level of an oscillator, the velo will increase the strength of the signal. this is not the way i am accustomed to velocity to work on a synthesizer. for me, velo will always be a multiplier of the maximum envelope level, by a floating point value of 0.0 to maximum 1.0 – i don’t need velocity to be adding more gain to the maximum level of the envelope, i want it to divide the strength of the envelope.

expected velocity behavior as random samples, the rule being multiply velocity level by 1/127:
use the constant for the value 1/127: 0.00787 and call it VC

if event.velocity==127 then output.level *= (VC * 127)

if event.velocity==64 then output.level *= (VC * 64)

if event.velocity==1 then output.level *= (VC * 1)

if event.velocity==0 then output.level *= (VC * 0)

imaginary setup:

envelope2 sent to oscillator level at 0 (envelope 2 will control the volume instead of oscillator 1)
send velocity to envelope 2’s target dial at oscillator level to attenuate the strength of the envelope using the dry concept of velocity having a maximum value of 1.

to put it in the most simple terms, with no velocity, if you hit the note hard, the note plays at the maximum volume, and if you hit the note soft, the note plays at the maximum volume.

i don’t want velo itself to add gain to every kind of target. it’s ok if velo controls a 2x gain but velo by itself ought not to add gain to every type of target. there should be a difference whether velo is sent to a filter cutoff directly or to an envelope send that is already targeting a filter cutoff.

When i try to use velocity in vital, it seems to add more volume to the signal. i don’t ever want velocity to do that. i just want it to make it so that there is velocity sensitivity for when the midi event is quieter, for dynamics. since you cant make a midi note with a greater velocity than 127, i don’t see any advantage in making the velocity add any volume to the note.

so if the velo control is max to the plus side, loud notes should play loud, quiet notes should play quiet. the amount of those dynamics should be controlled by the velocity amount. if the velo is on the negative side, the opposite should apply. I don’t know what bipolar mode should do with velo, because I think velo is a different kind of modulator than an LFO. I’d leave adding gain to an envelope or LFO type modulator. I don’t think velo should be adding gain.

In my experience, vital is working like any other synth I’ve used that has similar modulation capabilites.
That is, in the situation you’ve described where an envelope modulates level, adding velocity as the modulation ‘sidechain’ controls the amount of the envelope modulation scaled to the velocity value.

Isn’t this what you require?

Are you perhaps using velocity as a separate and independent modulation source, rather than using velocity to modulate an exitsing modulator (as shown above, by dragging velocity on top of the modulation from Env2 to Osc1 level)?

1 Like

I’m sure it works the way it is supposed to, but when i try to put velocity on a target, and if i crank it to full, the velocity does work, but it seems to add more level to the target that i send it to, not attenuate the level of the target in proportion to the amount of velocity in the event. (whether it is a drawn midi event or a struck key on a velocity sensitive keyboard) This is probably going to require me to learn the Mod Remap functions.

the synth developer xoxos has a bunch of plugins that have a velocity control next to them. increasing the velocity will create a bigger difference in loud versus quiet in the parameter. so, more velocity to me means more dynamics, but i don’t want my velocity control to add extra gain because I have already set up the preset, all i want to do is add dynamics to that given voice, per-voice. by dynamics i mean the difference between loud and quiet. this could be a unipolar vs bipolar thing. just trying to gain some more understanding on the velocity algorithm(s)

I need to put in some work to understand how to get the desired effects from the velocity and mod remap tools.

I’m not sure what might be causing the issue - I haven’t come across the same problem, but I perhaps I limit my use of velocity as a modulator.
FWIW, here’s a patch that shows velocity modulating the level of another modulator working in vital.
Velocity modulating envelope.vital (170.0 KB)