One MIDI IN Block with multiple ranges/sections with different velocities

Is there any possibility to just have one MIDI IN block and program multiple ranges and have different note velocities?

Or another alternative, is it possible to have MIDI Velocity Input adjustment, so it acts as a compressor, not on the actual audio being compressed, but the note velocity.

Being able to get the expression you want, making it sound the way you want it to sound based on how you play is very important.

Mainstage has the functions mentioned above, and would be nice if something similar could be implemented in GP.


Take a look at this plugins:

Or you use scripting, here is a simple example:

Var
   MIN : MidiInBlock
   v : int


on NoteOnEvent(m:NoteMessage) from MIN
 v=GetVelocity(m)
 Print(v)
 if v <= 60 then
  v = ScaleInt(v,0,60,0,80)
 else
  v = ScaleInt(v,61,127,81,127)
 end
 SendNow(MIN, WithVelocity(m,v))
end

Or more mathematical this:

Var
   MIN : MidiInBlock
   v   : double
   ve  : double


on NoteOnEvent(m:NoteMessage) from MIN
 v=GetVelocity(m)
 ve=(127.0/Exp(0.5))*(Exp(v*0.5/127.0))
 SendNow(MIN, WithVelocity(m,Round(ve)))
end

@pianopaul So how would I go about decreasing the NoteVelocity for a particular key range (i.e. D4 to D5) by a set amount, then have a few other ones for higher registers like as shown in the graph above.

The Velocity Processing is a bit more straightforward.

More generalized scaling though a GUI (as opposed to through scripting) is on our list for a future upgrade…it’s one of the few things I wish we had done sooner.

This is easy:

var  MIN : MidiInBlock
     v   : int

on NoteOnEvent(m:NoteMessage) matching [C3..C4] from MIN
 v=GetVelocity(m)
 Print(v)
 if v <= 60 then
  v = ScaleInt(v,0,60,0,80)
 else
  v = ScaleInt(v,61,127,81,127)
 end
 SendNow(MIN, WithVelocity(m,v))
end

on NoteOnEvent(m:NoteMessage) matching [C#5..G6] from MIN
 v=GetVelocity(m)
 Print(v)
 if v <= 60 then
  v = ScaleInt(v,0,60,0,40)
 else
  v = ScaleInt(v,61,127,41,127)
 end
 SendNow(MIN, WithVelocity(m,v))
end