Vendor helgoboss/helgobox (ReaLearn) as basis for custom UI fork

Stripped upstream git history; starting point for replacing the native
SWELL/Win32 mapping UI with something more suited to bulk editing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Paul Lipscomb
2026-07-15 17:38:29 -04:00
parent 583ed77a67
commit e58f06d9fa
2232 changed files with 685575 additions and 1 deletions
@@ -0,0 +1 @@
= FX chain targets
@@ -0,0 +1,8 @@
= Target "FX chain: Browse FXs"
Steps through the FX instances in the FX chain by always having exactly one FX instance visible.
To be used with endless rotary encoders or previous/next-style "Incremental buttons".
== Display menu
Here you can decide if you want to display the FX as part of the FX chain or in a dedicated floating window.
@@ -0,0 +1,2 @@
= FX parameter targets
@@ -0,0 +1,9 @@
= Target "FX parameter: Set automation touch state"
This is similar to xref:targets/track/set-automation-touch-state.adoc[] but for FX parameter value changes.
IMPORTANT: There's one difference.
This target currently only reacts to _release_ events, not _press_ events.
So you can't start writing automation by touching the fader.
You can only end writing automation by releasing it.
The reason is that REAPER doesn't provide a function `TrackFX_BeginParamEdit`, it only provides link:https://www.reaper.fm/sdk/reascript/reascripthelp.html#TrackFX_EndParamEdit[TrackFX_EndParamEdit].
@@ -0,0 +1,97 @@
= Target "FX parameter: Set value"
Sets the value of a particular track FX parameter.
== Parameter controls
Use them to set the parameter to be controlled.
Please note that both xref:further-concepts/target.adoc#particular-fx-selector[] and xref:further-concepts/target.adoc#at-position-selector[] address the FX by its position in the FX chain.
The difference between the two is that xref:further-concepts/target.adoc#particular-selector[] shows a dropdown containing the available parameters and xref:further-concepts/target.adoc#at-position-selector[] lets you enter the position as a number in a text field.
The latter is useful if at the time of choosing the position, the FX is not available.
== Retrigger checkbox
By default, ReaLearn doesn't set the parameter if it already has the desired value. That prevents unnecessary invocations.
However, some FX parameters are more like triggers. They don't actually have a value and are just used to trigger some action within that FX. In this case, it's important to enable _Retrigger_, which sets the parameter no matter what.
== Real-time checkbox
=== Main thread vs. real-time thread
By default, ReaLearn does FX parameter value adjustments from the so-called _main_ thread instead of the _real-time_ thread. That means, in the worst case, we get latency as long as one main loop cycle. One main loop cycle is usually around 30 ms.
In many control scenarios, this is completely acceptable. Basically, all control surface solutions including REAPER's built-in control surfaces, CSI and DrivenByMoss adjust FX parameters in the _main_ thread. Imagine you adjust a volume with a knob for mixing purposes. Such adjustments are usually rather slow and gradual, so it won't matter if the effect comes in 5 ms or 30 ms later.
However, ReaLearn is a tool not just for mixing, also for performing. And in performing, there's sometimes demand for low latencies and fast responses, even when controlling FX parameters.
=== Enabling real-time
If you enable this checkbox, ReaLearn will **under certain conditions** control the FX parameter from a _real-time_ thread, enabling much lower latencies. In particular, the latency will correspond to the configured audio device block size -- the same thing that influences how fast virtual instruments respond when you press a note.
The conditions are as follows:
Condition 1: Same track:: The controlled FX must be on the **same track** as the ReaLearn instance.
Condition 2: FX input:: The xref:key-concepts.adoc#input-port[] must be set to xref:user-interface/main-panel/input-output-section.adoc#fx-input[], **not** to a particular device.
In all other circumstances, ReaLearn will fall back to adjusting the FX parameter from the _main_ thread.
== Target-specific properties
This target supports the following additional xref:further-concepts/target.adoc#target-property[target properties].
[cols="m,1,3"]
|===
|Name|Type|Description
|
target.fx_parameter.index
|
Integer
|
Zero-based index of the resolved FX parameter.
|
target.fx_parameter.name
|
String
|
Name of the resolved FX parameter.
|
target.fx_parameter.macro.name
|
String
|
Name of the corresponding Pot macro parameter. Only works if this parameter is part of a preset loaded via Pot.
|
target.fx_parameter.macro.section.name
|
String
|
Name of the corresponding Pot macro parameter section. Only works if this parameter is part of a preset loaded via Pot.
|
target.fx_parameter.macro.section.index
|
Integer
|
Zero-based index of the corresponding Pot macro parameter section (within the current bank). Only works if this parameter is part of a preset loaded via Pot.
|
target.fx_parameter.macro.new_section.name
|
String
|
Name of the corresponding Pot macro parameter section, but only if this parameter marks the start of a new section. Only works if this parameter is part of a preset loaded via Pot.
|
target.fx_parameter.macro.bank.name
|
String
|
Name of the corresponding Pot macro parameter bank. Only works if this parameter is part of a preset loaded via Pot.
|===
@@ -0,0 +1,2 @@
= FX targets
@@ -0,0 +1,12 @@
= Target "FX: Browse presets"
Steps through FX presets.
This target is suited for use with xref:further-concepts/mapping.adoc#knob[knobs], xref:further-concepts/mapping.adoc#rotary-endless-encoder[encoders] and xref:user-interface/mapping-panel/glue-section.adoc#incremental-button[] because it allows you to step through the complete preset list.
The minimum value always represents _No preset_ whereas the maximum value always represents the last available preset.
It's _not_ suited for activating a particular preset (e.g. by setting xref:user-interface/mapping-panel/glue-section.adoc#target-min-max[] to the same value), because the preset list of an FX is usually not constant.
As soon as you modify the preset list, this value will might suddenly point to a completely different preset.
Even worse, the actual preset might have been deleted.
If you want to activate a particular preset, please use the xref:targets/fx/load-snapshot.adoc[] instead.
@@ -0,0 +1,3 @@
= Target "FX: Enable/disable"
Enables the FX instance if the incoming absolute control value is greater than 0%, otherwise disables it.
@@ -0,0 +1,8 @@
= Target "FX"
A target that allows you to define an FX, in its basic variant perfect for acquiring feedback for a specific FX.
== Act/Tags controls
The setting **Act/Tags** allows you to optionally set/pin the declared FX as xref:further-concepts/unit.adoc#unit-fx[].
This works pretty much the same as described in xref:targets/track/track.adoc[].
@@ -0,0 +1,13 @@
= Target "FX: Load snapshot"
Restores a certain state of a particular FX.
Before using this target, you need to take a snapshot of the desired FX state using the btn:[Take!] button.
This snapshot will be saved as part of ReaLearn's state itself and as a direct consequence as a part of your project.
This makes your project nicely self-contained.
It's perfect for activating particular FX presets because it will always restore the desired state, even if the preset list has changed.
This target supports feedback, but only if the snapshot is loaded via ReaLearn itself.
Please note that some plug-ins have _very large_ states.
Therefore, you should keep an eye on the snapshot size, which will be displayed once you take the snapshot.
ReaLearn's own state will grow with every new snapshot mapping, so this can quickly add up and make REAPER/ReaLearn slow!
@@ -0,0 +1,7 @@
= Target "FX: Open/close"
Makes the FX instance visible if the incoming control value is greater than 0%, otherwise hides it.
== Display menu
Here you can decide if you want to display the FX as part of the FX chain or in a dedicated floating window.
@@ -0,0 +1,3 @@
= Target "FX: Set online/offline"
Sets the FX instance online if the incoming absolute control value is greater than 0%, otherwise sets it offline.
@@ -0,0 +1,2 @@
= Global targets
@@ -0,0 +1,13 @@
= Target "Global: Last touched"
This will control whatever target has been last touched in REAPER.
It's similar to the built-in REAPER action "Adjust last touched FX parameter" but provides the following benefits:
. It's applicable to all ReaLearn targets that are learnable, not just FX parameters.
. It offers feedback.
. It can distinguish between parameter modifications caused by ReaLearn (i.e. hardware control) and those caused in other ways (e.g. via mouse).
== Pick button
This opens a window that lets you pick all considered target types and types of invocations (only macOS and Windows so far).
Last-touched targets not checked in this window will be ignored.
@@ -0,0 +1,36 @@
= Target "Global: Mouse"
This will control the mouse.
== Action menu
Move cursor to:: Moves the mouse cursor on the given axis in an absolute manner.
This is a good choice for absolute mouse movement, that is, if you want to position the mouse cursor to a specific screen position.
Although it's also possible to move the mouse cursor relatively with this action by controlling the target with relative messages, it's usually better to use _Move cursor by_ instead.
Move cursor by:: Moves the mouse cursor on the given axis in a relative manner.
This is a good choice if you want to move the cursor e.g. up a bit, starting from its current position.
This only works with relative control elements such as encoders or features such as xref:user-interface/mapping-panel/glue-section.adoc#make-relative[].
Press or release button:: Presses or releases a certain mouse button, depending on the incoming control value (0% = release, anything else = press).
[[turn-scroll-wheel]] Turn scroll wheel:: Simulates the scroll wheel.
== Axis menu
Determines the direction of movement or scrolling.
X (horizontal):: Horizontal movement or scrolling
[[mouse-axis-y]] Y (vertical):: Vertical movement or scrolling
== Button menu
Determines which mouse button to use.
TIP: One popular use of this target is to adjust the FX parameter under the mouse cursor.
For this, it's usually best to use action <<turn-scroll-wheel>> and <<mouse-axis-y>>.
TIP: You can unfold the magic of this target by combining multiple mappings.
E.g. one can simulate mouse dragging by using one mapping to press/release the left button and another mapping to move the cursor. link:https://raw.githubusercontent.com/helgoboss/realearn/master/resources/test-projects/issue-686-mouse-target.RPP[This example project] contains multiple examples (one per group).
WARNING: Feedback for this target is not fully implemented.
@@ -0,0 +1,11 @@
= Target "Global: Set automation mode override"
Sets the global automation mode override to the desired value if the incoming control value is greater than 0%, otherwise removes the override.
== Behavior menu
Lets you decide between not overriding anything, bypassing all envelopes or overriding with a specific automation mode.
== Mode menu
Here you can pick the desired automation mode if _Behavior_ is _Override_.
@@ -0,0 +1,2 @@
= Marker/region targets
@@ -0,0 +1,64 @@
= Target "Marker/region: Go to"
Navigates to a specific marker or region.
Here's the behavior in detail:
Regions::
* If the project is stopped, the editor cursor immediately jumps to the start position of the given region.
* If the project is playing, playback will continue with the given region as soon as the currently playing region (or measure if not within a region) has finished playing.
This is called "smooth seek".
* *Attention:* This currently doesn't work if the project containing ReaLearn is not the active project tab.
Markers::
* If the project is stopped, the editor cursor immediately jumps to the given marker.
* If the project is playing, playback will immediately be continued at the given marker.
The advantage over REAPER's built-in actions is that this target allows to target arbitrarily many markers/regions (either by position or by ID) … and that it supports visual feedback!
If you assign this target to a button which has an LED, you will see which marker/region is currently playing just by looking at your controller.
Please note that this doesn't work when recording!
== Marker/region selector menu
This dropdown lets you choose if you want to refer to a marker/region by its user-assigned ID or by its position on the timeline.
== Marker/region menu
This dropdown displays the markers or regions (depending on the _Regions_ checkbox state).
== Now! button
This sets the target to the currently playing (or currently focused, if stopped) marker/region.
== Behavior menu
Determines whether to use immediate or smooth seeking.
== Regions checkbox
Switches between markers and regions.
== Set loop points checkbox
For regions, this will additionally set the loop points to the region start and end position.
== Set time selection checkbox
For regions, this will additionally set the time selection to the region start and end position.
== Target-specific properties
This target supports the following additional xref:further-concepts/target.adoc#target-property[target properties].
[cols="m,1,3"]
|===
|Name|Type|Description
|target.bookmark.id | Intger | (Numeric) ID of the bookmark
|target.bookmark.index | Integer | Index of the bookmark (counting both markers and regions)
|target.bookmark.index_within_type | Integer | Index of the bookmark (counting only markers or regions, respectively)
|target.bookmark.name | String | Name of the bookmark
| target.bookmark.color | Color | Custom color of the resolved marker or region.
|===
@@ -0,0 +1,2 @@
= MIDI targets
@@ -0,0 +1,50 @@
= Target "MIDI: Send message"
[[target-midi-send-message]]
Sends arbitrary MIDI messages (also sys-ex!) in response to incoming messages.
This target turns ReaLearn into a capable and convenient MIDI/OSC/Keyboard-to-MIDI converter.
== Output menu
Where to send the MIDI message.
FX output:: Sends the MIDI message to the output of this ReaLearn instance - which usually means it flows into the FX below ReaLearn, e.g. a VST instrument.
Feedback output:: Sends the MIDI message to the device which is set as _output_.
[[midi-send-output-input-device]] Input device:: Injects the MIDI message into the current MIDI input device buffer.
Enables a unique feature called "Global MIDI transformation", as shown in link:https://www.youtube.com/watch?v=WJiwmlJSsi8&list=PL0bFMT0iEtAgKY2BUSyjEO1I4s20lZa5G&index=11[tutorial video 11].
== Device menu
When choosing output <<midi-send-output-input-device>>, you can choose into which MIDI input device buffer the message will be injected.
<Same as input device>:: Injects the message into the same buffer of the MIDI input device chosen as xref:user-interface/main-panel/input-output-section.adoc#input[].
_Specific input device_:: Injects the message into another specific MIDI input device.
This can be useful for doing global MIDI transformation with controllers that expose multiple MIDI input ports.
A practical example is shown in link:https://www.youtube.com/watch?v=WJiwmlJSsi8&list=PL0bFMT0iEtAgKY2BUSyjEO1I4s20lZa5G&index=11[tutorial video 11].
== Pattern field
Defines the MIDI message to be sent as xref:further-concepts/mapping.adoc#raw-midi-pattern[].
It allows you to encode the incoming _absolute_ control value as part of the message (after it has been processed by xref:key-concepts.adoc#glue[]).
== Pre-defined patterns menu (...)
Provides predefined patterns.
[NOTE]
.This is a target capable of real-time control!
====
This target is a bit special in that it carries out its processing logic exclusively in the audio thread if it's controlled by a MIDI source.
This has the big advantage that receiving and producing MIDI messages happens in one go (without inter-thread-communication latency), which is often important when using MIDI message conversion.
However, this also means that the following things won't work when controlling this target using MIDI:
* It can't take the lead in xref:user-interface/mapping-panel/glue-section.adoc#group-interaction[].
* It won't work with timed xref:user-interface/mapping-panel/glue-section.adoc#fire-mode[fire modes].
* If _output_ is set to xref:user-interface/main-panel/input-output-section.adoc#fx-output[], additional limitations apply:
** It can't act as a follower in xref:user-interface/mapping-panel/glue-section.adoc#group-interaction[], either.
** It can't participate in xref:targets/realearn/load-mapping-snapshot.adoc[].
====
@@ -0,0 +1,2 @@
= OSC targets
@@ -0,0 +1,15 @@
= Target "OSC: Send message"
Sends OSC messages with up to one argument in response to incoming messages.
This target turns ReaLearn into a capable and convenient MIDI → OSC and OSC → OSC converter.
If an argument number is entered (e.g. `1`), it will encode the incoming absolute control value as that argument (after it has been processed by the glue section).
== Output menu
Where to send the OSC message.
<Feedback output>:: Sends the OSC message to the device which is set as _Output_.
Of course this only works if it's an OSC device.
_Specific device:_:: Sends the OSC message to a specific device.
Address, Argument and Range:: These correspond to the identically named settings of xref:sources/osc.adoc[].
Check that section for details.
@@ -0,0 +1,69 @@
= Playtime targets
The targets in this section are made for controlling xref:playtime::introduction.adoc[Playtime], the clip launcher contained in Helgobox.
[[column-selector]]
== Column selector
Column-related targets use a _column selector_ to define what xref:playtime::key-concepts.adoc#column[] the target should be applied to.
The following kinds of column selectors are available:
Active::
The xref:playtime::further-concepts/matrix.adoc#active-cell[currently active] column.
At position::
Here you can refer to a fixed column by entering the column number, e.g. 2.
Dynamic::
Allows you to dynamically refer to a certain column. See <<dynamic-selector-variables>>.
[[row-selector]]
== Row selector
Row-related targets use a _row selector_ to define what xref:playtime::key-concepts.adoc#row[] the target should be applied to.
The following kinds of row selectors are available:
Active::
The xref:playtime::further-concepts/matrix.adoc#active-cell[currently active] row.
At position::
Here you can refer to a fixed column by entering the row number, e.g. 2.
Dynamic::
Allows you to dynamically refer to a certain row. See <<dynamic-selector-variables>>.
[[slot-selector]]
== Slot selector
Slot-related targets use a _slot selector_ to define what xref:playtime::key-concepts.adoc#slot[] the target should be applied to.
The following kinds of slot selectors are available:
Active::
The xref:playtime::further-concepts/matrix.adoc#active-cell[currently active] slot.
At coordinates::
Here you can refer to a fixed slot by entering the slot address, e.g. 2 and 4. The first number is the number of the xref:playtime::key-concepts.adoc#column[], the second one the number of the xref:playtime::key-concepts.adoc#row[].
Dynamic::
Allows you to dynamically refer to a certain slot. There are two expressions, the first one should evaluate to the column index and the second one to the row index. As always, expressions must evaluate to zero-based indexes! See <<dynamic-selector-variables>>.
[[dynamic-selector-variables]]
== Dynamic selector variables
In addition to the general variables described in xref:further-concepts/target.adoc#dynamic-selector[], the dynamic selectors mentioned above grants access to the following variables:
[cols="m,1,3"]
|===
| Variable | Type | Description
| control_unit_column_index
| Integer >= 0
| Column index of the current top-left scroll position within the xref:playtime::further-concepts/matrix.adoc#control-unit[Playtime control unit] represented by this xref:key-concepts.adoc#unit[ReaLearn unit].
| control_unit_row_index
| Integer >= 0
| Row index of the current top-left scroll position within the xref:playtime::further-concepts/matrix.adoc#control-unit[Playtime control unit] represented by this xref:key-concepts.adoc#unit[ReaLearn unit].
|===
@@ -0,0 +1,9 @@
= Target "Playtime: Browse cells"
Changes the currently xref:playtime::further-concepts/matrix.adoc#active-cell[].
Best uses with xref:further-concepts/mapping.adoc#rotary-endless-encoder[encoders] or previous/next-style buttons.
== Axis
Sets the direction into which to browse.
@@ -0,0 +1,23 @@
= Target "Playtime: Column action"
Invokes a xref:playtime::key-concepts.adoc#column[]-related action.
== Action menu
The kind of action to be executed.
Stop::
Stops all slots in this column.
Arm/disarm::
When hit with an _on_ value, arms the associated xref:playtime::key-concepts.adoc#column-track[], otherwise disarms it.
Arm/disarm () exclusive::
When hit with an _on_ value, arms the associated xref:playtime::key-concepts.adoc#column-track[] and disarms all other column tracks, otherwise disarms it.
Activate::
Makes this column the xref:playtime::further-concepts/matrix.adoc#active-cell[] .
== Column menu
The xref:playtime::key-concepts.adoc#column[] on which to carry out this action. See xref:targets/playtime.adoc#column-selector[].
@@ -0,0 +1,7 @@
= Target "Playtime: Control unit scroll"
Controls the current xref:playtime::further-concepts/matrix.adoc#control-unit-scroll-position[] of the xref:playtime::further-concepts/matrix.adoc#control-unit[] represented by this xref:key-concepts.adoc#unit[ReaLearn unit].
== Axis
Sets the direction into which to scroll.
@@ -0,0 +1,52 @@
= Target "Playtime: Matrix action"
Invokes a xref:playtime::key-concepts.adoc#matrix[]-related action.
== Action menu
The kind of action to be executed.
Stop::
Stops all clips in the matrix. See xref:playtime::user-interface/matrix-area.adoc#column-cell-stop[]. Supports real-time operation.
Undo::
When hit with an _on_ value, undoes the last matrix operation. See xref:helgobox::app/user-interface/title-bar.adoc#title-bar-undo[].
Redo::
When hit with an _on_ value, redoes the last matrix operation. See xref:helgobox::app/user-interface/title-bar.adoc#title-bar-redo[].
Build scene::
When hit with an _on_ value, builds a xref:playtime::key-concepts.adoc#scene[] of all currently playing xref:playtime::key-concepts.adoc#clip[clips] in the first empty xref:playtime::key-concepts.adoc#row[].
Set record length mode::
Switches to a specific record-length mode. At the moment, only two possible modes exist: *Open end* and *Custom length* are supported. They correspond to the off and on state of xref:playtime::user-interface/inspector/matrix/recording.adoc#inspector-matrix-recording-length[].
Set custom record length in bars::
Sets the xref:playtime::user-interface/inspector/matrix/recording.adoc#inspector-matrix-recording-length[] to the desired number of bars.
Enable/disable click::
When hit with an _on_ value, enables the xref:playtime::user-interface/toolbar.adoc#toolbar-metronome[], otherwise disables it.
Enable/disable MIDI auto-quantize::
When hit with an _on_ value, enables xref:playtime::user-interface/inspector/matrix/recording.adoc#inspector-matrix-recording-auto-quantize[], otherwise disables it.
Smart record::
When hit with an _on_ value, triggers the xref:playtime::user-interface/toolbar.adoc#toolbar-smart-record[] function. If this leads to the stop of a xref:playtime::further-concepts/matrix.adoc#feature-tempo-detection[], the operation can be carried out in real-time.
Start or stop playback::
When hit with an _on_ value, this starts Playtime playback and plays all xref:playtime::further-concepts/slot.adoc#ignited-slot[ignited] slots. Otherwise, this stops Playtime playback. This basically resembles the xref:playtime::user-interface/toolbar.adoc#toolbar-start-stop-playback[] button. This action supports real-time invocation.
Enable/disable silence mode::
When hit with an _on_ value, this stops Playtime playback. Otherwise, it starts playback _without_ playing xref:playtime::further-concepts/slot.adoc#ignited-slot[ignited] slots. This action supports real-time invocation.
Panic::
This abruptly stops all clips in the matrix. This resembles a double click on the xref:playtime::user-interface/matrix-area.adoc#matrix-cell-stop[] button. This action supports real-time invocation.
Enable/disable sequencer recording::
When hit with an _on_ value, this starts recording a new xref:playtime::key-concepts.adoc#matrix-sequence[], otherwise it stops recording.
Enable/disable sequencer playing::
When hit with an _on_ value, this starts playting the currently active xref:playtime::key-concepts.adoc#matrix-sequence[], otherwise it stops playing.
Tap tempo::
Invokes the tap-tempo function. This action supports real-time invocation. See xref:playtime::user-interface/toolbar.adoc#toolbar-tap-tempo[].
@@ -0,0 +1,26 @@
= Target "Playtime: Row action"
== Action menu
The kind of action to be executed.
Most of the actions only execute when the target is hit with an _on_ value. In all other cases, it's specifically mentioned.
Play::
Acts like the xref:playtime::user-interface/matrix-area.adoc#row-cell-play-scene[] button. This action supports real-time invocation.
Build scene::
Acts like the xref:playtime:ROOT:user-interface/menus/row-menu.adoc#row-build-scene-from-currently-playing-clips[] function.
Clear::
Acts like the xref:playtime:ROOT:user-interface/menus/row-menu.adoc#row-clear[] function.
Copy or paste::
If the row contains clips, copies them to a matrix-internal clipboard. If the row is empty, attempts to paste clips from the matrix-internal clipboard into that row, replacing existing ones.
Activate::
Makes this row the xref:playtime::further-concepts/matrix.adoc#active-cell[].
== Row menu
The xref:playtime::key-concepts.adoc#row[] on which to carry out this action. See xref:targets/playtime.adoc#row-selector[].
@@ -0,0 +1,56 @@
= Target "Playtime: Slot management action"
Invokes a xref:playtime::key-concepts.adoc#slot[]-related action that has something to do with modifying slots.
== Action menu
The kind of action to be executed.
Most of the actions only execute when the target is hit with an _on_ value. In all other cases, it's specifically mentioned.
Clear slot::
See xref:playtime:ROOT:user-interface/menus/slot-menu.adoc#slot-clear[].
Fill slot with selected item::
See xref:playtime:ROOT:user-interface/menus/slot-menu.adoc#slot-import-selected-item[].
Edit first clip::
When hit with an _on_ value, opens the MIDI editor for the primary clip in the slot, otherwise close its. Works for MIDI clips only.
Copy or paste clip::
If the slot contains clips, copies them to a matrix-internal clipboard. If the slot is empty, attempts to paste clips from the matrix-internal clipboard into that slot, replacing existing ones.
Double clip section length::
Doubles the xref:playtime::user-interface/inspector/clip.adoc#inspector-clip-length[] of each clip contained in the slot.
Halve clip section length::
Halves the xref:playtime::user-interface/inspector/clip.adoc#inspector-clip-length[] of each clip contained in the slot.
Quantization on/off state::
When hit with an _on_ value, quantizes the first MIDI clip in this slot, otherwise un-quantizes it.
Duplicate::
Duplicates the clips of this slot to the slot below. If the slot below already contains clips, they will get replaced.
Activate::
Makes this slot the xref:playtime::further-concepts/matrix.adoc#active-cell[].
include::partial$targets/playtime/slot-menu.adoc[]
== Target-specific properties
This target supports the following additional xref:further-concepts/target.adoc#target-property[target properties].
[cols="m,1,3"]
|===
|Name|Type|Description
|
target.clip.name
|
String
|
Name of the first clip in the slot.
|===
@@ -0,0 +1,14 @@
= Target "Playtime: Slot seek"
This target exists mainly to provide xref:key-concepts.adoc#feedback[] about the current playback position of the xref:playtime::key-concepts.adoc#slot[].
For example, you can use it to make an LED ring, motor fader or text display indicate the current playback position.
[CAUTION]
====
This also works in xref:key-concepts.adoc#control[control direction], changing the current play position of the clips in that slot. But this is **experimental**.
====
include::partial$targets/feedback-frequency-menu.adoc[]
include::partial$targets/playtime/slot-menu.adoc[]
@@ -0,0 +1,52 @@
= Target "Playtime: Slot transport action"
Invokes a xref:playtime::key-concepts.adoc#slot[]-related action that has something to do with transport.
All actions that are about starting and stopping slots are real-time capable, which means they can be executed in real-time when controlled via xref:sources/midi.adoc[].
== Action menu
The kind of action to be executed.
[[trigger]] Trigger::
xref:playtime::further-concepts/matrix.adoc#trigger-slot[Triggers] the slot.
Play/stop::
When hit with an _on_ value, starts slot playback, otherwise stops it.
Play/pause::
When hit with an _on_ value, starts slot playback, otherwise pauses it.
+
CAUTION: Pausing slots is experimental.
Stop::
When hit with an _on_ value, stops the slot.
Pause::
When hit with an _on_ value, pauses the slot.
+
CAUTION: Pausing slots is experimental.
Record/stop::
When hit with an _on_ value, starts slot recording, otherwise stops it.
Record/play/stop::
When hit with an _on_ value and the slot is empty, starts slot recording.
+
When hit with an _on_ value and the slot contains clips, starts playback.
+
When hit with an _off_ value, stops the slot.
Overdub/play::
When hit with an _on_ value, starts MIDI-overdubbing the slot, otherwise stops it.
Looped::
Controls the xref:playtime::user-interface/inspector/clip.adoc#inspector-clip-looped[] setting of the clip.
include::partial$targets/playtime/slot-menu.adoc[]
== Stop if empty
If this is checked, and you play or trigger empty slots, all slots in that column will be stopped.
In other words, this makes empty slots act as stop button.
@@ -0,0 +1,5 @@
= Target "Playtime: Slot volume"
Sets the xref:playtime::user-interface/inspector/clip.adoc#inspector-clip-volume[volume] property of all clips in a xref:playtime::key-concepts.adoc#slot[].
include::partial$targets/playtime/slot-menu.adoc[]
@@ -0,0 +1,2 @@
= Pot targets
@@ -0,0 +1,32 @@
= Target "Pot: Browse filter items"
This target can be used to filter the potentially very large collection of presets in xref:targets/pot/browse-presets.adoc[].
The idea is to map this target to an endless rotary encoder or previous/next buttons (using xref:user-interface/mapping-panel/glue-section.adoc#incremental-button[] mode) and then navigate within the available filter items, e.g. instruments or banks.
== Kind menu
Choose the kind of filter items that you want to browse.
They correspond to the filters available in xref:helgobox::products.adoc#pot-browser[].
== Target-specific properties
This target supports the following additional xref:further-concepts/target.adoc#target-property[target properties].
[cols="m,1,3"]
|===
|Name|Type|Description
|
target.item.name
|
String
|
Name of the filter item.
|
target.item.parent.name
|
String
|
Name of the parent filter item if there's any. E.g. the instrument to which a bank belongs or the type to which a subtype belongs.
|===
@@ -0,0 +1,60 @@
= Target "Pot: Browse presets"
Use this target to browse a collection of presets.
By default, this is the complete collection of presets available in all supported databases, so potentially thousands of presets.
If you want to browse just a subset, see xref:targets/pot/browse-filter-items.adoc[].
The idea is to map this target to an endless rotary encoder or previous/next buttons (using xref:user-interface/mapping-panel/glue-section.adoc#incremental-button[] mode) and then navigate within the available presets.
Once you have selected a preset, you can audition it via xref:targets/pot/preview-preset.adoc[] (if it's a sound preset) and load it via xref:targets/pot/load-preset.adoc[].
== Target-specific properties
This target supports the following additional xref:further-concepts/target.adoc#target-property[target properties].
[cols="m,1,3"]
|===
|Name|Type|Description
|
target.preset.name
|
String
|
Name of the preset.
|
target.preset.product.name
|
String
|
Name of the product to which this preset belongs, if available.
|
target.preset.file_ext
|
String
|
File extension of the preset, in case it's a file-based preset.
|
target.preset.author
|
String
|
Name of the preset author, if available.
|
target.preset.vendor
|
String
|
Name of the preset vendor, if available.
|
target.preset.comment
|
String
|
Preset comment, if available.
|===
@@ -0,0 +1,19 @@
= Target "Pot: Load preset"
Loads a preset selected via xref:targets/pot/browse-presets.adoc[].
NOTE: This needs at least REAPER version 6.69+dev1030! Also, it only works if you have the VST2/VST2i version of the corresponding plug-in installed.
NKS audio file presets will be loaded into ReaSamplOmatic5000.
== Track/FX controls
You must tell the target at which FX slot to load the corresponding plug-in.
The best idea is to use FX selector xref:further-concepts/target.adoc#at-position-selector[].
Selectors such as xref:further-concepts/target.adoc#particular-fx-selector[] or xref:further-concepts/target.adoc#named-fx-selector[] are not suited because the target might replace the plug-in with another one, in which the unique FX ID and the FX name can change.
Then the target would turn inactive and stop working.
== Target-specific properties
This target supports the same additional xref:further-concepts/target.adoc#target-property[target properties] as xref:targets/pot/browse-presets.adoc[].
The only difference is that the ones in this one relate to the currently loaded preset, not the one that's selected in the preset browser.
@@ -0,0 +1,4 @@
= Target "Pot: Preview preset"
Auditions a preset selected via xref:targets/pot/browse-presets.adoc[].
Only works if it's a sound preset and a sound preview file is available.
@@ -0,0 +1,2 @@
= Project targets
@@ -0,0 +1,10 @@
= Target "Project: Any on (solo/mute/...)"
This target is most useful in feedback direction.
Map it to some LED on your controller and the LED will light up if at least one of the tracks in your project is e.g. mute (depending on the track parameter in question).
If the control element is also a button, pressing the button will e.g. unmute all tracks in your project.
== Parameter menu
The track parameter in question.
@@ -0,0 +1,29 @@
= Target "Project: Browse tracks"
Steps through tracks.
To be used with endless rotary encoders or xref:user-interface/mapping-panel/glue-section.adoc#incremental-button[].
== Scroll TCP checkbox
See xref:targets/track/select-unselect.adoc[].
== Scroll mixer checkbox
See xref:targets/track/select-unselect.adoc[].
== Scope menu
Decides which tracks are considered and how.
All tracks:: Considers all tracks even those which are hidden.
Only tracks visible in TCP:: Considers only those tracks which are visible in the track control panel.
Only tracks visible in TCP (allow 2 selections):: Like "Only tracks visible in TCP" but makes it possible to have 2 selections.
One for the MCP and one for the TCP.
These selections can be moved independently.
This can make sense if you have a bunch of tracks that you only show in the TCP and another separate bunch of tracks that you only show in the MCP.
Only tracks visible in MCP:: Considers only those tracks which are visible in the mixer control panel.
Only tracks visible in MCP (allow 2 selections):: See above.
@@ -0,0 +1,80 @@
= Target "Project: Invoke REAPER action"
Triggers or sets the value of a particular REAPER action in the main section.
== Section menu
Specifies in which context the action is going to be invoked.
Main:: Invokes a main action.
Active MIDI editor:: Invokes a MIDI editor action, applied to the currently active MIDI editor.
Active MIDI event list editor:: Invokes a MIDI event list action, applied to the currently active MIDI editor.
Media explorer:: Invokes a media explorer action.
[[invocation-type]]
== Invocation type
Specifies _how_ the picked action is going to be controlled.
Trigger:: Invokes the action with the incoming absolute control value, but only if it's greater than 0%.
Most suitable for simple trigger-like actions that neither have an on/off state nor are annotated with "(MIDI CC/OSC only)" or similar.
Absolute 14-bit:: Invokes the action with the incoming absolute control value, even if it's 0%.
Most suitable for actions which either have an on/off state or are annotated with "(MIDI CC/OSC only)" or similar.
The resolution of the invocation is 14-bit, no matter what's the resolution of your control element).
Absolute 7-bit:: Just like the previous invocation mode but uses 7-bit resolution.
Might be necessary for actions provided by 3rd-party extensions which don't interpret 14-bit control values correctly.
In all other circumstances, 14-bit is probably the better default choice.
Relative:: Invokes the action with the incoming relative control value (absolute ones are ignored).
Only works for actions that are annotated with ("MIDI CC relative only") or similar.
== Pick! button
Opens REAPER's action dialog so you can select the desired action.
== With track checkbox
Allows you to choose a track which ReaLearn will select before executing the action.
This makes it possible to combine ReaLearn's flexible track selection capabilities with the plethora of REAPER actions that work on the currently selected track.
== Limitations
The particular action decides if toggling/feedback works completely, has limitations or is not possible at all.
There are multiple types of actions so it's not possible to settle with one invocation type and be done with it.
The types of actions can roughly be divided into:
Actions that take care of toggling themselves _and_ report on/off state::
* Example: "25. Track: Toggle record arm for track 01"
* If you want toggle behavior, you have 2 options:
** a) Set Invoke to "Absolute" and Mode to "Toggle button" (preferred).
** b) Set Invoke to "Trigger" and Mode to "Normal".
* Feedback is completely supported.
Actions that take care of toggling themselves but _don't_ report on/off state::
* Example: "40175. Item properties: Toggle mute"
* Toggle behavior is achieved as described in (1) but support for toggling and feedback has limitations (explained in (4)).
Actions that don't take care of toggling themselves ("trigger only")::
* Example: "1007. Transport: Play"
* There's no way to make such an action toggle because the action is not designed to do so.
* If the action reports an on/off state, feedback is completely supported though, otherwise not at all!
Actions that have a complete range of values as state::
* Example: "994. View: Adjust vertical zoom (MIDI CC/OSC only)"
* Since ReaLearn 2 and REAPER 6.20, there's special support for this type of actions.
Starting from the first time this action is triggered, ReaLearn will track its current value.
* That's why toggling is supported.
Because ReaLearn itself takes care of toggling, you need to set _Invoke_ to "Absolute" and Mode to "Toggle button".
* Feedback is also supported.
* Toggling/feedback for this type of actions comes with some inherent limitations that are related to the fact that a) REAPER itself doesn't necessarily use actions to invoke its own functions and b) MIDI CC/OSC actions don't have the concept of a "current value" (unlike e.g. toggle actions or FX parameters).
* The bottom line of these limitations is that toggling/feedback will only work if the action itself is used to trigger the change and if the action is an absolute action (not relative).
* Limitations in detail:
+
. In most cases, feedback will not work when changing the value in REAPER directly (e.g. when adjusting vertical zoom directly via the REAPER user interface).
. It will only work for actions that support some kind of absolute value range (usually the case for all non-relative MIDI CC/OSC actions).
. When the action is invoked via ReaLearn, the feedback will only work if "Invoke" is "Trigger" or "Absolute".
It won't work with "Relative".
. When the action is invoked from ReaScript or other extensions, it will only work if the invocation was done via `KBD_OnMainActionEx()` and an absolute value change.
. When the action is invoked via a native REAPER action mapping, it will only work if the invocation is done using absolute MIDI CC/OSC (not relative).
@@ -0,0 +1,16 @@
= Target "Project: Invoke transport action"
Invokes a transport-related action.
== Action menu
Specifies which transport action should be invoked.
Play/stop:: Starts playing the containing project if the incoming absolute control value is greater than 0%, otherwise invokes stop.
Play/pause:: Starts playing the containing project if the incoming absolute control value is greater than 0%, otherwise invokes pause.
Stop:: Stops the containing project if the incoming absolute control value is greater than 0%.
Useful for distinguishing feedback between _paused_ and _stopped_ state.
Pause:: Pauses the containing project if the incoming absolute control value is greater than 0%.
Useful for distinguishing feedback between _paused_ and _stopped_ state.
Record:: Starts/enables recording for the current project if the incoming absolute control value is greater than 0%, otherwise disables recording.
Repeat:: Enables repeat for the containing project if the incoming absolute control value is greater than 0%, otherwise disables it.
@@ -0,0 +1,72 @@
= Target "Project: Seek"
Allows you to use faders, knobs, encoders or incremental buttons to seek within portions of your project … with feedback that indicates the current position!
include::partial$targets/feedback-frequency-menu.adoc[]
== Behavior menu
Determines whether to use immediate or smooth seeking.
== Seek play checkbox
Doesn't just change the edit cursor but also changes the play position when the project is currently being played.
== Move view checkbox
Allow to scroll / change viewport when seeking.
== "Use" checkboxes
The following checkboxes determine which time ranges will be taken into consideration as reference for seeking (control) and feedback.
If you don't tick any "Use" checkbox, ReaLearn will seek within the currently visible viewport.
If you tick multiple options, this is the order of fallbacks:
* If there's no time selection, the loop points will be used.
* If there are no loop points, the current region is used.
* If there's no current region, the project will be used.
* If the project is empty, the viewport will be used.
=== Use time selection checkbox
Can use the currently set time selection as reference.
=== Use loop points checkbox
Can use the currently set loop points as reference.
=== Use regions checkbox
Can use the current region as reference.
=== Use project checkbox
Can use the complete project as reference, from start to end.
== Target-specific properties
This target supports the following additional xref:further-concepts/target.adoc#target-property[target properties].
[cols="m,1,3"]
|===
|Name|Type|Description
|target.position.project_default | String | Position in the current transport time unit
|target.position.time | String | _minute:second.milli_
|target.position.measures_beats_time | String | _measure.beat.milli_
|target.position.measures_beats | String | _measure.beat.milli_
|target.position.seconds | String | _second.milli_
|target.position.samples | String | _sample_
|target.position.hmsf | String | _hour:minute:second:milli_
|target.position.absolute_frames | String | _frames_
|target.position.project_default.mcu | String | Like `target.position.project_default` but tailored to Mackie Control timecode displays
|target.position.time.mcu | String | Like `target.position.time` but tailored to Mackie Control timecode displays
|target.position.measures_beats_time.mcu | String | Like `target.position.measures_beats_time` but tailored to Mackie Control timecode displays
|target.position.measures_beats.mcu | String | Like `target.position.measures_beats` but tailored to Mackie Control timecode displays
|target.position.seconds.mcu | String | Like `target.position.seconds` but tailored to Mackie Control timecode displays
|target.position.samples.mcu | String | Like `target.position.samples` but tailored to Mackie Control timecode displays
|target.position.hmsf.mcu | String | Like `target.position.hmsf` but tailored to Mackie Control timecode displays
|target.position.absolute_frames.mcu | String | Like `target.position.absolute_frames` but tailored to Mackie Control timecode displays
|===
@@ -0,0 +1,5 @@
= Target "Project: Set playrate"
Sets REAPER's master playrate.
CAUTION: This target doesn't currently work if the project containing ReaLearn is not the active project tab.
@@ -0,0 +1,5 @@
= Target "Project: Set tempo"
Sets REAPER's master tempo.
This target is not learnable anymore via the "Learn target" button and also not eligible for the xref:targets/global/last-touched.adoc[] because it causes too many "false positives".
@@ -0,0 +1,2 @@
= ReaLearn targets
@@ -0,0 +1,33 @@
= Target "ReaLearn: Browse group mappings"
This target lets you choose an arbitrary mapping group in this compartment and cycle through it with an encoder/fader/knob or incremental (previous/next) buttons.
"Cycling through" means that you move from one mapping in the group to the next one by hitting the next mapping's target with the _Target Max_ value in its glue section (by default 100%).
== Group menu
The group that you want to browse.
== Exclusivity menu
Non-exclusive:: Really just hits the target of the mapping which is next in the line and doesn't do anything with the other mappings.
In many cases this is enough, e.g. if the targets of the mappings in the cycled group are the same and just "Target Max" is different.
Or if the target itself already takes care of exclusivity.
Exclusive:: Doesn't just hit the target of the mapping which is next in the line but also hits the targets of all other mappings in the cycled group with their respective _Target Min_ value (by default 0%).
Be careful with this, you often won't need it.
Inactive mappings are skipped!
[TIP]
====
A mapping group lends itself perfectly for defining things that should happen _in sequence_.
This target allows you to take advantage of that!
- Combine it with xref:targets/realearn/enable-disable-mappings.adoc[] to browse different banks.
- Combine it with xref:targets/realearn/enable-disable-instances.adoc[] to browse completely different controller setups (or banks).
- Combine it with targets that don't provide a "Browse ..." variant themselves.
- Use it as an alternative to xref:further-concepts/glue.adoc#target-value-sequence[target value sequences] that allows you to have completely different targets within one sequence.
====
[split=0]
@@ -0,0 +1,7 @@
= Target "ReaLearn: Dummy"
This target simply does nothing when invoked and also doesn't provide any meaningful feedback on its own.
It's sometimes useful to have such a dummy target, e.g. combined with xref:user-interface/mapping-panel/glue-section.adoc#group-interaction[].
Or if you want to use ReaLearn as a MIDI filter which just "eats" an incoming MIDI message.
Or if you want to send some text feedback to a hardware display, if the text is just a constant string or uses a placeholder that doesn't need target context.
@@ -0,0 +1,42 @@
= Target "ReaLearn: Enable/disable instances"
This target allows you to flexibly enable or disable other ReaLearn instances based on instance or unit tags.
== Tag kind menu
Instance tags::
A ReaLearn instance matches when at least one of its units is tagged with any of the xref:further-concepts/instance.adoc#instance-tag[instance tags] entered into the **tags** field.
Unit tags::
A ReaLearn instance matches when at least one of its units is tagged with any of the xref:further-concepts/unit.adoc#unit-tag[unit tags] entered into the **tags** field.
+
WARNING: Controlling instances via unit tags can be counter-intuitive, please use instance tags instead! This option is retained for backward compatibility only.
== Exclusivity menu
Non-exclusive:: If the incoming control value is greater than 0%, all matching ReaLearn instances will be enabled (on top of the already enabled instances).
If the value is 0%, all matching ReaLearn instances will be disabled.
Exclusive:: If the incoming control value is greater than 0%, all matching ReaLearn instances will be enabled and all non-matching ones will be disabled.
If the value is 0%, it's exactly the opposite (react to button xref:user-interface/mapping-panel/glue-section.adoc#press-only[press only] if you don't want this to happen).
Exclusive (on only):: Variation of _Exclusive_ that applies exclusivity only if the incoming control value is greater than 0%.
== Tags field
Here you enter the instance or unit tags, separated by commas.
.Comma-separated tags
====
keys, guit, voc
====
== Remarks
* This affects other ReaLearn instances only. It doesn't match against this one.
* ReaLearn instances without tags won't be affected at all.
* Only affects instances in the same project.
If _this_ ReaLearn instance is on the monitoring FX chain, it only affects other instances in the monitoring FX chain.
TIP: This target is great for switching between completely different controller setups!
@@ -0,0 +1,24 @@
= Target "ReaLearn: Enable/disable mappings"
This target allows you to flexibly enable or disable other mappings in this unit based on their tags:
== Exclusivity menu
Non-exclusive:: If the incoming control value is greater than 0%, all matching mappings will be enabled (on top of the already enabled mappings).
If the value is 0%, all matching mappings will be disabled.
Exclusive:: If the incoming control value is greater than 0%, all matching mappings will be enabled and all non-matching ones will be disabled.
If the value is 0%, it's exactly the opposite (react to button xref:user-interface/mapping-panel/glue-section.adoc#press-only[press only] if you don't want this to happen).
Exclusive (on only):: Variation of _Exclusive_ that applies exclusivity only if the incoming control value is greater than 0%.
== Tags field
A mapping matches when it is tagged with any of the xref:further-concepts/mapping.adoc#mapping-tag[mapping tags] entered into this field (comma-separated).
== Remarks
* This affects other mappings only, not _this_ mapping.
* Mappings without tags won't be affected at all.
TIP: This target is a straightforward alternative to xref:further-concepts/mapping.adoc#conditional-activation[] when it comes to bank switching!
@@ -0,0 +1,27 @@
= Target "ReaLearn: Enable/disable units"
This target allows you to flexibly enable or disable other ReaLearn units within the same ReaLearn instance.
== Exclusivity menu
Non-exclusive:: If the incoming control value is greater than 0%, all matching ReaLearn units will be enabled (on top of the already enabled units).
If the value is 0%, all matching ReaLearn units will be disabled.
Exclusive:: If the incoming control value is greater than 0%, all matching ReaLearn units will be enabled and all non-matching ones will be disabled.
If the value is 0%, it's exactly the opposite (react to button xref:user-interface/mapping-panel/glue-section.adoc#press-only[press only] if you don't want this to happen).
Exclusive (on only):: Variation of _Exclusive_ that applies exclusivity only if the incoming control value is greater than 0%.
== Tags field
Here you enter the unit tags, separated by commas.
.Comma-separated tags
====
keys, guit, voc
====
== Remarks
* This affects other ReaLearn units only. It doesn't match against this one.
* ReaLearn units without tags won't be affected at all.
@@ -0,0 +1,35 @@
= Target "ReaLearn: Load mapping snapshot"
Restores target values for all or certain mappings in this ReaLearn unit.
== Snapshot menu
Choose the snapshot that you want to load.
<Initial>:: Restores the initial target values for the mappings.
By ID:: Restores target values contained in a snapshot that was taken via xref:targets/realearn/take-mapping-snapshot.adoc[].
Enter the corresponding ID here.
== Default field
Allows you to define a default target value to restore for each participating mapping whenever the snapshot either doesn't exist or doesn't contain a value for that mapping.
If that participating mapping has reverse checked, the inverse of the default value will be loaded.
== Tags field
Allows you to restrict the set of mappings whose target values will be restored.
* If this field is empty, target values of all mappings will be restored.
* If this field contains tags (comma-separated), target values will be restored only for mappings that are tagged with any of these.
== Active mappings only checkbox
By default, even target values for inactive (but control-enabled) mappings are restored!
If you don't like that, tick this checkbox.
== Remarks
* Mappings for which control is not enabled, never participate in snapshotting.
* Some targets don't report values and therefore don't participate in snapshotting.
* Feedback of this target indicates whether the desired snapshot is the one which has last been loaded (for the given tags).
@@ -0,0 +1,23 @@
= Target "ReaLearn: Modify mapping"
Triggers a modification of another ReaLearn mapping.
== Kind menu
The kind of modification.
Learn target:: Switches "Learn target" on or off for the destination mapping.
Use button btn:[...] to pick the considered target types and invocations to be included in the learning process.
Set target to last touched:: Sets the target of the destination mapping to the last-touched target.
Use button btn:[...] to pick the considered target types and invocations.
== Unit menu
Allows you to pick another ReaLearn unit.
== Mapping menu
Allows you to pick the destination mapping.
TIP: This target is great to "pin" targets to certain control elements on demand.
@@ -0,0 +1,26 @@
= Target "ReaLearn: Take mapping snapshot"
Memorizes target values for all or certain mappings in this ReaLearn units and saves them in a snapshot of your choice.
== Snapshot menu
Choose the snapshot to which you want to save the mapping values.
<Last loaded>:: Always chooses the snapshot which is currently active (was last loaded) for the given tags.
+
Only works if tags are not empty and if all tags have the same last-loaded snapshot.
So the best is if you always enter exactly one tag.
+
By ID:: Enter the unique ID of the snapshot, e.g. `scene_1`.
== Tags field
Allows you to restrict the set of mappings whose target values will be memorized.
* If this field is empty, target values of all mappings will be memorized.
* If this field contains tags (comma-separated), target values will be memorized only for mappings that are tagged with any of these.
== Active mappings only checkbox
By default, even target values of inactive (but control-enabled) mappings end up in the snapshot!
If you don't like that, tick this checkbox.
@@ -0,0 +1,42 @@
= Send/receive targets
The following UI elements are available for all targets that require a send/receive.
[[kind]]
== Kind menu
The kind of send/receive that you want to control.
[[send]] Send:: Send from the track above to another track of your choice.
[[receive]] Receive:: Receive from another track of your choice to the track above (opposite direction of send).
[[output]] Output:: Send from the track to a hardware output.
== Send/Receive/Output section
This lets you choose the actual send/receive/output.
The meaning of xref:further-concepts/target.adoc#particular-selector[] and xref:further-concepts/target.adoc#named-selector[] depends on which kind you have selected:
For kinds <<send>> (or <<receive>>)::
xref:further-concepts/target.adoc#particular-selector[]:::
ReaLearn will memorize the _ID_ of the destination track (or source track).
That way you will still control the correct send (or receive) even if you delete another send (receive) in that track.
+
WARNING: If you have multiple sends to (or receives from) the same destination (or source) track, you will only be able to address the first one.
In that case, use selector xref:further-concepts/target.adoc#at-position-selector[] instead.
xref:further-concepts/target.adoc#named-selector[]:::
ReaLearn will memorize the _name_ of the destination (or source) track.
That way you will still control the correct send (receive) even if you delete another send (receive) in that track.
+
WARNING: If you have multiple sends to (or receives from) the same destination (or source) track, you will only be able to address the first one.
In that case, use selector xref:further-concepts/target.adoc#at-position-selector[] instead.
For kind <<output>>::
xref:further-concepts/target.adoc#particular-selector[]:::
ReaLearn will memorize the _position_ of the hardware output because hardware outputs don't have unique IDs.
In other words, this works just like xref:further-concepts/target.adoc#at-position-selector[] internally!
@@ -0,0 +1,3 @@
= Target "Send: Automation mode"
Sets the track send to a specific automation mode if the incoming control value is greater than 0%, otherwise sets it back to REAPER's default automation mode "Trim/Read".
@@ -0,0 +1,3 @@
= Target "Send: Mono/stereo"
Sets the track send to mono or back to stereo.
@@ -0,0 +1,3 @@
= Target "Send: Mute/unmute"
Mutes/unmutes the track send.
@@ -0,0 +1,3 @@
= Target "Send: Phase invert/normal"
Inverts the track send phase or switches it back to normal.
@@ -0,0 +1,3 @@
= Target "Send: Set automation touch state"
This does the same as xref:targets/track/set-automation-touch-state.adoc[] but for send volume or pan adjustments.
@@ -0,0 +1,3 @@
= Target "Send: Set pan"
Sets the track send's pan value.
@@ -0,0 +1,3 @@
= Target "Send: Set volume"
Sets the track send's volume.
@@ -0,0 +1,2 @@
= Track targets
@@ -0,0 +1,5 @@
= Target "Track: Arm/disarm"
Arms the track for recording if the incoming absolute control value is greater than 0%, otherwise disarms the track.
This disables "Automatic record-arm when track selected".
If you don't want that, use xref:targets/track/select-unselect.adoc[] instead.
@@ -0,0 +1,3 @@
= Target "Track: Enable/disable all FX"
Enables all the track's FX instances if the incoming absolute control value is greater than 0%, otherwise disables them.
@@ -0,0 +1,3 @@
= Target "Track: Enable/disable parent send"
Enables the parent send routing of the track if the incoming absolute control value is greater than 0%, otherwise disables it.
@@ -0,0 +1,3 @@
= Target "Track: Mute/unmute"
Mutes the track if the incoming absolute control value is greater than 0%, otherwise unmutes the track.
@@ -0,0 +1,16 @@
= Target "Track: Peak"
This is a feedback-only target!
It turns your feedback-capable controller into a VU meter by constantly reporting the current volume of the configured track to it.
In addition to connecting it with a LED ring or motor fader source (which should be obvious), it can also be used with a single LED to build a clipping indicator:
. Set _Target Min_ to the minimum dB value that should make your clipping LED turn on.
Leave _Target Max_ at 12.00 dB.
. Make sure the xref:user-interface/mapping-panel/glue-section.adoc#out-of-range-behavior[] is set to "Min or max".
. If you have an LED that supports multiple colors, you will probably see a rainbow of colors flashing up which can be quite confusing.
Use the feedback transformation formula `x = ceil(y)` to restrict the feedback to just two values:
Min (0%) or Max (100%).
You can then use xref:user-interface/mapping-panel/glue-section.adoc#source-min-max[] to adjust the off/on LED colors.
At the moment this target only reports peak volume, not RMS.
@@ -0,0 +1,3 @@
= Target "Track: Phase invert/normal"
Inverts the track phase if the incoming absolute control value is greater than 0%, otherwise switches the track phase back to normal.
@@ -0,0 +1,14 @@
= Target "Track: Select/unselect"
Selects the track if the incoming absolute control value is greater than 0%, otherwise unselects the track.
This target stops being learnable if you activate the REAPER preference "Mouse click on volume/pan faders and track buttons changes track selection" (because this preference would generate too many false positives).
If you change the preference, ReaLearn will take it into consideration the next time you restart REAPER.
== Scroll TCP checkbox
Also scrolls the track control panel to the desired track.
== Scroll mixer checkbox
Also scrolls the mixer control panel to the desired track.
@@ -0,0 +1,7 @@
= Target "Track: Set automation mode"
Sets the track to a specific automation mode if the incoming control value is greater than 0%, otherwise sets it back to REAPER's default track automation mode "Trim/Read".
== Mode menu
Here you can pick the desired automation mode.
@@ -0,0 +1,14 @@
= Target "Track: Set automation touch state"
When you use REAPER's "Touch" automation mode, REAPER needs a way to know if you are currently touching the control element which is bound to the automation envelope or not.
As long as you keep touching it, it will overwrite existing automation.
As soon as you release it, REAPER will leave the envelope untouched.
Classical control surfaces implement this very intuitively by providing touch-sensitive faders.
With this target, you can easily reproduce exactly this behavior via ReaLearn.
You do this by mapping the touch event (which is usually nothing else than a MIDI note on/off message) to this target.
The touch state is scoped to a particular track and parameter type which you can choose in the *Type* dropdown.
However, ReaLearn wouldn't be ReaLearn if it wouldn't allow you to let totally different sources take control of the touch state.
For example, if you have a push encoder, you could map the "push" event to the touch state, allowing you to write automation only while you are touching the encoder.
Or if you don't have a push encoder, you could just use some spare button.
@@ -0,0 +1,7 @@
= Target "Track: Set monitoring mode"
Sets the track to a specific input monitoring mode if the incoming control value is greater than 0%, otherwise sets it back to "Off".
== Mode menu
Here you can pick the desired monitoring mode.
@@ -0,0 +1,14 @@
= Target "Track: Set pan"
Sets the track's pan value.
== Target-specific properties
This target supports the following additional xref:further-concepts/target.adoc#target-property[target properties].
[cols="m,1,3"]
|===
|Name|Type|Description
|target.pan.mcu | String | Pan value tailored to one line on a Mackie Control LCD
|===
@@ -0,0 +1,14 @@
= Target "Track: Set stereo pan width"
Sets the track's width value (applicable if the track is in stereo pan mode).
== Target-specific properties
This target supports the following additional xref:further-concepts/target.adoc#target-property[target properties].
[cols="m,1,3"]
|===
|Name|Type|Description
|target.width.mcu | String | Width value tailored to one line on a Mackie Control LCD
|===
@@ -0,0 +1,3 @@
= Target "Track: Set volume"
Sets the track's volume.
@@ -0,0 +1,7 @@
= Target "Track: Show/hide"
Shows the track if the incoming absolute control value is greater than 0%, otherwise hides it.
== Area menu
Lets you decide if you want it to show/hide in the track control panel or the mixer.
@@ -0,0 +1,14 @@
= Target "Track: Solo/unsolo"
Soloes the track if the incoming absolute control value is greater than 0%, otherwise unsoloes the track.
== Behavior menu
See the REAPER user guide for details.
Solo in place:: Soloes the track while respecting REAPER's routing.
This is REAPER's default and since ReaLearn v2.4.0 also ReaLearn's default.
Solo (ignore routing):: Soloes the track muting everything else, no matter the routing.
Use REAPER preference:: Follows whatever is set in the REAPER preferences.
Learning this target by pressing the "Solo" button of the _master_ track is currently not possible but of course you can just select it manually in the dropdown menu.
@@ -0,0 +1,24 @@
= Target "Track"
A target that allows you to define a track.
== Act/Tags controls
**Act/Tags** stands for "Action / Unit tags" and decides what happens when a control messages arrives, e.g. a button press.
=== Action menu
None (feedback only):: With this setting, nothing will happen.
It's suited very well as neutral target for textual feedback with an expression that contains a track property, e.g. `{{ target.track.name }}`.
Set (as unit track):: The button press will set the track defined in this target as xref:further-concepts/unit.adoc#unit-track[] _without resolving it before_.
For example, if this target defines to use the currently selected track (xref:further-concepts/target.adoc#selected-selector[]), pressing the button will make the unit track dynamically reflect whatever track is selected.
Pin (as unit track):: The button press will resolve the track defined in this target and set the result as xref:further-concepts/unit.adoc#unit-track[].
For example, if this target defines to use the currently selected track, pressing the button will check which track is currently selected and set the unit track to exactly this track.
It will stay that way even if the user selects another track.
=== Unit tags field
The text field lets you define xref:further-concepts/unit.adoc#unit-tag[unit tags] to determine for which xref:key-concepts.adoc#unit[units] the xref:further-concepts/unit.adoc#unit-track[] should be changed.
If it's empty, the current unit will be affected.
@@ -0,0 +1,9 @@
= Target "Virtual"
This is exactly the counterpart of the possible xref:further-concepts/source.adoc#virtual-source[virtual sources] in the xref:key-concepts.adoc#main-compartment[].
Choosing a xref:further-concepts/target.adoc#virtual-target[] here is like placing cables between a xref:further-concepts/compartment.adoc#real-control-element[] and all corresponding main mappings that use this xref:further-concepts/compartment.adoc#virtual-control-element[] as source.
== Learnable checkbox
If you disable this checkbox, this virtual source will not be learnable via xref:key-concepts.adoc#learn-source[] in the main compartment.
This can be useful for rather unimportant xref:key-concepts.adoc#control-element-interaction[control element interactions] such as _Fader touch_ that would otherwise make it very hard to learn more important sources such as _Fader movement_.