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.
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.
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