Reorganize top-level directories with clearer naming convention
app -> app-desktop-macos, presets -> app-presets, server -> remote-server, daw-config-reaper -> osc-config-daw, plugin-reaper-realearn -> plugin-reaper-relearn. Updated run.py and presets.py path references accordingly. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+21
@@ -0,0 +1,21 @@
|
||||
= Controller dialog
|
||||
|
||||
[[feature-realearn-customize]]
|
||||
include::partial$available-in-app.adoc[]
|
||||
|
||||
This dialog appears when clicking a controller in xref:user-interface/settings-dialog.adoc#controllers[]. It allows you to configure a xref:key-concepts.adoc#managed-controller[] and define how it should be used.
|
||||
|
||||
image::generated/screenshots/main/controller.png[]
|
||||
|
||||
include::partial$generated/elements/settings/controller/basics.adoc[]
|
||||
|
||||
include::partial$generated/elements/settings/controller/name.adoc[]
|
||||
include::partial$generated/elements/settings/controller/color.adoc[]
|
||||
include::partial$generated/elements/settings/controller/enabled.adoc[]
|
||||
include::partial$generated/elements/settings/controller/connection.adoc[]
|
||||
|
||||
include::partial$generated/elements/settings/controller/usage.adoc[]
|
||||
include::partial$generated/elements/settings/controller/main-preset.adoc[]
|
||||
|
||||
include::partial$generated/elements/settings/controller/advanced.adoc[]
|
||||
include::partial$generated/elements/settings/controller/default-controller-preset.adoc[]
|
||||
@@ -0,0 +1,6 @@
|
||||
= Main panel
|
||||
|
||||
The main panel is what you see immediately when you open the Helgobox plug-in window.
|
||||
|
||||
.Main panel
|
||||
image::realearn/screenshots/main-panel.png[Screenshot]
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
= Bottom section
|
||||
|
||||
image:realearn/screenshots/main-panel-bottom.png[Screenshot]
|
||||
|
||||
== Unit enabled/disabled checkbox
|
||||
|
||||
This checkbox lets you enable or disable the currently displayed unit. You can even do this dynamically by using the xref:targets/realearn/enable-disable-units.adoc[].
|
||||
|
||||
== Unit menu
|
||||
|
||||
Press the button will reveal a menu with the following actions to manage xref:key-concepts.adoc#unit[Units]:
|
||||
|
||||
Remove current unit:: Removes the current unit.
|
||||
This can't be undone!
|
||||
_List of units_:: Switch to an arbitrary unit by clicking on it.
|
||||
Add unit:: Adds a new unit within this instance.
|
||||
The new unit will automatically be named after the randomly-generated unit key.
|
||||
You can change the name by pressing the <<set-unit-data>>.
|
||||
|
||||
== Info area
|
||||
|
||||
In the center you can see the info area, made up of 3 rows:
|
||||
|
||||
Row 1::
|
||||
* The current scroll position.
|
||||
* The xref:helgobox:ROOT:key-concepts.adoc#instance-id[] of this Helgobox xref:helgobox:ROOT:key-concepts.adoc#instance[].
|
||||
* The xref:further-concepts/unit.adoc#unit-key[] of the currently visible ReaLearn xref:key-concepts.adoc#unit[].
|
||||
* xref:further-concepts/unit.adoc#unit-tag[] assigned to this ReaLearn xref:key-concepts.adoc#unit[].
|
||||
|
||||
Row 2::
|
||||
* Information about the current xref:further-concepts/unit.adoc#unit-track[] and xref:further-concepts/unit.adoc#unit-fx[].
|
||||
* Information whether control and/or feedback is currently inactive unit-wide.
|
||||
|
||||
Row 3::
|
||||
* Information about what version of Helgobox is running.
|
||||
|
||||
[[set-unit-data]]
|
||||
== Unit data… button
|
||||
|
||||
Press this button to change various key-value data of this ReaLearn unit as a whole.
|
||||
|
||||
Unit key…:: Allows you to change the xref:further-concepts/unit.adoc#unit-key[] of this xref:key-concepts.adoc#unit[].
|
||||
Unit name:: The display name of this xref:key-concepts.adoc#unit[].
|
||||
Tags:: Lets you assign xref:further-concepts/unit.adoc#unit-tag[] to this xref:key-concepts.adoc#unit[] as a comma-separated list.
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
= Input/output section
|
||||
|
||||
image:realearn/screenshots/main-panel-input-output.png[Screenshot]
|
||||
|
||||
Use this section to connect ReaLearn to a specific controller.
|
||||
|
||||
Also see xref:best-practices.adoc#best-practices-input-output[].
|
||||
|
||||
[#input]
|
||||
== Input menu
|
||||
|
||||
Allows you to select the xref:key-concepts.adoc#input-port[] to which this ReaLearn unit listens.
|
||||
ReaLearn works with MIDI or OSC input.
|
||||
In addition, it can listen to keyboard input.
|
||||
|
||||
[[fx-input]] MIDI: <FX input>::
|
||||
When selected, ReaLearn captures all MIDI events that flow into this ReaLearn VSTi FX instance, for example coming from track MIDI items, track MIDI receives or the track input.
|
||||
This is the default selection.
|
||||
|
||||
MIDI: _Some input device_::
|
||||
When selected, ReaLearn captures events from the given MIDI device directly, before it reaches REAPER's tracks.
|
||||
+
|
||||
This will only work if _Enable input from this device_ is checked for the selected MIDI input device in REAPER's preferences (menu:Options[Settings > MIDI Inputs]).
|
||||
The device name is prefixed with the device ID, which also shows up in the REAPER preferences.
|
||||
|
||||
Unavailable MIDI input devices::
|
||||
This submenu contains MIDI input devices which are currently disconnected or not enabled in the REAPER preferences.
|
||||
|
||||
OSC: _Some device_::
|
||||
When selected, ReaLearn captures events from the given OSC device.
|
||||
Before any device shows up here, you need to add it via <<manage-osc-devices>>.
|
||||
|
||||
Unavailable OSC devices::
|
||||
This submenu contains OSC devices for which control is currently disabled.
|
||||
|
||||
|
||||
[[manage-osc-devices]] Manage OSC devices::
|
||||
Lets you display and modify the list of OSC devices (globally).
|
||||
|
||||
<New>:::
|
||||
Opens a dialog window for adding a new OSC device.
|
||||
See <<osc-device-dialog>>.
|
||||
|
||||
_Some OSC device_:::
|
||||
|
||||
Edit::::
|
||||
Lets you edit the device.
|
||||
See <<osc-device-dialog>>.
|
||||
|
||||
Remove::::
|
||||
Removes the device.
|
||||
This is a global action.
|
||||
If you remove a device, all existing ReaLearn instances which use this device will point to a device that doesn't exist anymore.
|
||||
+
|
||||
CAUTION: This can't be undone!
|
||||
|
||||
Enabled for control:::: If you disable this, ReaLearn will stop listening to this device.
|
||||
This can save resources, so you should do this with each device that is not in use (as an alternative for removing it forever).
|
||||
|
||||
Enabled for feedback:::: If you disable this, ReaLearn won't send anything to this device.
|
||||
|
||||
Can deal with bundles:::: By default, ReaLearn aggregates multiple OSC messages into so-called OSC bundles.
|
||||
Some devices (e.g. from Behringer) can't deal with OSC bundles.
|
||||
Untick the checkbox in this case and ReaLearn will send single OSC messages.
|
||||
|
||||
Stream Deck: <None>::
|
||||
Disables Stream Deck control.
|
||||
|
||||
Stream Deck: _Some device_::
|
||||
When selected, this ReaLearn instance will _additionally_ listen to button presses of the chosen Stream Deck device. See xref:sources/stream-deck.adoc[] for details.
|
||||
+
|
||||
Unlike MIDI or OSC, choosing a Stream Deck device automatically enables feedback to the Stream Deck buttons, so you won't find a Stream Deck entry in the <<output>>.
|
||||
|
||||
_Unavailable Stream Deck devices_::
|
||||
This submenu contains supported Stream Deck devices that are currently not connected.
|
||||
|
||||
[[computer-keyboard]] Computer keyboard::
|
||||
|
||||
If enabled, this ReaLearn instance will _additionally_ listen to key press and release events.
|
||||
|
||||
[#output]
|
||||
== Output menu
|
||||
|
||||
Here you can choose to which xref:key-concepts.adoc#output-port[] ReaLearn should send MIDI/OSC xref:key-concepts.adoc#feedback[].
|
||||
|
||||
<None>::
|
||||
This means, ReaLearn won't send any feedback to MIDI or OSC devices.
|
||||
This is the default.
|
||||
|
||||
[[fx-output]] MIDI: <FX output>::
|
||||
This makes feedback MIDI events stream down to the next FX in the chain or to the track's hardware MIDI output.
|
||||
+
|
||||
CAUTION: Under normal circumstances, it is better to use <<midi-some-output-device, select a specific output device>> instead. See xref:best-practices.adoc#best-practices-input-output[].
|
||||
|
||||
[[midi-some-output-device]] MIDI: _Some output device_::
|
||||
If selected, ReaLearn will send feedback to the given MIDI output device.
|
||||
This only works if _Enable output to this device_ is checked in REAPER's preferences (menu:Options[Settings > MIDI Outputs]).
|
||||
|
||||
OSC: _Some device_::
|
||||
When selected, ReaLearn will send feedback to the given OSC device.
|
||||
Before any device shows up here, you need to add it via <<manage-osc-devices>>.
|
||||
|
||||
Unavailable OSC devices::
|
||||
This submenu contains OSC devices for which feedback is currently disabled.
|
||||
|
||||
Manage OSC devices::
|
||||
See <<manage-osc-devices>> in the input section of the menu.
|
||||
|
||||
[#osc-device-dialog]
|
||||
== OSC device dialog
|
||||
|
||||
The OSC device dialog lets you edit the settings of a ReaLearn OSC device and can be opened via <<manage-osc-devices>>.
|
||||
|
||||
Name:: A descriptive name of the device, e.g. "TouchOSC on my Android phone".
|
||||
|
||||
Local port:: Required for control.
|
||||
The UDP port on which ReaLearn should listen for OSC control messages.
|
||||
+
|
||||
This port must be reserved exclusively for ReaLearn!
|
||||
If you already use this port in another application (e.g. in REAPER's own OSC control surface) it won't work and ReaLearn will bless you with an "unable to connect" message in the "Input" dropdown.
|
||||
|
||||
Device host:: Required for feedback only.
|
||||
It's the IP address of the OSC device to which ReaLearn should send feedback messages.
|
||||
This address is usually displayed on your OSC device (e.g. as "Local IP address").
|
||||
When targeting an OSC software that runs on the same computer as REAPER and ReaLearn, enter the special IP address `127.0.0.1` (or `localhost`).
|
||||
+
|
||||
When you configure your OSC connection on the device side, you must provide a _host_ as well.
|
||||
There you should enter the IP address of the computer which runs REAPER and ReaLearn.
|
||||
You can easily find it by pressing the xref:further-concepts/unit.adoc#projection[] button in ReaLearn, choosing the old browser-based projection and scrolling down a bit.
|
||||
It's the value next to *Host* and should start with `192.168.`.
|
||||
|
||||
Device port:: Required for feedback only.
|
||||
The UDP port on which the OSC device listens for OSC feedback messages.
|
||||
|
||||
All OSC device configurations will be saved in the REAPER resource directory (menu:Options[Show REAPER resource path in explorer/finder]) in the file
|
||||
`Helgoboss/ReaLearn/osc.json`.
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
= Let MIDI through section
|
||||
|
||||
image:realearn/screenshots/main-panel-let-through-checkboxes.png[Screenshot]
|
||||
|
||||
See xref:further-concepts/unit.adoc#letting-through-events[].
|
||||
|
||||
Matched events:: If checked, even MIDI events matched by at least one mapping are let through.
|
||||
If unchecked (default), such events are filtered out.
|
||||
|
||||
Unmatched events:: If checked (default), MIDI events that are not matched by any mappings are let through.
|
||||
If unchecked, such events are filtered out.
|
||||
|
||||
Check out xref:user-interface/main-panel/menu-bar.adoc#match-even-inactive-mappings[] to fine-tune matching behavior.
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
= Mapping group section
|
||||
|
||||
image:realearn/screenshots/main-panel-group.png[Screenshot]
|
||||
|
||||
[[mapping-group]]
|
||||
== Group menu
|
||||
|
||||
See xref:further-concepts/mapping.adoc#group[].
|
||||
|
||||
The group menu contains the following options:
|
||||
|
||||
<All>:: Displays all mappings in the compartment, no matter to which group they belong.
|
||||
In this view, you will see the name of the group on the right side of a mapping row.
|
||||
|
||||
<Default>:: Displays mappings that belong to the _default_ group.
|
||||
This is where mappings end up if you don't care about grouping.
|
||||
This is a special group that can't be removed.
|
||||
|
||||
_Custom group_::
|
||||
Displays all mappings in your custom group.
|
||||
|
||||
== Add button
|
||||
|
||||
Allows you to add a group and give it a specific name.
|
||||
|
||||
== Remove button
|
||||
|
||||
Removes the currently displayed group.
|
||||
It will ask you if you want to remove all the mappings in that group as well.
|
||||
Alternatively they will automatically be moved to the default group.
|
||||
|
||||
== Edit button
|
||||
|
||||
Opens the group panel, which allows you to change xref:further-concepts/target.adoc#group-properties[].
|
||||
|
||||
image:realearn/screenshots/group-panel.png[Group panel]
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
|
||||
= Mapping row
|
||||
|
||||
image:realearn/screenshots/main-panel-mapping-row.png[Screenshot]
|
||||
|
||||
Each mapping row represents one ReaLearn mapping.
|
||||
|
||||
The mapping, source and target labels of a mapping row are greyed out whenever the mapping is _off_.
|
||||
See xref:key-concepts.adoc#mapping[].
|
||||
|
||||
== Mapping-enabled checkbox
|
||||
|
||||
This checkbox at the top left of the mapping row enables or disables the mapping as a whole.
|
||||
|
||||
== Activity indicator (●)
|
||||
|
||||
This indicator at the very left of the mapping row lights up on incoming control messages whenever they match the mapping source.
|
||||
|
||||
Attention: This doesn't necessarily mean that the message will reach the target, although it often does.
|
||||
There are certain settings in the xref:user-interface/mapping-panel/glue-section.adoc[] section which allow you to filter messages even they matched the source (e.g. xref:user-interface/mapping-panel/glue-section.adoc#source-min-max[]).
|
||||
|
||||
== Up/down buttons
|
||||
|
||||
Use these buttons to move this mapping up or down the list.
|
||||
|
||||
== Control/feedback-enabled checkboxes (→/←)
|
||||
|
||||
Use these checkboxes to enable/disable control and/or feedback for this mapping.
|
||||
Disabling both has the same effect as disabling the mapping as a whole.
|
||||
|
||||
[[row-edit]]
|
||||
== Edit button
|
||||
|
||||
Opens the mapping panel for this mapping.
|
||||
|
||||
== Duplicate button
|
||||
|
||||
Creates a new mapping just like this one right below.
|
||||
|
||||
== Remove button
|
||||
|
||||
Removes this mapping from the list.
|
||||
|
||||
[[learn-source]]
|
||||
== Learn source button
|
||||
|
||||
Starts or stops learning the source of this mapping.
|
||||
See xref:key-concepts.adoc#learn-source[].
|
||||
|
||||
[[learn-target]]
|
||||
== Learn target button
|
||||
|
||||
Starts or stops learning the target of this mapping.
|
||||
|
||||
Learning a target that is currently being automated is not possible at the moment because ReaLearn can't know if the value change notification is coming from the automation or your touch interaction.
|
||||
|
||||
== Right-click menu
|
||||
|
||||
Each mapping row provides a right-click menu for accessing the following functions:
|
||||
|
||||
Copy:: Copies this mapping to the clipboard.
|
||||
Paste (replace):: Replaces this mapping with the mapping in the clipboard.
|
||||
If the clipboard contains just a part of a mapping (source, mode or target), then just this part gets replaced.
|
||||
Paste (insert below):: Creates a new mapping that's like the mapping in the clipboard and places it below this mapping.
|
||||
Copy part:: Copies just a part of the mapping (activation condition, source, mode or target).
|
||||
Move to group:: Lets you move this mapping to another mapping group.
|
||||
Advanced:: Provides access to expert features.
|
||||
Copy as Lua::: Copies this mapping as Lua/Luau code.
|
||||
This is an indispensable tool if you want to build your mappings in Luau because it gives you a readily executable code snippet that you can adjust as desired.
|
||||
Copy as Lua (include default values)::: Includes even default values.
|
||||
Paste from Lua (replaces)::: Like _Paste (replace)_ but treats the clipboard content as Luau code.
|
||||
Paste from Lua (insert below)::: Like _Paste (insert below)_ but treats the clipboard content as Luau code.
|
||||
Log debug info (now)::: Logs debug information about this particular mapping.
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
|
||||
= Mappings toolbar
|
||||
|
||||
image:realearn/screenshots/main-panel-mapping-toolbar.png[Screenshot]
|
||||
|
||||
[[add-one]]
|
||||
== Add one button
|
||||
|
||||
Adds a new mapping at the end of the current mapping list.
|
||||
|
||||
[[learn-many]]
|
||||
== Learn many button
|
||||
|
||||
Allows you to add and learn many new mappings in a convenient batch mode.
|
||||
Click this button and follow the on-screen instructions.
|
||||
Click _Stop_ when you are finished with your bulk learning strike.
|
||||
|
||||
[#search]
|
||||
== Search field
|
||||
|
||||
Enter text here in order to display just mappings whose name matches the text.
|
||||
|
||||
You can search for mappings that have a certain tag by entering the tag name prefixed with the hash character `#`.
|
||||
For example, you can search for all mappings tagged with the tag `mixing` by entering `#mixing`.
|
||||
|
||||
The search expression also supports wildcards `\*` and `?` for doing blurry searches. `*` stands for zero or more arbitrary characters and `?` stands for one arbitrary character.
|
||||
|
||||
[[filter-source]]
|
||||
== Filter source button
|
||||
|
||||
When you press this button, ReaLearn will start listening to incoming MIDI/OSC events and temporarily disable all target control.
|
||||
You can play around freely on your controller without having to worry about messing up target parameters.
|
||||
Whenever ReaLearn detects a valid source, it will filter the mapping list by showing only mappings which have that source.
|
||||
|
||||
This is a great way to find out what a specific knob/fader/button etc. is mapped to.
|
||||
Please note that the list can end up empty (if no mapping has that source).
|
||||
|
||||
As soon as you press btn:[Stop], the current filter setting will get locked.
|
||||
This in turn is useful for temporarily focusing on mappings with a particular source.
|
||||
|
||||
When you are done, and you want to see all mappings again, press the btn:[X]
|
||||
button to the right, which clears the filter.
|
||||
|
||||
TIP: Before you freak out thinking that ReaLearn doesn't work anymore because it won't let you control targets, have a quick look at this button.
|
||||
ReaLearn might still be in "filter source" mode.
|
||||
Then just calm down and press btn:[Stop].
|
||||
It's easy to forget.
|
||||
|
||||
[[filter-target]]
|
||||
== Filter target button
|
||||
|
||||
If you want to find out what mappings exist for a particular target, press this button and touch something in REAPER.
|
||||
|
||||
As soon as you have touched a valid target, the list will show all mappings with that target.
|
||||
|
||||
Unlike <<filter-source>>, ReaLearn will automatically stop learning as soon as a target was touched.
|
||||
|
||||
Press the btn:[X] button to clear the filter and show all mappings again.
|
||||
|
||||
The mapping rows area consists of multiple mapping rows.
|
||||
One for each mapping.
|
||||
+301
@@ -0,0 +1,301 @@
|
||||
= Menu bar
|
||||
|
||||
image:realearn/screenshots/main-panel-menu-bar.png[Screenshot]
|
||||
|
||||
== Menu button
|
||||
|
||||
This opens the main menu of Helgobox/ReaLearn.
|
||||
The same menu opens when you right-click an empty area.
|
||||
|
||||
It provides the following entries.
|
||||
|
||||
[[copy-listed-mappings]] Copy listed mappings::
|
||||
Copies all mappings that are visible in the current mapping list (respecting group, search field and filters) to the clipboard.
|
||||
You can insert them by opening the right-click menu of a xref:user-interface/main-panel/mapping-row.adoc[].
|
||||
|
||||
[[paste-mappings-replace-all-in-group]] Paste mappings (replace all in group)::
|
||||
Replaces all mappings in the current group with the mappings in the clipboard.
|
||||
|
||||
Modify multiple mappings::
|
||||
|
||||
Auto-name listed mappings:::
|
||||
Clears the names of all listed mappings.
|
||||
As a result, ReaLearn will display dynamically auto-generated mapping names instead.
|
||||
|
||||
Name listed mappings after source:::
|
||||
Sets the names of each listed mapping to the first line of its source label.
|
||||
|
||||
Make sources of all main mappings virtual:::
|
||||
Attempts to make the sources in the main compartment virtual by matching them with the sources in the controller compartment.
|
||||
This is useful if you already learned a bunch of MIDI/OSC/keyboard sources in the main compartment, just to find out later that you would like to use a controller preset that exposes virtual sources.
|
||||
|
||||
Make targets of listed mappings sticky:::
|
||||
Changes the targets of all currently listed mappings so that they use xref:further-concepts/target.adoc#sticky-selectors[] object selectors by attempting to resolve the objects from xref:further-concepts/target.adoc#non-sticky-selectors[].
|
||||
|
||||
Make targets of listed mappings non-sticky:::
|
||||
Changes the targets of all currently listed mappings so that they use the desired xref:further-concepts/target.adoc#non-sticky-selectors[].
|
||||
You can see this in action in link:https://www.youtube.com/watch?v=kebF_NKAweA&list=PL0bFMT0iEtAgKY2BUSyjEO1I4s20lZa5G&index=9[tutorial video 9].
|
||||
+
|
||||
The general procedure is:
|
||||
+
|
||||
1. Choose the desired track selector
|
||||
2. Choose the desired FX selector
|
||||
3. ReaLearn will change the selectors for all targets where this is applicable
|
||||
|
||||
Move listed mappings to group::
|
||||
Moves all currently listed mappings to the specified group.
|
||||
|
||||
Advanced::
|
||||
Provides access to expert features.
|
||||
|
||||
Copy listed mappings as Lua:::
|
||||
Like <<copy-listed-mappings>> but generates Lua/Luau code instead.
|
||||
|
||||
Copy listed mappings as Lua (include default values):::
|
||||
Generates Lua/Luau code that contains even those properties that correspond to ReaLearn's defaults.
|
||||
|
||||
Paste from Lua (replace all in group):::
|
||||
Like <<paste-mappings-replace-all-in-group>> but treats the clipboard content as Luau code.
|
||||
|
||||
[[dry-run-lua-script]] Dry-run Lua script from clipboard:::
|
||||
Executes the Luau code in the clipboard and opens the returned data structure in a link:https://en.wikipedia.org/wiki/Text_editor[text editor].
|
||||
See xref:best-practices.adoc#troubleshooting-luau-import[] to learn in which situations this can be useful.
|
||||
|
||||
[[compartment-parameters,Compartment parameters menu]] Compartment parameters::
|
||||
This shows all parameters of the current compartment and makes it possible to customize them.
|
||||
See xref:further-concepts/compartment.adoc#compartment-parameter[] to learn what such parameters are good for.
|
||||
+
|
||||
Each parameter provides the following customization options:
|
||||
|
||||
Name:::
|
||||
Changes the name of this parameter.
|
||||
|
||||
[[set-compartment-parameter-value-count]]Value count:::
|
||||
Lets you enter the maximum number of values.
|
||||
This automatically turn this parameter into a discrete parameter.
|
||||
See xref:further-concepts/compartment.adoc#continuous-vs-discrete-compartment-parameters[].
|
||||
|
||||
Compartment presets::
|
||||
|
||||
Create compartment preset workspace:::
|
||||
Exports the Luau SDK files of this ReaLearn version into a new compartment preset workspace directory with a random name.
|
||||
See section xref:further-concepts/compartment.adoc#writing-presets-with-luau[] for details.
|
||||
|
||||
Create compartment preset workspace (including factory presets):::
|
||||
Exports the Luau SDK files of this ReaLearn version and all factory presets for this compartment into a new compartment preset workspace directory with a random name.
|
||||
See section xref:further-concepts/compartment.adoc#writing-presets-with-luau[] for details.
|
||||
|
||||
Open compartment preset folder:::
|
||||
Opens the ReaLearn preset folder for this compartment in a file manager.
|
||||
|
||||
[[reload-all-presets]] Reload all compartment presets from disk:::
|
||||
If you made direct changes to preset files, you should choose this entry in order to reflect these changes in the preset list of this xref:key-concepts.adoc#compartment[].
|
||||
+
|
||||
This *will not* apply an adjusted preset to the current compartment, it will just reload the list.
|
||||
If you want to apply a preset that has been changed on disk, you need to reload it by selecting it in the preset menu once again!
|
||||
|
||||
Compartment tools::
|
||||
|
||||
Convert toolbar to Stream Deck mappings:::
|
||||
This takes a toolbar of your choice and converts it to a list of mappings that will project the toolbar on your Stream Deck via xref::sources/stream-deck.adoc[].
|
||||
+
|
||||
This feature is experimental and subject to improvement.
|
||||
+
|
||||
NOTE: It will work best with custom toolbars that use non-default icons.
|
||||
Many of the default toolbar icons are not in the `Data/toolbar_icons` folder and therefore can't yet be loaded by ReaLearn.
|
||||
However, in this case, you will see a descriptive text instead.
|
||||
|
||||
|
||||
[[edit-compartment-wide-lua-code]] Edit compartment-wide Lua code::
|
||||
Allows you to edit the compartment-wide Lua code.
|
||||
See section xref:further-concepts/compartment.adoc#compartment-wide-lua-code[].
|
||||
|
||||
[[unit-options]] Unit options::
|
||||
|
||||
[[match-even-inactive-mappings]] Match even inactive mappings:::
|
||||
By default, when encountering an incoming MIDI or keyboard event that matches at least one mapping, ReaLearn filters it out so that it doesn't reach other parts of REAPER anymore. Normally, xref:further-concepts/mapping.adoc#mapping-activation-state[inactive] mappings are not relevant here. Inactive mappings never match.
|
||||
+
|
||||
Consider a mapping with a xref:targets/track.adoc[track target], for example. As long as the corresponding track exists, the target and its mapping are active. Each incoming MIDI event which triggers that target will be filtered out. But as soon as you remove that track, the target and its mapping turn inactive. Consequently, the same type of MIDI events will not be filtered out anymore.
|
||||
+
|
||||
This behavior can be undesired. To get a more predictable MIDI and keyboard filtering behavior, you can enable this checkbox. If you do that, even inactive mappings will participate in matching. That way, temporarily inactive mappings will not let unwanted events "leak through".
|
||||
|
||||
[[send-feedback-only-if-track-armed]] Send feedback only if track armed:::
|
||||
Here you can tell ReaLearn to only send feedback when the track is armed.
|
||||
+
|
||||
At the moment, this can only be unchecked if ReaLearn is on the normal FX chain.
|
||||
If it's on the input FX chain, unarming forcefully disables feedback because REAPER generally excludes input FX from audio/MIDI processing while a track is unarmed (this is subject to change in the future).
|
||||
+
|
||||
[TIP]
|
||||
.Recommendations
|
||||
====
|
||||
* If input is set to xref:user-interface/main-panel/input-output-section.adoc#fx-input[], you probably want to enable this option.
|
||||
Rationale: Unarming will naturally disable control, so disabling feedback is just consequent.
|
||||
* If input is set to a specific MIDI or OSC device, you probably want to disable this option in order to allow feedback even when unarmed.
|
||||
====
|
||||
|
||||
Reset feedback when releasing source:::
|
||||
When using ReaLearn the normal way, it's usually desired that feedback is reset when the corresponding sources are not in use anymore (e.g. lights are switched off, displays are cleared, motor faders are pulled down).
|
||||
+
|
||||
You can prevent this unit from doing that by disabling this option.
|
||||
This can be useful e.g. when using REAPER/ReaLearn just in feedback direction, in order to take control of a hardware device (= using ReaLearn the other way around, "controlling from target to source").
|
||||
|
||||
[[make-unit-superior]] Make unit superior:::
|
||||
Makes this unit superior.
|
||||
See xref:further-concepts/unit.adoc#superior-units[] to learn more about this feature.
|
||||
|
||||
Use unit-wide FX-to-preset links only:::
|
||||
By default, xref:further-concepts/unit.adoc#unit-fx-to-preset-link[unit-wide links] are applied *in addition* to the global links and take precedence over them.
|
||||
This checkbox makes sure that *only* unit-wide links are used for this xref:key-concepts.adoc#unit[].
|
||||
|
||||
Stay active when project in background:::
|
||||
Determines if and under which conditions this ReaLearn unit should stay active when the containing project tab is not the active one.
|
||||
Applies to in-project ReaLearn instances only, not to monitoring FX instances!
|
||||
|
||||
Never::::
|
||||
Will only be active when its project tab is active.
|
||||
Only if background project is running::::
|
||||
Follows REAPER's project tab settings ("Run background projects" and "Run stopped background projects").
|
||||
Always (more or less)::::
|
||||
Attempts to stay active no matter what.
|
||||
Please note that this is technically not always possible when input is set to xref:user-interface/main-panel/input-output-section.adoc#fx-input[] or output to xref:user-interface/main-panel/input-output-section.adoc#fx-output[], when the background project is not running.
|
||||
|
||||
[[unit-fx-to-preset-links]] Unit-wide FX-to-preset links::
|
||||
Manage a unit-wide list of links from FXs (plug-ins or JS effects) to ReaLearn main compartment presets.
|
||||
Covered in link:https://www.youtube.com/watch?v=HtmWO7QNpgE&list=PL0bFMT0iEtAgKY2BUSyjEO1I4s20lZa5G&index=10[video tutorial 10].
|
||||
|
||||
Add link from last focused FX to preset:::
|
||||
This lets you link whatever FX window was focused before focusing ReaLearn, to an arbitrary main compartment preset.
|
||||
This only works if an FX has been focused before.
|
||||
|
||||
_Arbitrary FX ID_:::
|
||||
If you have added a link already, you will see it here in the list.
|
||||
In particular, you see the _FX ID_, which by default simply corresponds to the plug-in's original name (e.g. menu:Name: VSTi: ReaSynth (Cockos)[]).
|
||||
|
||||
[[edit-fx-id]] <Edit FX ID…>::::
|
||||
With this, you can edit the FX ID manually.
|
||||
See <<fx-id-dialog>> for details.
|
||||
|
||||
<Remove link>::::
|
||||
(Globally) removes this FX-to-preset link.
|
||||
|
||||
_Arbitrary main preset_::::
|
||||
The rest of the submenu tells you to which main preset the FX ID is linked.
|
||||
You can change the linked preset by choosing another one in the list.
|
||||
|
||||
[[logging,Logging Menu]] Logging::
|
||||
|
||||
Log debug info (now)::: Logs some information about ReaLearn's internal state.
|
||||
Can be interesting for investigating bugs or understanding how this plug-in works.
|
||||
Log real control messages::: When enabled, all incoming MIDI messages, OSC messages or key presses will be logged to the console.
|
||||
See xref:further-concepts/unit.adoc#logging-of-real-control-messages[].
|
||||
Log virtual control messages::: When enabled, all triggered virtual control elements and their values will be logged (see xref:key-concepts.adoc#controller-compartment[]).
|
||||
Log target control::: When enabled, all target invocations (parameter changes etc.) will be logged.
|
||||
Log virtual feedback messages::: When enabled, all feedback events to virtual control elements will be logged (see xref:key-concepts.adoc#controller-compartment[]).
|
||||
Log real feedback messages::: When enabled, all outgoing MIDI or OSC messages will be logged to the console.
|
||||
See xref:further-concepts/unit.adoc#logging-of-real-feedback-messages[].
|
||||
|
||||
Send feedback now::
|
||||
Usually ReaLearn sends feedback whenever something changed to keep the LEDs or motorized faders of your controller in sync with REAPER at all times.
|
||||
There might be situations where it doesn't work though.
|
||||
In this case you can send feedback manually for this xref:key-concepts.adoc#unit[] by selecting this menu entry.
|
||||
+
|
||||
There's a related REAPER action xref:reaper-actions.adoc#send-feedback-for-all-instances[] which sends feedback for all instances.
|
||||
|
||||
Instance options::
|
||||
|
||||
[[enable-global-control]] Enable global control:::
|
||||
If you enable this option, this xref:key-concepts.adoc#instance[] will start to automatically add/remove units based on connected controllers.
|
||||
See xref:further-concepts/instance.adoc#auto-units[].
|
||||
|
||||
[[open-pot-browser]] Open Pot Browser::
|
||||
See xref:helgobox::plug-in/user-interface/menu-bar.adoc#open-pot-browser[].
|
||||
|
||||
Show App::
|
||||
See xref:helgobox::plug-in/user-interface/menu-bar.adoc#show-app[].
|
||||
|
||||
Close App::
|
||||
See xref:helgobox::plug-in/user-interface/menu-bar.adoc#close-app[].
|
||||
|
||||
User interface::
|
||||
|
||||
Background colors:::
|
||||
Enables/disables the usage of background colors in the ReaLearn user interface (enabled by default).
|
||||
|
||||
Server::
|
||||
See xref:helgobox::plug-in/user-interface/menu-bar.adoc#server[].
|
||||
|
||||
[[global-fx-to-preset-links]] Global FX-to-preset links::
|
||||
Lets you manage xref:further-concepts/unit.adoc#global-fx-to-preset-link[global FX-to-preset links].
|
||||
Works exactly as the <<unit-fx-to-preset-links>> menu.
|
||||
|
||||
[[fx-id-dialog]]
|
||||
== FX ID dialog
|
||||
|
||||
The FX ID dialog is used to edit which properties of a FX trigger a preset change.
|
||||
It is opened via menu action <<edit-fx-id>>.
|
||||
|
||||
FX name::
|
||||
Allows you to adjust the (original) plug-in name that triggers the preset change.
|
||||
|
||||
FX file name::
|
||||
Allows you to adjust the plug-in file name that triggers the preset change.
|
||||
|
||||
FX preset name::
|
||||
Maybe the FX name or file name is not enough for you to decide which preset you want to load.
|
||||
You can add a preset name as additional criteria.
|
||||
+
|
||||
.Samplers
|
||||
====
|
||||
If you have a sampler, you can load different ReaLearn presets depending on which sample library is loaded into your sampler.
|
||||
Just add two links with the same FX file name (e.g. `Kontakt 5.dll`) but different preset names.
|
||||
====
|
||||
|
||||
All above-mentioned fields support wildcards.
|
||||
You can use `*` for matching zero or arbitrary many characters and `?` for matching exactly one arbitrary character.
|
||||
|
||||
.Matching both VST2 and VST3 plug-ins
|
||||
====
|
||||
Instead of relying on the original plug-in name you could match plug-ins with similar file names (e.g. VST2 and VST3 at once): `Pianoteq 7 STAGE.*` would match both `Pianoteq 7 STAGE.dll` (VST2) and `Pianoteq 7 STAGE.vst3` (VST3).
|
||||
====
|
||||
|
||||
[[export-to-clipboard-button]]
|
||||
== Export to clipboard button
|
||||
|
||||
Pressing the export button allows you to copy ReaLearn's settings to the clipboard so you can import them in another instance/unit or edit them in a link:https://en.wikipedia.org/wiki/Text_editor[text editor].
|
||||
See xref:further-concepts/general.adoc#import-export[].
|
||||
|
||||
The following list only describes the ReaLearn-related menu entries. For the rest, see xref:helgobox::plug-in/user-interface/menu-bar.adoc#export-to-clipboard[] in the Helgobox Reference.
|
||||
|
||||
Export instance as JSON::
|
||||
Copies a _complete_ dump of this xref:helgobox:ROOT:key-concepts.adoc#instance[] to the clipboard in JSON format.
|
||||
|
||||
Export main/controller compartment as JSON::
|
||||
Copies a dump of the currently visible compartment to the clipboard.
|
||||
It contains about the same data that a compartment preset would contain.
|
||||
|
||||
Export main/controller compartment as Lua::
|
||||
Copies a dump of the currently visible compartment to the clipboard as Lua/Luau code.
|
||||
This form of Lua/Luau export skips properties that correspond to ReaLearn's default values, resulting in a minimal result.
|
||||
Perfect for pasting into a forum or programming ReaLearn with focus on only those properties that matter to you.
|
||||
|
||||
Export main/controller compartment as Lua (include default values)::
|
||||
This Lua/Luau export includes even those properties that correspond to ReaLearn's default values, resulting in more text.
|
||||
This gives you the perfect starting point if you want to extensively modify the current compartment (using the Luau programming language) or build a compartment from scratch, using even properties that you haven't touched yet in the user interface!
|
||||
|
||||
[[import-from-clipboard]]
|
||||
== Import from clipboard button
|
||||
|
||||
Pressing the import button applies whatever ReaLearn dump is currently in the clipboard.
|
||||
It supports JSON or Luau.
|
||||
See xref:further-concepts/general.adoc#import-export[].
|
||||
|
||||
[#projection]
|
||||
== Projection button
|
||||
|
||||
Click this button to enter ReaLearn's xref:further-concepts/unit.adoc#projection[] feature.
|
||||
You can choose between the old browser-based projection (which is going to disappear at some point) and the new projection that is part of the xref:helgobox::app.adoc[] (but not yet fully functional).
|
||||
Hopefully, the transition to the Helgobox App, including mobile versions of that App, will soon be finished.
|
||||
|
||||
== Help button (?)
|
||||
|
||||
See xref:helgobox::plug-in/user-interface/menu-bar.adoc#help[].
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
|
||||
= Notes button
|
||||
|
||||
image:realearn/screenshots/main-panel-notes-button.png[Screenshot]
|
||||
|
||||
Allows you to save custom notes/comments for the current compartment.
|
||||
These notes are also included in compartment presets.
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
= Preset section
|
||||
|
||||
image:realearn/screenshots/main-panel-preset.png[Screenshot]
|
||||
|
||||
== Preset menu
|
||||
|
||||
This menu makes it possible to load compartment presets for the currently shown compartment.
|
||||
If you select a preset in this list, its corresponding mappings will be loaded and immediately get active.
|
||||
|
||||
The following menu entries are available:
|
||||
|
||||
[[none-preset]] <None>::
|
||||
This entry is selected by default.
|
||||
It means that no particular preset is active.
|
||||
+
|
||||
Selecting this will always clear the complete compartment, including all mappings!
|
||||
|
||||
Factory:: Contains available xref:further-concepts/compartment.adoc#factory-compartment-preset[factory presets].
|
||||
|
||||
User (...):: Contains available xref:further-concepts/compartment.adoc#user-compartment-preset[user presets].
|
||||
Multiple of such submenus may exist.
|
||||
Each one represents a different preset namespace/workspace.
|
||||
The namespace named after you (macOS/Linux/Windows username) is your personal user namespace.
|
||||
+
|
||||
For more information about preset workspaces/namespaces, see
|
||||
xref:further-concepts/compartment.adoc#writing-presets-with-luau[].
|
||||
|
||||
User (Unsorted)::
|
||||
This submenu contains top-level presets which are not part of a particular preset namespace/workspace.
|
||||
This was common in older versions of ReaLearn, when namespaces/workspaces were not yet available.
|
||||
|
||||
== Save button
|
||||
|
||||
If you made changes to a user preset, you can save them by pressing this button.
|
||||
|
||||
== Save as… button
|
||||
|
||||
This allows you to save all currently visible mappings as a new preset.
|
||||
Please choose a descriptive name.
|
||||
|
||||
== Delete button
|
||||
|
||||
This permanently deletes the currently chosen user preset.
|
||||
|
||||
== Auto-load button
|
||||
|
||||
Activates or deactivates xref:further-concepts/unit.adoc#auto-load[] mode for this ReaLearn unit.
|
||||
This button is only available for the xref:key-concepts.adoc#main-compartment[] because auto-load is only about loading xref:further-concepts/compartment.adoc#main-preset[main presets].
|
||||
|
||||
Off:: Disables auto-load mode (the default).
|
||||
|
||||
[[auto-load-based-on-unit-fx,Auto-load based on unit FX]] Based on unit FX::
|
||||
Switches auto-load mode on, letting ReaLearn decide about which main preset to load depending on the currently active xref:further-concepts/unit.adoc#unit-fx[].
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
= Show section
|
||||
|
||||
image:realearn/screenshots/main-panel-show-buttons.png[Screenshot]
|
||||
|
||||
This lets you choose which mapping compartment is displayed.
|
||||
See xref:key-concepts.adoc#compartment[].
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
= Mapping panel
|
||||
|
||||
When you press the btn:[Edit] button of a mapping row, the _mapping panel_ appears, which lets you look at the corresponding mapping in detail and modify it.
|
||||
|
||||
.Mapping panel
|
||||
image::realearn/screenshots/mapping-panel.png[Screenshot]
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
= Advanced settings dialog
|
||||
|
||||
[[advanced-settings-dialog]]
|
||||
CAUTION: Expert level!
|
||||
|
||||
This dialog allows access to advanced configuration by entering text in the https://en.wikipedia.org/wiki/YAML[YAML] configuration language.
|
||||
It can be opened using the xref:user-interface/mapping-panel/top-section.adoc#advanced-settings[] of the mapping panel.
|
||||
|
||||
== The YAML language
|
||||
|
||||
This is not a programming language, so you can't write loops, conditions or anything like that.
|
||||
Instead, think of it as a language for writing configuration.
|
||||
Do you know INI files?
|
||||
REAPER uses INI files to save configuration.
|
||||
YAML is a bit like that, just much more expressive because it allows you to not only express flat key-value pairs (e.g. `edit_fontsize=29`) but also deeply nested configuration data and lists.
|
||||
|
||||
[IMPORTANT]
|
||||
.YAML is indentation-sensitive
|
||||
====
|
||||
Indentation matters!
|
||||
The bright side of this is that it always looks clean.
|
||||
The dark side is that ReaLearn will refuse to save your settings if you messed up the indentation.
|
||||
|
||||
Therefore: Be consistent with your indentation (e.g. use always an indentation of 2 spaces for nesting) and have an utmost attention to detail when doing copy and paste from the examples in this section!
|
||||
====
|
||||
|
||||
[IMPORTANT]
|
||||
.Verbatim text is not saved
|
||||
====
|
||||
When you close the text editor and ReaLearn saves your advanced settings as part of the mapping, it will not save the text that you have entered _verbatim_.
|
||||
It will save a structural representation of what you entered.
|
||||
Plus, it will strip comments!.
|
||||
That means if you open the advanced settings again, your text could look a bit different, in particular it can have a different formatting.
|
||||
But don't worry, it _means_ exactly the same to ReaLearn.
|
||||
====
|
||||
|
||||
== Supported configuration properties
|
||||
|
||||
In this section you will find examples that cover all currently supported configuration properties.
|
||||
You can copy and paste the stuff you need to the link:https://en.wikipedia.org/wiki/Text_editor[text editor], remove the parts that you don't need and adjust the rest.
|
||||
Comments (lines starting with `#`) will be removed automatically.
|
||||
|
||||
[#mapping-lifecycle-actions]
|
||||
=== Mapping lifecycle actions
|
||||
|
||||
ReaLearn allows you to define MIDI messages to be sent to the output whenever a mapping turns active or inactive.
|
||||
See xref:further-concepts/mapping.adoc#mapping-activation-state[].
|
||||
|
||||
Example use cases:
|
||||
|
||||
* Accessing device-specific features via system-exclusive MIDI messages.
|
||||
* Choosing a different LED color/style depending on the active mapping.
|
||||
* Initializing a sys-ex-controllable display with some mapping-specific text (more difficult).
|
||||
|
||||
These are the available configuration properties:
|
||||
|
||||
[source,yaml]
|
||||
----
|
||||
# Contains stuff to be done whenever this mapping becomes active.
|
||||
on_activate:
|
||||
# A list of MIDI messages to be sent to the output when this mapping becomes active.
|
||||
#
|
||||
# At the moment, only messages of type "raw" are supported. Although this covers all possible types
|
||||
# of MIDI messages, it's a bit hard to express e.g. simple NOTE ON or CC messages with this notation.
|
||||
# In particular, you would need to know how MIDI messages are presented as byte sequences. Future ReaLearn
|
||||
# versions will provide more convenient ways to describe simple MIDI messages.
|
||||
send_midi_feedback:
|
||||
# This is an example of a system-exclusive message ("SysEx"). It's usually expressed in hexadecimal string
|
||||
# notation. Make sure to include the leading F0 and trailing F7, which is the begin and end marker of all
|
||||
# system-exclusive messages!
|
||||
- raw: F0 00 20 6B 7F 42 02 00 10 77 01 F7
|
||||
# Instead of above hexadecimal string notation, you could also use an array of decimal numbers to describe a raw
|
||||
# message. The following is a NOTE ON of note 74 on channel 1 with velocity 100.
|
||||
- raw:
|
||||
# NOTE ON on channel 1
|
||||
- 144
|
||||
# Note number 74
|
||||
- 74
|
||||
# Note velocity 100
|
||||
- 100
|
||||
|
||||
# Contains stuff to be done whenever this mapping becomes inactive.
|
||||
on_deactivate:
|
||||
# A list of MIDI messages to be sent to the output when this mapping becomes inactive.
|
||||
send_midi_feedback:
|
||||
# Supports exactly the same kinds of messages as described above in "on_activate".
|
||||
- raw: F0 00 20 6B 7F 42 02 00 10 77 14 F7
|
||||
----
|
||||
|
||||
Please remember that YAML comments (e.g. `# The following line does this and that`) _will not be saved_!
|
||||
In case you want to explain something, you need to write it as YAML property, such as in the following example:
|
||||
|
||||
[source,yaml]
|
||||
----
|
||||
comment: "The following configuration makes the rightmost pad of the MiniLab mkII light up in red color."
|
||||
on_activate:
|
||||
send_midi_feedback:
|
||||
- raw: F0 00 20 6B 7F 42 02 00 10 77 01 F7
|
||||
----
|
||||
|
||||
ReaLearn will ignore any unknown properties.
|
||||
|
||||
TIP: If you use input xref:user-interface/main-panel/input-output-section.adoc#fx-input[] and find that MIDI lifecycle messages aren't sent, no matter what, make sure "Send feedback only if track armed" is disabled (see xref:user-interface/main-panel/menu-bar.adoc#unit-options[])!
|
||||
|
||||
WARNING: Disabling the complete ReaLearn instance will cause all mappings in all units of that instance to deactivate.
|
||||
However, sending MIDI messages on deactivation in this case will only work if the output is a device!
|
||||
If it is xref:user-interface/main-panel/input-output-section.adoc#fx-output[], it will not send anything because REAPER will not give that ReaLearn instance any chance to output MIDI messages once it's disabled.
|
||||
Instead, the MIDI message will queue up and be sent once you enable that instance again ... which is probably not what you want.
|
||||
|
||||
== Open in text editor button (Windows and Linux only)
|
||||
|
||||
Opens the settings in the system link:https://en.wikipedia.org/wiki/Text_editor[text editor] or whatever program is associated with YAML files.
|
||||
It depends on your system setup if this works or not.
|
||||
If it does and if your link:https://en.wikipedia.org/wiki/Text_editor[text editor] is good, this can make editing larger YAML snippets more convenient (e.g. by providing syntax highlighting).
|
||||
|
||||
As soon as you save the file and close the editor, the text will automatically appear in the "Advanced settings" text area.
|
||||
|
||||
== Help button
|
||||
|
||||
Will open an online version of the user guide section that describes the available configuration properties.
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
= Bottom section
|
||||
|
||||
image:realearn/screenshots/mapping-panel-bottom.png[Screenshot]
|
||||
|
||||
The section at the bottom has the following functions:
|
||||
|
||||
- To provide context-sensitive help for the glue section
|
||||
- To provide control information, feedback information and error reporting
|
||||
- To provide navigation and general mapping control
|
||||
|
||||
== Help
|
||||
|
||||
Context-sensitive help for the glue section.
|
||||
Whenever you touch a setting in the glue section, some text will appear which explains what this element does, both for the _control_ and for the
|
||||
_feedback_ direction (if applicable).
|
||||
|
||||
== Activity info area
|
||||
|
||||
The left text area shows information about how an incoming control value was handled and possible target control errors.
|
||||
|
||||
NOTE: If the target supports MIDI real-time control and the source is a MIDI source, this currently only works if "Log target control" is enabled (see xref:user-interface/main-panel/menu-bar.adoc#logging[]).
|
||||
|
||||
The right text area shows information about which feedback values are sent from the glue section to the source.
|
||||
|
||||
[#beep-on-success]
|
||||
== Beep on success checkbox
|
||||
|
||||
Makes the mapping play a sound whenever the target has been invoked successfully.
|
||||
Nice for trigger-like targets such as xref:targets/realearn/take-mapping-snapshot.adoc[] for which there's no other good way to know if it worked.
|
||||
|
||||
[#previous]
|
||||
== Previous button
|
||||
|
||||
Allows you to jump to the previous mapping.
|
||||
Considers only mappings that are currently visible in the mapping rows panel.
|
||||
|
||||
[#next]
|
||||
== Next button
|
||||
|
||||
Allows you to jump to the next mapping.
|
||||
Considers only mappings that are currently visible in the mapping rows panel.
|
||||
|
||||
[#enabled]
|
||||
== Enabled checkbox
|
||||
|
||||
Enables or disables the mapping as a whole.
|
||||
+643
@@ -0,0 +1,643 @@
|
||||
= Glue section
|
||||
:control: Control →
|
||||
:feedback: Feedback ←
|
||||
:momentary-button: Momentary button
|
||||
:velocity-sensitive-button: Velocity-sensitive button (key, pad, ...)
|
||||
:incremental-velocity-sensitive-button: Incremental velocity-sensitive button (key, pad, ...)
|
||||
:incremental-button: Incremental button
|
||||
:range-element: Range element (fader, knob, ...)
|
||||
:encoder: Rotary endless encoder
|
||||
:led: LED
|
||||
:value-indicator: Value indicator (LED ring, motor fader, ...)
|
||||
|
||||
image:realearn/screenshots/mapping-panel-glue.png[Screenshot]
|
||||
|
||||
The xref:key-concepts.adoc#glue[] section is divided into several subsections some of which make sense for all kinds of sources and others only for some.
|
||||
Having so many settings available at the same time can be a bit daunting.
|
||||
ReaLearn helps you by hiding settings that don't make sense in the current context.
|
||||
|
||||
It shows or hides them based on criteria like this:
|
||||
|
||||
* Is control and/or feedback enabled for the mapping?
|
||||
* What are the characteristics of the source and target?
|
||||
* What's the current setting of <<absolute-mode>> and <<make-absolute>>?
|
||||
|
||||
== Reset to defaults button
|
||||
|
||||
Resets the settings to some sensible defaults.
|
||||
|
||||
[#reverse]
|
||||
== Reverse checkbox
|
||||
|
||||
{control}::
|
||||
include::partial$glue/reverse/control.txt[]
|
||||
|
||||
{feedback}::
|
||||
include::partial$glue/reverse/feedback.txt[]
|
||||
|
||||
include::partial$glue/usage-dependent-effect.adoc[]
|
||||
|
||||
|{momentary-button}
|
||||
|{control}
|
||||
|Switches the target off when pressed and on when released
|
||||
|
||||
|{range-element}
|
||||
|{control}
|
||||
|The higher the fader position, the lower the target value
|
||||
|
||||
|{incremental-button}
|
||||
|{control}
|
||||
|Decreases the target value on press instead of increasing it
|
||||
|
||||
|{encoder}
|
||||
|{control}
|
||||
|Decreases the target value when turning clockwise and decreases it when turning counter-clockwise
|
||||
|
||||
|{led}
|
||||
|{feedback}
|
||||
|Uses *off* LED color if target is on and *on* LED color if target is off
|
||||
|
||||
|{value-indicator}
|
||||
|{feedback}
|
||||
|The higher the target value, the lower the indicated value
|
||||
|
||||
|===
|
||||
|
||||
[#target-min-max]
|
||||
== Target Min/Max controls
|
||||
|
||||
{control}::
|
||||
include::partial$glue/target-min-max/control.txt[]
|
||||
|
||||
{feedback}::
|
||||
include::partial$glue/target-min-max/feedback.txt[]
|
||||
|
||||
.Squeezing the track volume value range
|
||||
====
|
||||
If you set this to "-6 dB to 0 dB" for a _Track volume_ target, the volume will always stay within that dB range when controlled via this mapping.
|
||||
However, it wouldn't prevent the volume from exceeding that range if changed e.g. in REAPER itself.
|
||||
====
|
||||
|
||||
This setting can be used with all targets that work with xref:further-concepts/mapping.adoc#absolute-control-value[absolute control values] (all targets except xref:targets/project/invoke-reaper-action.adoc[] with relative xref:targets/project/invoke-reaper-action.adoc#invocation-type[]).
|
||||
|
||||
[#value-sequence]
|
||||
== Value sequence field
|
||||
|
||||
{control}::
|
||||
include::partial$glue/value-sequence/control.txt[]
|
||||
|
||||
Allows you to define a xref:further-concepts/glue.adoc#target-value-sequence[].
|
||||
All values are entered comma-separated using the target unit specified with the xref:user-interface/mapping-panel/target-section.adoc#display-unit[].
|
||||
|
||||
You can provide only one of <<target-min-max>> or <<value-sequence>>.
|
||||
|
||||
[#group-interaction]
|
||||
== Group interaction
|
||||
|
||||
{control}::
|
||||
include::partial$glue/group-interaction/control.txt[]
|
||||
|
||||
See xref:further-concepts/mapping.adoc#group[].
|
||||
|
||||
TIP: If you want to control _other_ mappings only and not _this_ mapping, just pick a target that doesn't have any effect, for example the xref:targets/realearn/dummy.adoc[].
|
||||
|
||||
None::
|
||||
Switches group interaction off.
|
||||
This is the default.
|
||||
Incoming control events will just affect _this_
|
||||
mapping, not others.
|
||||
|
||||
[[same-control]] Same control::
|
||||
This will broadcast any incoming control value to all other mappings in the same group.
|
||||
The glue section of this mapping will be ignored when controlling the other mappings.
|
||||
The glue sections of the other mappings will be respected, including the <<source-min-max>>.
|
||||
|
||||
[[same-target-value]] Same target value::
|
||||
This will set the target value of each other mapping in the same group to the target value of this mapping.
|
||||
Nice: It will respect the <<target-min-max>> of both this mapping and the other mappings.
|
||||
All other settings of the glue section will not be processed.
|
||||
Needless to say, this kind of control is always absolute, which means it can lead to parameter jumps.
|
||||
Therefore, it's most suited for on/off targets.
|
||||
If you don't like this, choose <<same-control>> instead.
|
||||
|
||||
[[inverse-control]] Inverse control::
|
||||
This is like <<same-control>> but broadcasts the _inverse_ of the incoming control value.
|
||||
|
||||
[[inverse-target-value]] Inverse target value::
|
||||
This is like <<same-target-value>> but sets the target values of the other mappings to the
|
||||
_inverse_ value.
|
||||
This is very useful in practice with buttons because it essentially gives you exclusivity within one group.
|
||||
It's a great alternative to the xref:user-interface/mapping-panel/target-section.adoc#exclusive[] which is available for some targets.
|
||||
Unlike the latter, <<inverse-target-value>> allows for exclusivity between completely different target types and completely custom groupings - independent of e.g. organization of tracks into folders.
|
||||
|
||||
Inverse target value (on only)::
|
||||
Variation of <<inverse-target-value>> that applies the inverse only when the target value is > 0%.
|
||||
|
||||
Inverse target value (off only)::
|
||||
Variation of <<inverse-target-value>> that applies the inverse only when the target value is 0%.
|
||||
|
||||
[[feedback-type-controls]]
|
||||
== Feedback type controls
|
||||
|
||||
{feedback}::
|
||||
include::partial$glue/feedback-type/feedback.txt[]
|
||||
|
||||
See xref:further-concepts/glue.adoc#feedback-type[].
|
||||
|
||||
[#feedback-style]
|
||||
== Feedback style menu (...)
|
||||
|
||||
The ... button provides options to change the _feedback style_.
|
||||
At the moment, it's all about setting colors.
|
||||
|
||||
TIP: If you use xref:further-concepts/glue.adoc#dynamic-feedback[], changes made here don't have any effect because you are supposed to provide style properties as part of the Luau script result (which is much more flexible).
|
||||
|
||||
Color / Background color::
|
||||
With this you can define the color and background color of the displayed text.
|
||||
Of course this will only work if the source supports it!
|
||||
|
||||
<Default color>:::
|
||||
Chooses the default color, that is the one which is preferred for the corresponding controller and display type.
|
||||
|
||||
<Pick color...>:::
|
||||
Opens a color picker so you can choose the color of your choice.
|
||||
|
||||
_Property name_::: Maybe you don't want a fixed color but a dynamic one that changes whenever your target changes.
|
||||
Choose one of the properties to make that happen.
|
||||
Do a full-text search in the reference to learn about the meaning of the property.
|
||||
|
||||
[[source-min-max]]
|
||||
== Source Min/Max controls
|
||||
|
||||
{control}::
|
||||
include::partial$glue/source-min-max/control.txt[]
|
||||
|
||||
{feedback}::
|
||||
include::partial$glue/source-min-max/feedback.txt[]
|
||||
|
||||
Doesn't have an effect on xref:further-concepts/mapping.adoc#relative-control-value[relative control values].
|
||||
|
||||
include::partial$glue/usage-dependent-effect.adoc[]
|
||||
|
||||
|{momentary-button}
|
||||
|{control}
|
||||
|If min > 0 and <<out-of-range-behavior>> is <<out-of-range-behavior-ignore>>, button releases are ignored.
|
||||
Because this also affects {feedback}, it's usually better to use the <<button-filter>> instead!
|
||||
|
||||
|{velocity-sensitive-button}
|
||||
|{control}
|
||||
|Defines the observed velocity range, for example to react to only the lower velocity layer of a key press.
|
||||
|
||||
|{range-element}
|
||||
|{control}
|
||||
|Defines the observed value range.
|
||||
For example to react only to the upper half of a fader.
|
||||
|
||||
|{led}
|
||||
|{feedback}
|
||||
|On many controllers which support colored LEDs, *Min* sets the *off* color and *Max* sets the *on* color.
|
||||
|
||||
|{value-indicator}
|
||||
|{feedback}
|
||||
|Sets the lowest/highest indicated value.
|
||||
|
||||
|===
|
||||
|
||||
By restricting that range, you basically tell ReaLearn to or only the lower velocity layer of a key press.
|
||||
|
||||
This range also determines the minimum and maximum xref:key-concepts.adoc#feedback[] value.
|
||||
|
||||
[#out-of-range-behavior]
|
||||
== Out-of-range behavior menu
|
||||
|
||||
{control}::
|
||||
include::partial$glue/out-of-range-behavior/control.txt[]
|
||||
|
||||
{feedback}::
|
||||
include::partial$glue/out-of-range-behavior/feedback.txt[]
|
||||
|
||||
See <<source-min-max>> and <<target-min-max>>.
|
||||
|
||||
There are the following options:
|
||||
|
||||
[cols="h,d,d"]
|
||||
|===
|
||||
| | {control} | {feedback}
|
||||
|
||||
| Min or max | If the source value is < _Source Min_, ReaLearn will behave as if _Source Min_ was received (or 0% if _Source Min_ = _Source Max_).
|
||||
|
||||
If the source value is > _Source Max_, ReaLearn will behave as if _Source Max_ was received (or 100% if _Source Min_ = _Source Max_). | If the target value is < _Target Min_, ReaLearn will behave as if _Target Min_ was detected (or 0% if _Target Min_ = _Target Max_).
|
||||
|
||||
If the target value is > _Target Max_, ReaLearn will behave as if _Target Max_ was detected (or 100% if _Target Min_ = _Target Max_).
|
||||
|
||||
| Min | ReaLearn will behave as if _Source Min_ was received (or 0% if _Source Min_ = _Source Max_). | ReaLearn will behave as if _Target Min_ was detected (or 0% if _Target Min_ = _Target Max_). Useful for getting radio-button-like feedback.
|
||||
|
||||
|[[out-of-range-behavior-ignore,Ignore]] Ignore | Target value won't be touched. | No feedback will be sent.
|
||||
|===
|
||||
|
||||
[[absolute-mode]]
|
||||
== Mode ("Absolute mode") menu
|
||||
|
||||
{control}::
|
||||
include::partial$glue/absolute-mode/control.txt[]
|
||||
|
||||
TIP: Not all modes make sense at all times!
|
||||
It mostly depends on the character of the source.
|
||||
If a mode doesn't make sense given the current source, it will be marked as `NOT APPLICABLE`.
|
||||
In this case, you should choose another mode or change the source.
|
||||
|
||||
[[absolute-mode-normal]] Normal::
|
||||
|
||||
Takes and optionally transforms absolute source control values _the normal way_. _Normal_ means that the current target value is irrelevant and the target will just be set to whatever absolute control value is coming in (potentially transformed).
|
||||
|
||||
[[incremental-button,Incremental button mode]] Incremental button::
|
||||
With this you can "go relative" with buttons instead of encoders in a "previous/next fashion".
|
||||
+
|
||||
Let's assume you use the _MIDI Note velocity_ and select _Incremental button_ mode.
|
||||
Then it works like this: Each time you press the key, the target value will increase, according to the mode's settings.
|
||||
You can even make the amount of change velocity-sensitive!
|
||||
If you want the target value to decrease, just check the <<reverse>>.
|
||||
|
||||
[[toggle-button-mode,Toggle button mode]]
|
||||
Toggle button::
|
||||
Toggle button mode is used to toggle a target between on and off states.
|
||||
It only makes sense for momentary buttons (which fire a value > 0 on each press).
|
||||
+
|
||||
Here's how it works in detail:
|
||||
+
|
||||
* If the current target value is within the first half of the target min/max range, it's considered as _off_ and will therefore be switched _on_ (set to _target max_).
|
||||
If it's within the second half, it's considered as _on_ and will therefore be switched _off_ (set to _target min_).
|
||||
* It works a bit differently if _target min_ and _target max_ have the same value (which is a common technique to set the target to a specific value on the press of a button).
|
||||
Instead of toggling between _target min_ and _target max_, this mode now toggles between this specific value (= _target min_ = _target max_) and 0%.
|
||||
This is useful whenever you have a set of buttons each of which sets the same target to a different value, and you want them to toggle between the specified value and an initial value (0%).
|
||||
+
|
||||
This mode is not supported for controller mappings that have a virtual target.
|
||||
+
|
||||
[TIP]
|
||||
====
|
||||
Sometimes the controller itself provides a toggle mode for buttons. *Don't use it!*
|
||||
|
||||
Always set up your controller buttons to work in momentary mode!
|
||||
It's impossible for the controller to know which state (on/off) a target currently has.
|
||||
Therefore, if you use the controller's built-in toggle function, it's quite likely that it gets out of sync with the actual target state at some point.
|
||||
|
||||
ReaLearn's own toggle mode has a clear advantage here.
|
||||
====
|
||||
|
||||
[[make-relative]] Make relative::
|
||||
This converts incoming absolute fader/knob movements into relative adjustments of the target value.
|
||||
It somewhat resembles takeover mode <<takeover-mode-parallel>> but has important differences:
|
||||
|
||||
- It's guaranteed that a full fader/knob swipe from 0% to 100% always results in a swipe over the full target range (assuming the target was at 0% initially).
|
||||
- It doesn't need to know the current target value.
|
||||
Which means it also works for mappings with xref:further-concepts/target.adoc#virtual-target[virtual targets].
|
||||
|
||||
[[performance-control]] Performance control::
|
||||
This mode emulates the behavior of a typical soft synth modulation matrix mapping: It uses the target value that has been set in REAPER (not via this ReaLearn mapping) as an offset and starts changing it from there.
|
||||
|
||||
[#round-target-value]
|
||||
== Round target value checkbox
|
||||
|
||||
{control}::
|
||||
include::partial$glue/round-target-value/control.txt[]
|
||||
|
||||
Only a few targets support that, such as xref::targets/project/set-tempo.adoc[].
|
||||
|
||||
[#takeover-mode]
|
||||
== Takeover mode menu
|
||||
|
||||
{control}::
|
||||
include::partial$glue/takeover-mode/control.txt[]
|
||||
|
||||
If you are not using motorized faders, absolute mode is inherently prone to parameter jumps.
|
||||
A parameter jump occurs if you touch a control element (e.g. fader) whose position in no way reflects the current target value.
|
||||
This can result in audible jumps because the value is changed abruptly instead of continuously.
|
||||
You can deal with this by setting the right takeover mode.
|
||||
|
||||
ReaLearn provides multiple takeover modes that decide how to deal with situations when a target parameter jump would occur.
|
||||
|
||||
Off::
|
||||
|
||||
The default setting: Jumps allowed.
|
||||
|
||||
[[pick-up]] Pick up::
|
||||
This is the same as _Soft takeover_ in REAPER's built-in MIDI learn.
|
||||
It prevents jumps by not changing the target value until your control element reaches it.
|
||||
+
|
||||
In certain cases, this mode can cause the target value to get stuck.
|
||||
This happens with faders/knobs that cause jumps themselves when moved very rapidly.
|
||||
If you don't like that, you might want to try <<pick-up-tolerant>>.
|
||||
|
||||
[[pick-up-tolerant]] Pick up (tolerant)::
|
||||
This is like <<pick-up>> but makes extra sure that the target value doesn't get stuck.
|
||||
+
|
||||
However, unlike <<pick-up>>, this mode will jump if you cause a jump on your controller!
|
||||
Imagine using a touch strip.
|
||||
This kind of control element allows you to jump to arbitrary values at any time.
|
||||
Tolerant mode will not prevent this kind of jumps!
|
||||
|
||||
Long time no see::
|
||||
This is similar to <<pick-up>> with the difference that the current target value will gradually "come your way".
|
||||
This results in seamless and fast reunification of control and target value, but it can feel weird because the target value can temporarily move in the opposite direction of the fader movement.
|
||||
In older ReaLearn versions this was called "Slowly approach if jump too big".
|
||||
|
||||
[[takeover-mode-parallel]] Parallel::
|
||||
With this mode, the target will simply follow your fader moves, in exactly the same tempo - without any scaling.
|
||||
Reunification only happens when both control and target value meet at the "borders".
|
||||
|
||||
Catch up::
|
||||
This mode is sometimes called "Proportional" or "Value scaling" mode.
|
||||
It's like "Parallel" mode but the target value is allowed to move slower than the control value - hence the control can catch up (converge) faster.
|
||||
|
||||
[#control-transformation]
|
||||
== Control transformation (EEL) field
|
||||
|
||||
{control}::
|
||||
include::partial$glue/control-transformation/control.txt[]
|
||||
|
||||
This feature allows you to write a formula that transforms incoming control values.
|
||||
While very powerful because it allows for arbitrary transformations (velocity curves, random values - you name it), it's not everybody's cup of tea to write something like that.
|
||||
The formula must be written in the language https://www.cockos.com/EEL2/[EEL2].
|
||||
Some REAPER power users might be familiar with it because REAPER's JSFX uses the same language.
|
||||
|
||||
Luckily, ReaLearn has a fancy editor which visualizes the formula and has some predefined templates built-in (available on Windows and macOS only at the moment).
|
||||
Press the "*...*" button to open the editor.
|
||||
Code changes are applied immediately.
|
||||
|
||||
The most simple formula is `y = x`, which means there will be no transformation at all. `y = x / 2` means that incoming control values will be halved.
|
||||
You get the idea: `y` represents the desired target control value (= output value) and `x` the incoming source control value (= input value).
|
||||
Both are 64-bit floating point numbers between 0.0 (0%) and 1.0 (100%).
|
||||
|
||||
The script can be much more complicated than the mentioned examples and make use of all built-in EEL2 language features.
|
||||
The important thing is to assign the desired value to `y` at some point.
|
||||
|
||||
The following variables/functions are available in the formula:
|
||||
|
||||
`y`:: Initially contains the _current_ target value.
|
||||
You can use that value in order to calculate the new value.
|
||||
With this, you can essentially craft your own relative mode!
|
||||
|
||||
`y_type`:: This contains the type of the produced output value.
|
||||
By default, it's 0. The following types are currently supported:
|
||||
|
||||
`0`::: Absolute continuous value (a value between 0.0 and 1.0)
|
||||
`1`::: Relative discrete value (an integer, e.g. -5 for 5 decrements)
|
||||
|
||||
`realearn_timestamp`:: This contains the precise timestamp of the incoming control event in seconds.
|
||||
This can be used to calculate the delta time between two consecutive control events, which in turn can be used to simulate encoder acceleration, for example.
|
||||
+
|
||||
The timestamp has audio block precision.
|
||||
For MIDI events, it even takes the intra-block offset into account - which is as precise as it can get, even if you use a high audio buffer size in the REAPER audio device settings.
|
||||
|
||||
`y_last`:: This contains the last value of the target before it was affected by this particular mapping.
|
||||
+
|
||||
Allows you to come up with a performance control mode typical for synth parameter mappings, just like the built-in <<performance-control>> mode but more customizable.
|
||||
Try this for example: `y = y_last + x * (1 - y_last)`
|
||||
|
||||
`rel_time`:: This contains the number of milliseconds since this mapping has last been triggered with a control message coming from the source.
|
||||
+
|
||||
As soon as you use this and a control message comes in, ReaLearn will start invoking your formula _repeatedly_!
|
||||
That means, this variable is your entrance ticket to smooth transitions and continuous parameter modulation.
|
||||
+
|
||||
A few examples:
|
||||
+
|
||||
* Smooth transition from current value to control value: `rel_time; y = abs(x - y) < 0.05 ? stop : y + 0.1 * (x - y)`
|
||||
* Sinus LFO: `y = (sin(rel_time / 500) + 1) / 2`
|
||||
* Linear transition to control value (1 second): `y = abs(x - y) < 0.05 ? stop : x * min(rel_time / 500, 1)`
|
||||
* 2 seconds chaos: `y = rel_time < 2000 ? rand(1) : stop`
|
||||
* Setting a value with delay: `y = rel_time < 2000 ? none : stop(0.5)`
|
||||
|
||||
`stop` and `stop(...)`::
|
||||
In combination with `rel_time`, this stops repeated invocation of the formula until the mapping is triggered again.
|
||||
+
|
||||
Good for building transitions with a defined end.
|
||||
+
|
||||
Stopping the invocation at some point is also important if the same parameter should be controlled by other mappings as well.
|
||||
Otherwise, if multiple mappings continuously change the target parameter, only the last one wins.
|
||||
+
|
||||
This also exists as a function, which lets you do both, returning a target value *and* stopping the transition.
|
||||
Pass the desired value in the parentheses, e.g. `stop(0.5)`.
|
||||
|
||||
`none`::
|
||||
Usually, each repeated (see `rel_time`) invocation always results in a target invocation (unless the target is not retriggerable and already has the desired value).
|
||||
Sometimes this is not desired.
|
||||
In this case, one can return `none`, in which case the target will not be touched.
|
||||
+
|
||||
Good for transitions that are not continuous, especially if other mappings want to control the parameter as well from time to time.
|
||||
|
||||
`realearn_last_feedback_value`::
|
||||
Contains the last numeric feedback value sent through this mapping.
|
||||
Before that, it's zero.
|
||||
This can come in handy for mappings with xref:further-concepts/target.adoc#virtual-target[], for which the variable `y` is always zero because virtual targets don't know the concept of a current value.
|
||||
+
|
||||
WARNING: This variable is experimental, better don't rely on it!
|
||||
|
||||
`realearn_dbg()`::
|
||||
This is a function which takes a floating-point value as parameter.
|
||||
It prints that floating-point value to `stdout` (*not* the ReaScript debug console!).
|
||||
Useful for debugging.
|
||||
|
||||
Learn more about the order in which ReaLearn processes the elements in the glue section by looking at the xref:glue-signal-flow.adoc[] diagrams.
|
||||
|
||||
[#step-size-min-max]
|
||||
== Step size Min/Max controls
|
||||
|
||||
{control}::
|
||||
include::partial$glue/step-size-min-max/control.txt[]
|
||||
|
||||
When you deal with relative adjustments of target values in terms of increments/decrements, then you have great flexibility because you can influence the _amount_ of those increments/decrements.
|
||||
This is done via the _Step size_ setting, which is available for all
|
||||
_continuous_ targets.
|
||||
|
||||
Step size Min:: Specifies how much to increase/decrease the target value when an increment/decrement is received.
|
||||
+
|
||||
include::partial$glue/usage-dependent-effect.adoc[]
|
||||
|
||||
|{incremental-button}
|
||||
|{control}
|
||||
|Sets the target value change amount when button pressed
|
||||
|
||||
|{incremental-velocity-sensitive-button}
|
||||
|{control}
|
||||
|Sets the target value change amount when button pressed with the lowest velocity
|
||||
|
||||
|{encoder}
|
||||
|{control}
|
||||
|Sets the target value change amount for an incoming non-accelerated increment/decrement
|
||||
|
||||
|{encoder} with <<make-absolute>>
|
||||
|{control}
|
||||
|Sets the amount added/subtracted to calculate the simulated absolute value from an incoming non-accelerated increment/decrement
|
||||
|
||||
|===
|
||||
|
||||
Step size Max:: Sets the maximum amount by which to increase/decrease the target value with one interaction. If you set this to the same value as _Min_, encoder acceleration or changes in velocity will have no effect on the incrementation/decrementation amount.
|
||||
If you set it to 100%, the effect is maximized.
|
||||
+
|
||||
include::partial$glue/usage-dependent-effect.adoc[]
|
||||
|
||||
|{incremental-velocity-sensitive-button}
|
||||
|{control}
|
||||
|Sets the target value change amount when button pressed with the highest velocity
|
||||
|
||||
|{encoder}
|
||||
|{control}
|
||||
|If the hardware encoder supports acceleration, this sets the target value change amount for the most accelerated increment/decrement
|
||||
|
||||
|===
|
||||
|
||||
[#speed-min-max]
|
||||
== Speed Min/Max controls
|
||||
|
||||
{control}::
|
||||
include::partial$glue/speed-min-max/control.txt[]
|
||||
|
||||
When you choose a target with a xref:further-concepts/target.adoc#discrete-value-range[], the <<step-size-min-max>> label will change into
|
||||
_Speed_.
|
||||
If a target is discrete, it cannot have arbitrarily small step sizes.
|
||||
It rather has one predefined atomic step size.
|
||||
Allowing arbitrary step size adjustment wouldn't make sense.
|
||||
That's why _Speed_ allows you to _multiply_ (positive numbers) or _"divide"_ (negative numbers) value increments with a factor instead.
|
||||
Negative numbers are most useful for rotary encoders because they will essentially lower their sensitivity.
|
||||
Virtual targets are always discrete.
|
||||
|
||||
.Speed example
|
||||
====
|
||||
Let's assume you selected the discrete xref:targets/fx/browse-presets.adoc[], which is considered discrete because an FX with for example 5 presets has 6 well-defined possible values (including the <no preset> option), there's nothing inbetween.
|
||||
And let's also assume that you have a controller like Midi Fighter Twister whose rotary encoders don't support built-in acceleration.
|
||||
|
||||
Now you slightly move an encoder clock-wise and your controller sends an increment +1. If the _Speed Min_ slider was at 1 (default), this will just navigate to the next preset (+1).
|
||||
If the _Speed Min_ slider was at 2, this will jump to the 2nd-next preset (+2).
|
||||
And so on.
|
||||
====
|
||||
|
||||
Remarks:
|
||||
|
||||
* There are FX plug-ins out there which report their parameter as discrete with an insanely small step size (e.g. some Native Instrument plug-ins).
|
||||
This kind of defeats the purpose of discrete parameters and one can argue that those parameters should actually be continuous.
|
||||
In such a case, moving your rotary encoder might need _a lot_ of turning even if you set _Speed_ to the apparent maximum of 100! In this case you will be happy to know that the text field next to the slider allows you to enter values higher than 100.
|
||||
* You can set the "Speed" slider to a negative value, e.g. -2. This is the opposite.
|
||||
It means you need to make your encoder send 2 increments in order to move to the next preset.
|
||||
Or -5: You need to make your encoder send 5 increments to move to the next preset.
|
||||
This is like slowing down the encoder movement.
|
||||
|
||||
[#encoder-filter]
|
||||
== Encoder filter menu
|
||||
|
||||
{control}::
|
||||
include::partial$glue/encoder-filter/control.txt[]
|
||||
|
||||
For example, if you want to invoke one action on clockwise movement and another one on counter-clockwise movement.
|
||||
Or if you want to use different step sizes for different movements.
|
||||
|
||||
Increment & decrement:: ReaLearn will process both increments and decrements.
|
||||
Increment only:: ReaLearn will ignore decrements.
|
||||
Decrement only:: ReaLearn will ignore increments.
|
||||
|
||||
[#wrap]
|
||||
== Wrap checkbox
|
||||
|
||||
{control}::
|
||||
include::partial$glue/wrap/control.txt[]
|
||||
|
||||
If unchecked, the target value will not change anymore if there's an incoming decrement but the target already reached its minimum value.
|
||||
If checked, the target value will jump to its maximum value instead.
|
||||
It works analogously if there's an incoming increment and the target already reached its maximum value.
|
||||
|
||||
If this flag is enabled for controller mappings which have a virtual target, every main mapping controlled by that virtual control element will wrap - even if the main mapping itself doesn't have <<wrap>> enabled.
|
||||
|
||||
[[make-absolute]]
|
||||
== Make absolute
|
||||
|
||||
{control}::
|
||||
include::partial$glue/make-absolute/control.txt[]
|
||||
|
||||
This is useful if you have configured your controller to be relative all the way (which is good!) but you want to use a control transformation EEL formula - which is not possible if you change the target with relative increments.
|
||||
It works by keeping an internal absolute value, incrementing or decrementing it accordingly and then processing it just like normal absolute control values.
|
||||
|
||||
By checking this box:
|
||||
|
||||
* You lose the possibility to be perfectly free of parameter jumps (but you can try to mitigate that loss by using the jump settings).
|
||||
* You gain support for control-direction EEL transformation, non-continuous target value sequences and source range.
|
||||
* You can still use some of the relative-only features: Step size and rotate!
|
||||
|
||||
[#fire-mode]
|
||||
== Fire mode menu
|
||||
|
||||
{control}::
|
||||
include::partial$glue/fire-mode/control.txt[]
|
||||
|
||||
Normally, when a button gets pressed, it controls the target immediately.
|
||||
However, by using this dropdown and by changing the values below it, you can change this behavior.
|
||||
This dropdown provides different fire modes that decide how exactly ReaLearn should cope with button presses.
|
||||
|
||||
Fire on press (or release if > 0 ms)::
|
||||
This mode is essential in order to be able to distinguish between different press durations.
|
||||
+
|
||||
* *Min* and *Max* decide how long a button needs to be pressed to have an effect.
|
||||
* By default, both min and max will be at 0 ms, which means that the duration doesn't matter and both press (> 0%) and release (0%) will be instantly forwarded.
|
||||
If you change _Min_ to e.g. 1000 ms and _Max_ to 5000 ms, it will behave as follows:
|
||||
* If you press the control element and instantly release it, nothing will happen.
|
||||
* If you press the control element, wait for a maximum of 5 seconds and then release it, the control value of the press (> 0%) will be forwarded.
|
||||
* It will never forward the control value of a release (0%), so this is probably only useful for targets with trigger character.
|
||||
* The main use case of this setting is to assign multiple functions to one control element, depending on how long it has been pressed.
|
||||
For this, use settings like the following:
|
||||
* Short press: 0 ms - 250 ms
|
||||
* Long press: 250 ms - 5000 ms
|
||||
|
||||
Fire after timeout::
|
||||
This mode is more "satisfying" because it will let ReaLearn "fire" immediately once a certain time has passed since the press of the button.
|
||||
However, obviously it doesn't have the concept of a "Maximum" press duration, so it can't be used to execute different things depending on different press durations (or only as the last part in the press duration chain, so to say).
|
||||
|
||||
Timeout::: Sets the timeout in milliseconds.
|
||||
If this is zero, everything will behave as usual.
|
||||
|
||||
[[fire-after-timeout-keep-firing]]Fire after timeout, keep firing (turbo)::
|
||||
Welcome to turbo mode.
|
||||
It will keep hitting your target (always with the initial button press velocity) at a specific rate.
|
||||
Optionally with an initial delay.
|
||||
Epic!
|
||||
|
||||
Timeout::: This is the initial delay before anything happens.
|
||||
Can be zero, then turbo stage is entered instantly on press.
|
||||
|
||||
Rate::: This is how frequently the target will be hit once the timeout has passed.
|
||||
In practice, it won't happen more frequently than once every 30 ms (REAPER's main thread loop frequency).
|
||||
|
||||
Fire on double press::
|
||||
This reacts to double presses of a button (analog to double-clicks with the mouse).
|
||||
|
||||
Fire after single press (if hold < Max ms)::
|
||||
|
||||
If you want to do something in response to a double press, chances are that you want to do something _else_ in response to just a single press.
|
||||
The _Normal_ fire mode will fire no matter what!
|
||||
That's why there's an additional _Single press_ mode that will not respond to double presses.
|
||||
The response happens _slightly_ delayed - because ReaLearn needs to wait a bit to see if it's going to be a double press or not.
|
||||
|
||||
Max::: With this, it's even possible to distinguish between single, double _and_ long press.
|
||||
In order to do that, you must set the _Max_ value of the _Single press_ mapping to a value that is lower than the _Timeout_ value of your _After timeout_ mapping.
|
||||
That way you can use one button for 3 different actions!
|
||||
+
|
||||
====
|
||||
* Mapping 1 "Single press" with Max = 499ms
|
||||
* Mapping 2 "Double press"
|
||||
* Mapping 3 "After timeout" with Timeout = 500ms
|
||||
====
|
||||
|
||||
[#button-filter]
|
||||
== Button filter menu
|
||||
|
||||
{control}::
|
||||
include::partial$glue/button-filter/control.txt[]
|
||||
|
||||
Press & release::
|
||||
ReaLearn will process both button presses (control value = 0%) and button releases (control value > 0%).
|
||||
This is the default.
|
||||
|
||||
[[press-only,press-only]] Press only::
|
||||
Makes ReaLearn ignore the release of the button.
|
||||
The same thing can be achieved by setting
|
||||
_Source Min_ to 1. However, doing so would also affect the feedback direction, which is often undesirable because it will mess with the button LED color or on/off state.
|
||||
|
||||
Release only:: Makes ReaLearn ignore the press of the button (just processing its release).
|
||||
Rare, but possible.
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
= Source section
|
||||
|
||||
image:realearn/screenshots/mapping-panel-source.png[Screenshot]
|
||||
|
||||
All xref:sources.adoc[] share the following UI elements.
|
||||
|
||||
[#learn]
|
||||
== Learn button
|
||||
|
||||
Starts or stops learning the xref:key-concepts.adoc#source[] of this mapping.
|
||||
|
||||
[#category]
|
||||
== Category menu
|
||||
|
||||
Lets you choose the source category.
|
||||
|
||||
[#type]
|
||||
== Type menu
|
||||
|
||||
Lets you choose the source type within that category.
|
||||
See xref:sources.adoc[].
|
||||
+140
@@ -0,0 +1,140 @@
|
||||
= Target section
|
||||
|
||||
image:realearn/screenshots/mapping-panel-target.png[Screenshot]
|
||||
|
||||
All xref:targets.adoc[] share the following UI elements.
|
||||
|
||||
[#learn]
|
||||
== Learn button
|
||||
|
||||
Starts or stops learning the target of this mapping.
|
||||
|
||||
[#menu]
|
||||
== Menu
|
||||
|
||||
Opens a small menu related to the target section:
|
||||
|
||||
Pick recently touched target (by type)::
|
||||
Gives you a list of recently touched parameters or executed actions in REAPER.
|
||||
When you click one of it, the target will be populated accordingly.
|
||||
It's an alternative to btn:[Learn].
|
||||
+
|
||||
Please note that not all targets can be picked that way, some have to be configured manually.
|
||||
|
||||
Go there (if supported):: If applicable, this makes the target of this mapping visible in REAPER.
|
||||
E.g. if the target is a track FX parameter, the corresponding track FX window will be displayed.
|
||||
|
||||
[#category]
|
||||
== Category menu
|
||||
|
||||
Lets you choose the target category.
|
||||
|
||||
[#type]
|
||||
== Type menu
|
||||
|
||||
Lets you choose a target type within that category.
|
||||
See xref:targets.adoc[].
|
||||
|
||||
[#current-value]
|
||||
== Value section and field
|
||||
|
||||
Reflects the current value of this mapping target and lets you change it (either via slider and text field or via buttons, depending on the target character).
|
||||
|
||||
If the target can't be resolved at the moment, it will show "Target currently inactive!" instead.
|
||||
|
||||
[[display-unit]]
|
||||
== Display unit button
|
||||
|
||||
On the right side of the current value you will see a button with a label such as `1. dB (%)`.
|
||||
This button displays the currently selected target unit (unrelated to the xref:key-concepts.adoc#unit[] concept) which is used for displaying and entering target values.
|
||||
|
||||
The number in the parentheses denotes the unit which is used for displaying and entering target step sizes.
|
||||
|
||||
Clicking the button switches between available target units.
|
||||
Currently, there are two options:
|
||||
|
||||
(1) Use native target units::
|
||||
Uses the target-specific unit, e.g. dB for volume targets.
|
||||
If the target doesn't have any specific units, it will be displayed as `1. - (-)`.
|
||||
|
||||
(2) Use percentages::
|
||||
Uses percentages for everything, which can be nice to get a uniform way of displaying/entering values instead of having to deal with the sometimes clunky target-specific units.
|
||||
|
||||
== Common elements for track targets
|
||||
|
||||
When choosing a track, the following additional elements are available.
|
||||
|
||||
[[track-must-be-selected]]
|
||||
=== Track must be selected checkbox
|
||||
|
||||
If checked, this mapping will be active only if the track set in _Track_ is currently selected.
|
||||
See xref:further-concepts/target.adoc#target-activation-condition[].
|
||||
|
||||
=== Selection ganging checkbox
|
||||
|
||||
If checked and if the track in question is selected, all other selected tracks will be adjusted as well.
|
||||
This uses REAPER's built-in selection-ganging feature and therefore should behave exactly like it.
|
||||
|
||||
=== Respect grouping checkbox
|
||||
|
||||
If checked, track grouping will be taken into account when adjusting the value.
|
||||
This uses REAPER's built-in track grouping feature and therefore should behave exactly like it.
|
||||
|
||||
NOTE: In older REAPER versions (< 6.69+dev1102), this can only be enabled together with selection ganging when using it on volume, pan or width targets.
|
||||
|
||||
== Common elements for on/off targets
|
||||
|
||||
Targets which control an on/off-style property of tracks (e.g. xref:targets/track/solo-unsolo.adoc[]) additionally provide the following elements.
|
||||
|
||||
[[exclusive]]
|
||||
=== Exclusive menu
|
||||
|
||||
By default, this is set to <<exclusive-no>>.
|
||||
|
||||
[[exclusive-no]] No:: Makes the track target affect just this track.
|
||||
Within project:: Switches the property on (off) for this track and off (on) for all other tracks in the project.
|
||||
Within folder:: Switches the property on (off) for this track and off (on) for all other tracks in the same folder and same level.
|
||||
Within project (on only):: Variation of _Within project_ that applies exclusivity only when switching the property on for this track.
|
||||
In other words, it never switches the property on for other tracks.
|
||||
Within folder (on only):: Variation of _Within folder_ that applies exclusivity only when switching the property on for this track.
|
||||
In other words, it never switches the property on for other tracks.
|
||||
|
||||
== Common elements for FX targets
|
||||
|
||||
The following elements and selectors are available for targets associated with a particular FX instance.
|
||||
|
||||
=== FX section
|
||||
|
||||
The FX instance associated with this target.
|
||||
ReaLearn will search for the FX in the output or input FX chain of the above selected track.
|
||||
|
||||
=== Input FX checkbox
|
||||
|
||||
If unchecked, the _FX_ dropdown will show FX instances in the track's normal FX chain.
|
||||
If checked, it will show FX instances in the track's input FX chain.
|
||||
|
||||
=== Monitoring FX checkbox
|
||||
|
||||
This appears instead of the input FX checkbox if you select track `<Master>`.
|
||||
If you check this, you can target FX instances on REAPER's global monitoring FX chain.
|
||||
|
||||
WARNING: Because of a limitation in the REAPER API, learning and feedback for monitoring FX doesn't work!
|
||||
|
||||
[[fx-must-have-focus]]
|
||||
=== FX must have focus checkbox
|
||||
|
||||
If checked, this mapping will be active only if the selected FX instance is currently _focused_.
|
||||
|
||||
If the FX instance is displayed in a floating window, _focused_ means that the floating window is active.
|
||||
If it's displayed within the FX chain window, _focused_ means that the FX chain window is currently open and the FX instance is the currently selected FX in that FX chain.
|
||||
|
||||
Of course, this flag doesn't have any effect if you chose the xref:further-concepts/target.adoc#fx-focused-selector[].
|
||||
|
||||
== Common elements for pollable targets
|
||||
|
||||
The following elements are available only for the few targets that might need polling (= regular value querying) in order to support automatic feedback in all cases.
|
||||
|
||||
=== Poll for feedback checkbox
|
||||
|
||||
Enables or disables xref:further-concepts/target.adoc#target-value-polling[].
|
||||
In the probably rare case that the polling causes performance issues, you can untick this checkbox.
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
= Top section
|
||||
|
||||
image:realearn/screenshots/mapping-panel-general.png[Screenshot]
|
||||
|
||||
This section provides the following mapping-related elements.
|
||||
|
||||
[#name]
|
||||
== Name field
|
||||
|
||||
Here you can enter a descriptive name for the mapping.
|
||||
This is especially useful in combination with the search function if there are many mappings to keep track of.
|
||||
|
||||
If you clear the name, ReaLearn will name the mapping automatically based on its target.
|
||||
|
||||
[#tags]
|
||||
== Tags field
|
||||
|
||||
Use this to assign arbitrary xref:further-concepts/mapping.adoc#mapping-tag[mapping tags] to this mapping (comma-separated).
|
||||
|
||||
[#control-enabled]
|
||||
== Control-enabled checkbox (→)
|
||||
|
||||
Use this to enable/disable control for this mapping.
|
||||
|
||||
[#feedback-enabled]
|
||||
== Feedback-enabled checkbox (←)
|
||||
|
||||
Use this to enable/disable feedback for this mapping.
|
||||
|
||||
Disabling both control and feedback has the same effect as disabling the mapping as a whole.
|
||||
|
||||
[#active]
|
||||
== Active menu
|
||||
|
||||
This dropdown can be used to enable xref:further-concepts/mapping.adoc#conditional-activation[] for this mapping.
|
||||
|
||||
[#feedback-mode]
|
||||
== Feedback menu
|
||||
|
||||
Normal::
|
||||
Makes ReaLearn send feedback whenever the target value changes.
|
||||
This is the recommended option in most cases.
|
||||
|
||||
Prevent echo feedback::
|
||||
This option mainly exists for motorized faders that don't like getting feedback while being moved.
|
||||
If checked, ReaLearn won't send feedback if the target value change was caused by incoming source events of this mapping.
|
||||
However, it will still send feedback if the target value change was caused by something else, e.g. a mouse action within REAPER itself.
|
||||
+
|
||||
Since ReaLearn 2.16.12, this also works in controller mappings with virtual targets.
|
||||
|
||||
Send feedback after control::
|
||||
This checkbox mainly exists for "fixing" controllers which allow their LEDs to be controlled via incoming MIDI/OSC _but at the same time_ insist on controlling these LEDs themselves.
|
||||
For example, some Behringer X-Touch Compact buttons exhibit this behavior in MIDI mode.
|
||||
Such a behavior can lead to wrong LED states which don't reflect the actual state in REAPER.
|
||||
+
|
||||
If this option is not selected (the normal case and recommended for most controllers), ReaLearn will send feedback to the controller _only_ if the target value has changed.
|
||||
For example, if you use a button to toggle a target value on and off, the target value will change only when pressing the button, not when releasing it.
|
||||
As a consequence, feedback will be sent only when pressing the button, not when releasing it.
|
||||
+
|
||||
If this option is selected, ReaLearn will send feedback even after releasing the button - although the target value has not been changed by it.
|
||||
+
|
||||
Another case where this option comes in handy is if you use a target which doesn't support proper feedback because REAPER doesn't notify ReaLearn about value changes (e.g. "Track FX all enable"), and you have "Poll for feedback" disabled.
|
||||
By choosing this option, ReaLearn will send feedback whenever the target value change was caused by ReaLearn itself, which improves the situation at least a bit.
|
||||
|
||||
[#show-in-projection]
|
||||
== Show in projection checkbox
|
||||
|
||||
When unticked, this mapping will not show up in xref:further-concepts/unit.adoc#projection[].
|
||||
Useful e.g. for feedback-only mappings or buttons with multiple assignments.
|
||||
|
||||
[[advanced-settings]]
|
||||
== Advanced settings button
|
||||
|
||||
This button is for experts.
|
||||
There are some advanced mapping-related settings in ReaLearn that are not adjustable via its graphical user interface but only by writing text-based configuration.
|
||||
Pressing this button should open a small window in which you can write the configuration for this mapping.
|
||||
|
||||
If the button label ends with a number, that number denotes the number of top-level configuration properties set for that mapping.
|
||||
That way you can immediately see if a mapping has advanced settings or not.
|
||||
|
||||
You can learn more about the available properties in the section
|
||||
xref:user-interface/mapping-panel/advanced-settings-dialog.adoc[].
|
||||
|
||||
[#find-in-mapping-list]
|
||||
== Find in mapping list button
|
||||
|
||||
Scrolls the mapping rows panel so that the corresponding mapping row for this mapping gets visible.
|
||||
@@ -0,0 +1,93 @@
|
||||
= Projection
|
||||
|
||||
This section is about the _ReaLearn Companion_ app, which is a separate software that powers ReaLearn's xref:further-concepts/unit.adoc#projection[] feature.
|
||||
|
||||
At the moment, it comes as https://play.google.com/store/apps/details?id=org.helgoboss.realearn_companion[Android app]
|
||||
and https://realearn.helgoboss.org/[web app].
|
||||
The iOS app has not been published yet.
|
||||
The source code is available https://github.com/helgoboss/realearn-companion[here at GitHub].
|
||||
|
||||
NOTE: The new xref:helgobox::app.adoc[] will gradually replace the companion app.
|
||||
|
||||
== Connecting to ReaLearn
|
||||
|
||||
The start screen lets you connect to a specific ReaLearn instance by scanning the QR code that pops up when pressing ReaLearn's <<header-panel,Projection button>>.
|
||||
It's also possible to enter the connection data manually, in case your device doesn't have a camera or in case you are using the web app (in which QR code scanning often doesn't work so well).
|
||||
If you are experiencing issues, follow the instructions given by the app and the setup guide which is displayed when pressing the <<Projection>> button!
|
||||
|
||||
Please note, if all you want is to open the web app on the computer that also runs REAPER/ReaLearn, you don't need to bother with QR codes or connection data at all.
|
||||
Just follow the link that is displayed in the setup guide.
|
||||
|
||||
ReaLearn allows many Companion apps to connect to it simultaneously, there's no artificial limit.
|
||||
|
||||
== Viewing the controller projection
|
||||
|
||||
As soon as you have connected, you should be able to see the controller projection, which consists of both the controller layout and the current mapping of its control elements.
|
||||
If not, the app will give you a hint what's missing.
|
||||
The control element labels will reflect the labels of your main mappings.
|
||||
|
||||
You can tap the screen to make the app bar disappear or reappear.
|
||||
There's a menu on the right side of the app bar which let's you change various aspects of the appearance.
|
||||
Just give it a try!
|
||||
Dark mode combined with high-contrast is especially nice on devices with OLED displays!
|
||||
All of these settings will be saved on your device, not in ReaLearn's controller preset.
|
||||
|
||||
Another thing you can do here is applying two-finger gestures in order to zoom/pinch.
|
||||
|
||||
== Editing the controller layout
|
||||
|
||||
Pressing the pencil button in the app bar let's you enter edit mode.
|
||||
As soon as you do that, the control element labels will reflect the labels of your controller mappings and a palette will appear on the side of the screen.
|
||||
|
||||
=== Editing basics
|
||||
|
||||
You can drag the controls freely from the palette onto the scene and back.
|
||||
Pressing a control element opens a panel which lets you change its appearance.
|
||||
The two labels mentioned there are used in the following way:
|
||||
|
||||
. If the control element is a composite control element (see below, e.g. push encoder), the first label represents the mapping of the first inner control element (e.g. the encoder) and the second label represents the mapping of the second inner control element (e.g. the button).
|
||||
See the _Midi Fighter Twister_ <<tested-controllers,controller preset>> for a real-world usage of this feature.
|
||||
. If the control element is just a normal control element, the second label is usually empty.
|
||||
Except this control element has more than one main mapping assigned: In that case the second label shows the second main mapping.
|
||||
|
||||
Whenever you press the save button (floppy disk) in the app bar, the layout is saved - not on your specific device but as part of ReaLearn's controller preset!
|
||||
So this same layout will automatically be available to all other connected Companion apps.
|
||||
|
||||
You can leave the edit mode by pressing the pencil button again.
|
||||
This gives you a preview of your current changes.
|
||||
|
||||
*Attention:* If you leave the controller projection view (e.g. by pressing the upper left arrow) or if you change your controller preset from within ReaLearn, all non-saved controller layout changes will be lost!
|
||||
So it's a good idea to save often.
|
||||
Once saved, there's no undo though.
|
||||
You can back up temporary states by copying the corresponding controller preset files (on the computer running ReaLearn) to a temporary backup location (see _Save as…_ button documentation in the <<header-panel,Header panel>> section).
|
||||
|
||||
=== Composite control elements
|
||||
|
||||
If you want one visual control element to contain 2 logical control elements (e.g. a push encoder = encoder + button), just move one control element onto another one - and they will merge into a composite control element.
|
||||
If you want to undo this merging, move the merged control element back on the palette - they will split up and you can drag them onto the scene again.
|
||||
|
||||
=== Batch-editing control elements
|
||||
|
||||
Sometimes it's a bit tedious to edit each control element separately.
|
||||
As soon as you long-press one control element, the Companion app will enter multi-edit mode and you can start adding/removing other control elements to/from the selection by just tapping them.
|
||||
When you move one element of the selection, all others will also be moved.
|
||||
You can open the control element appearance panel by long-pressing an element.
|
||||
All changes made in the panel will immediately be applied to all selected elements.
|
||||
|
||||
You can leave multi-edit mode either by unselecting all elements or by (temporarily) leaving the edit mode.
|
||||
|
||||
_Known issue:_ In the web app, multi-edit mode currently doesn't work, there's a graphical glitch.
|
||||
|
||||
=== Dealing with the grid
|
||||
|
||||
You can hide the grid using the app bar menu.
|
||||
The grid will still have an effect though.
|
||||
|
||||
One way to get more fine-grained positioning is by decreasing the grid size.
|
||||
However, it doesn't go below a certain minimum and changing the grid size after already having positioned lots of elements might not be the best idea.
|
||||
Usually, the better way is to just expand the scene.
|
||||
Don't worry, your layout will always fit on the screen, no matter how large the scene actually is in terms of grid squares!
|
||||
|
||||
You can enlarge the scene by slightly moving a control element out of the scene.
|
||||
Do so in small steps and you will automatically have more space at your disposal.
|
||||
The scene will always be as big as the imaginary rectangle from the top-left control element to the bottom-right control element!
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
= Settings dialog
|
||||
|
||||
include::partial$available-in-app.adoc[]
|
||||
|
||||
This dialog opens when pressing the xref:helgobox:ROOT:app/user-interface/title-bar.adoc#title-bar-settings[] button in the title bar and navigating to the ReaLearn section.
|
||||
|
||||
image::generated/screenshots/main/settings.png[]
|
||||
|
||||
[#controllers]
|
||||
== Controllers
|
||||
|
||||
Clicking one of the controllers opens the corresponding xref:user-interface/controller-dialog.adoc[].
|
||||
|
||||
include::partial$generated/elements/settings/controllers/add.adoc[]
|
||||
|
||||
include::partial$generated/elements/settings/controllers/delete.adoc[]
|
||||
|
||||
== Related videos
|
||||
|
||||
video::tkyNCGOVumw[youtube]
|
||||
Reference in New Issue
Block a user