Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add instance FX and possibility to change it (e.g. for FX pinning) #228

Closed
helgoboss opened this issue Mar 13, 2021 · 9 comments
Closed
Labels
enhancement New feature or request high priority realearn Related to ReaLearn

Comments

@helgoboss
Copy link
Owner

Designing truly reusable FX presets is difficult right now. Either you design them to be used with currently focused FX (to be used in "Auto-load preset" scenarios) or for a specific FX. Something flexible that adjusts to the context would be nice. #188 is related.

See #227 comment:

  • And you would be able to reuse the same presets for your VSTs that will be auto-loaded with the "Auto-load preset" ReaLearn instance (instead of using groups for that).
    • Edit: Just realized, this particular improvement would need another puzzle piece to be possible. Presets must be designed for "Auto-load preset" at the moment by letting the mappings refer to <Focused> FX. Would be good to have an "FX selector" that is more reusable and relates to certain FX or the focused FX - depending on the context.
  • Gives you overall better composability.
@helgoboss
Copy link
Owner Author

helgoboss commented Mar 28, 2021

@helgoboss
Copy link
Owner Author

New idea: Provide new "Instance FX" selector and a possibility to set an FX for the whole instance in the same way you would set it for one mapping. That's all we need. The auto-load option would then be renamed to "Depending on instance FX".

@helgoboss
Copy link
Owner Author

helgoboss commented Nov 16, 2021

Came up with an elegant concept to approach the "Instance FX" and "Instance track" idea:

  • Each ReaLearn instance will get a number of track slots and FX slots.
  • Each slot is either empty or holds a virtual track/FX.
    • "Virtual" means that it's not necessarily a particular track already but can use track/FX selectors such as <Selected>, <Dynamic> or "By name". This concept exists already.
  • These slot are saved as part of the session (much like clip slots). They are not saved as part of the compartment and hence are also not part of compartment presets.
  • Reading slots
    • <Dynamic> track/FX selectors will then get a new array variable slot which lets one access the index of the (already resolved) track in that slot. E.g. slot[5] would return the index of the track in Slot number 6 (or a particular negative number <
      -1 if that slot is empty).
    • For convenience, we could also add a new track/FX selector "Instance slot" (the thing this very issue was always about).
  • Writing slots
    • There will be a new target simply called "Track" (respectively "FX").
    • Infact, I'm about to introduce these targets already now. It doesn't contain instance-slot related functionality yet, it's just a target that allows one to define a virtual track, nothing else, just for "feedback" purposes. It's good to have such a "neutral" target already now for textual feedback of track/FX-based properties (as an alternative to abusing e.g. the "Track: Set volume" target for that purpose).
    • However, with the advent of instance slots, these targets will receive an upgrade: The "control" direction will get a meaning as well. It will work as follows.
    • There will be a new target setting "Slot" which lets you select the instance slot that you want to set.
    • An incoming "on" control value will then simply set the instance track/FX to the defined virtual track, but the already resolved one! (meaning the instance track will be addressed "By ID")!
    • That's it! And I think that's all it needs. We can implement surprisingly many scenarios with this.
      • Pinning the currently selected track: By setting the virtual track to <Selected>.
      • Pinning a dynamic track derived from one of ReaLearn's internal parameters: By setting the virtual track to <Dynamic> with an expression of e.g p1 * 100.
      • Moving to the next track: By setting the virtual track to <Dynamic> with expression slot[0] + 1.
      • Skipping 8 tracks: By setting the virtual track to <Dynamic> with expression slot[0] + 8.
    • As an add-on we could provide a checkbox "Resolve before setting" that's ticked by default but which we can untick. Then it would be possible to set the instance track/FX to the virtual track without resolving it before. Not as useful as with resolving but who knows. We could easily add this later if needed.

This issue (#228) will be the issue for implementing the "Instance FX" feature. Issue #161 seems to be the most suitable issue for implementing the "Instance track" feature.

@vonglan
Copy link

vonglan commented Dec 27, 2021

"Instance track" seems useful to me.

I am not sure what is the use case for "instance FX" though.

When you have a preset with FX parameter targets, these will be specific to their FX. For example one mapping in a preset has the "Cutoff" parameter of the "Diva" VST as target. Let's say this is parameter number 124.
What good is it to make this abstract (slot[0]) in the preset, and making the connection to the concrete VST (Diva) only in a "slot" that is not part of the preset? That mapping is intended to control the cutoff. If slot[0] resolves to any VST other than Diva, parameter 124 will certainly not be the Cutoff parameter.

@helgoboss
Copy link
Owner Author

@vonglan In general, if you have different plug-ins, you want totally different mappings, not just one different mapping. For having totally different mappings, you use "Auto-load", which switches presets depending on the plug-in type.

@vonglan
Copy link

vonglan commented Mar 16, 2022

So the use case for "instance FX" is when you have the same plug-in (e.g. Reverb effect) in different tracks and FX positions?

@helgoboss
Copy link
Owner Author

For example. But the most important use case is that you can build main presets for some plug-in (e.g. reverb effect) not caring about what FX instance to target. In the mapping target (e.g. "FX: Set parameter value") you just choose "Instance FX" as FX and it will automatically control whatever FX is currently set as instance FX. That could be the currently focused FX but, a manually pinned FX or the first FX on the currently selected track ... it just doesn't matter. That's what makes the preset truly reusable.

@vonglan
Copy link

vonglan commented Mar 20, 2022

I always select the FX via name pattern, and I always have ReaLearn in the same FX chain as the plugin.
That solves a similar problem (reusable mapping), with the restriction that ReaLearn is in the same track.

I guess there are ReaLearn users that use "central" ReaLearn instances to control plugins in different tracks.

@helgoboss
Copy link
Owner Author

I always select the FX via name pattern, and I always have ReaLearn in the same FX chain as the plugin.
That solves a similar problem (reusable mapping), with the restriction that ReaLearn is in the same track.

As long as that works for you, good.

For some scenarios, central instances are easier to handle or the only option.

helgoboss added a commit that referenced this issue Jun 20, 2022
helgoboss added a commit that referenced this issue Jun 20, 2022
@helgoboss helgoboss changed the title Add more reusable FX selector Add more reusable FX selector (includes FX pinning) Jun 20, 2022
@helgoboss helgoboss changed the title Add more reusable FX selector (includes FX pinning) Add instance FX and possibility to change it (e.g. for FX pinning) Jun 20, 2022
@helgoboss helgoboss removed the need more info Further information is requested label Jun 20, 2022
helgoboss added a commit that referenced this issue Jun 20, 2022
@helgoboss helgoboss added the realearn Related to ReaLearn label Jul 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request high priority realearn Related to ReaLearn
Projects
None yet
Development

No branches or pull requests

2 participants