Best practices

Setting input and output

  1. Prefer output to a specific device over MIDI: <FX output>!

    It’s usually better to select a specific output device because sending MIDI feedback to the FX output has drawbacks.

    First, it doesn’t participate in ReaLearn’s multi-unit feedback orchestration. That means you might experience misbehaving LEDs/faders/displays when using multiple units.

    Second, it doesn’t work if ReaLearn FX is suspended, e.g. in the following cases:

    • ReaLearn FX is disabled.

    • Project is paused and ReaLearn track is not armed.

    • ReaLearn FX is on input FX chain and track is not armed.

Using the controller compartment

The Controller compartment lets you describe a Controller simply by adding mappings. When you do that, each Controller mapping represents a Control element on your Controller, e.g. a Momentary button or Fader.

Describing your controller is optional but it brings benefits:

  • You can use the Projection feature to project your controller mapping to a smartphone or tablet (watch video).

  • You can use controller presets either built-in ones or those made by other users …​ and thereby save precious setup time. Or you can contribute them yourself!

  • You can make your main mappings independent of the actually used Controller. This is done using virtual sources and virtual targets.

  • It allows you to give your knobs, buttons etc. descriptive and friendly names instead of just e.g. "CC 15".

  • You don’t need to learn your <<control-element, control elements> again and again. Although the process of learning an element is easy in ReaLearn, it can take some time in case the MIDI source character is not guessed correctly. Just do it once and be done with it!

If you want to make ReaLearn "learn" about your nice controller device, all you need to do is to create a suitable controller mapping for each of its control elements.

Let’s first look at the "slow" way to do this - adding and editing each controller mapping one by one:

  1. Press the Add one button.

  2. Learn the Source by pressing the Learn source button and touching the control element.

  3. Press the Edit button.

  4. Enter a descriptive name for the Control element.

    This name will appear in many places so you want it to be short, clear and unique!
  5. Assign a unique Virtual target.

    • At this point we don’t want to assign a Real target yet. The point of controller presets is to make them as reusable as possible, that’s why we choose a Virtual target.

    • In the Category dropdown, choose Virtual.

    • As Type, choose Virtual control element type if your control element is a sort of button (something which you can press) or Multi in all other cases.

    • Use for each Control element a unique combination of Virtual control element type and Virtual control element ID, starting with number 1 and counting.

      It’s okay and desired to have one control element mapped to "Multi 1" and one to "Button 1".
    • Just imagine the "8 generic knobs + 8 generic buttons" layout which is typical for lots of popular controllers. You can easily model that by assigning 8 multis and 8 buttons.

    • Maybe you have realized that the Glue section is available for controller mappings as well! That opens up all kinds of possibilities. You could for example restrict the target range for a certain control element. Or make an encoder generally slower or faster. Or you could simulate a rotary encoder by making two buttons on your controller act as -/+ buttons emitting relative values. This is possible by mapping them to the same Virtual control element in Incremental button mode.

Before you go ahead and do that for each control element, you might want to check out what this is good for: Navigate back to the Main compartment, learn the Source of some Main mapping and touch the Control element that you have just mapped: Take note how ReaLearn will assign a Virtual source this time, not a MIDI source! It will also display the name of the Virtual control element as source label.

Now, let’s say at some point you swap your Controller with another one that has a similar layout, all you need to do is to switch the Controller preset and you are golden! You have decoupled your Main mapping from the actual Controller. Plus, you can now take full advantage of the Projection feature.

All of this might be a bit of an effort, but it’s well worth it! Plus, there’s a way to do this a lot faster by using batch learning:

  1. Press the Learn many button.

  2. Choose whether you want to learn all the Multi elements on your Controller or all the Virtual control element type elements.

  3. Simply touch all relevant control elements in the desired order. ReaLearn will take care of automatically incrementing the Virtual control element ID.

  4. Press Stop.

  5. Done!

    • At this point it’s recommended to recheck the learned mappings.

    • ReaLearn’s MIDI source character detection for MIDI CCs is naturally just a guess, so it can be wrong. If so, just adjust the character in the corresponding Mapping panel.

You can share your preset with other users by sending them to info@helgoboss.org. I will add it to this list.

Naming compartment parameters

Because ReaLearn’s compartment parameters are freely assignable, they have very generic names by default. However, as soon as you give them meaning by using them in a specific way, it can be very helpful to give them a name by using the Compartment parameters menu.

Troubleshooting Luau import

The way Luau import works in ReaLearn is:

  1. ReaLearn attempts to execute the Luau script in the clipboard.

  2. ReaLearn attempts to interpret the returned value as ReaLearn API object.

  3. ReaLearn loads the API object

If step 1 fails, ReaLearn displays an error messages that hopefully contains a line number. If step 2 fails, ReaLearn shows a validation error message.

If importing Luau code fails and the displayed error message is not helpful, you can try Dry-run Lua script from clipboard. This action enables you to just execute step 1 and see the "expanded" result. This can help to make sense of a possible validation error message in step 2.