A more musical MIDI learn
What is ReaLearn?
And how does it compare to other projects?
ReaLearn is a VSTi plug-in for the Digital Audio Workstation REAPER and works in REAPER only. Its purpose is to improve REAPER's MIDI learn capabilities. If you frequently need to map MIDI controller elements like knobs or switches to REAPER functions such as FX parameters or actions, ReaLearn might be useful for you.
REAPER itself has this capability but some useful MIDI control scenarios are quite difficult and time-consuming to achieve with REAPER alone. You would need to tinker with things like MidiToReaControlPath and general purpose MIDI plugins. ReaLearn tries to make that easier.
what makes it special
You can use REAPER's built-in MIDI routing capabilities to route MIDI events to ReaLearn. That's useful if you want different mappings depending on the song or instrument you are currently playing. Of course you can also preprocess incoming MIDI events before they are routed to the target.
group and save mappings
Group mappings and activate/deactivate them group-wise simply by instantiating multiple ReaLearn instances and enabling/disabling them as desired in the FX chain window. Save a bunch of commonly used mappings as preset and reuse it. Map to actions on a per-project basis. You don't need to pollute your global action mappings just for the needs of one project.
"Squeeze" the target values into a specific range. React to just a sub range of a control (for example, you can use one knob for multiple parameters depending on the knob position). Let the parameter value rotate in relative mode. Reverse the direction. Avoid audible parameter jumps in absolute mode.
Use a keyboard's key range as source. Control track volume, track send volume and track pan. Use 14-bit CC and (N)RPN messages as source.
ReaLearn tries to guess the character of MIDI CCs when learning them (character = rotary encoder, switch or fader etc.). It automatically detects and chooses useful modes if enabled.
and more flexibility
Use buttons for increasing/decreasing values. Map multiple controllers to one parameter.