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 "Auto-load preset" option "Depending on currently active FX" #188

Closed
jackmau opened this issue Mar 1, 2021 · 13 comments
Closed

Add "Auto-load preset" option "Depending on currently active FX" #188

jackmau opened this issue Mar 1, 2021 · 13 comments
Labels
enhancement New feature or request need more info Further information is requested realearn Related to ReaLearn

Comments

@jackmau
Copy link

jackmau commented Mar 1, 2021

Changing realern preset based on focused FX works very well in the latest (realearn 2.4) version. However, in the quest of making realearn a true CSI competitor, I'd like if there were other, more intuitive, ways to activate presets. Conditional activation based on other realearn instances, as suggested in #109, not differently from parameter conditional activation currently working well in groups, seems fairly consequential. But I'd personally like something based on selected track (even though there should be a system to navigate FX chains) or maybe last focused plugin (so that one could use an action to focus/unfocus a plugin and control it) so that I don't have to have to see the plugin GUI on the screen. Of course this kind of implies you are using controller projection and you have a way to instantly visualise which preset is currently loaded (#187 )

@helgoboss
Copy link
Owner

Okay, let's split this up into parts.

But I'd personally like something based on selected track

This is something I have already considered. Open questions:

  • What should be used as track anchor (ID, position or name)? I think name makes most sense in this context ... but then probably only a part of the name. Which part?
  • What if multiple tracks are selected? Only one preset can be active at one time.

(even though there should be a system to navigate FX chains)

What does this mean?

or maybe last focused plugin (so that one could use an action to focus/unfocus a plugin and control it) so that I don't have to have to see the plugin GUI on the screen

Yes, that seems like a useful quick-win addition.

@helgoboss helgoboss added the enhancement New feature or request label Mar 1, 2021
@jackmau
Copy link
Author

jackmau commented Mar 2, 2021

This is something I have already considered. Open questions:

  • What should be used as track anchor (ID, position or name)? I think name makes most sense in this context ... but then probably only a part of the name. Which part?
  • What if multiple tracks are selected? Only one preset can be active at one time

Correct me if I am wrong but you are thinking at a preset-per-track, am I right? In that case probably name or ID seem to be good candidates.

What does this mean?

My suggestion, poorly worded as usual, is a bit more convoluted: I am still thinking to a preset per each FX, only with the selected track instead of the focused FX to provide the context. Of course a track will have more than one FX and then there will be the need to specify a way to move from one to the other. This is effectively a request for something similar to CSI MapSelectedTrackFXToWidgets

Yes, that seems like a useful quick-win addition.

Great!

@helgoboss
Copy link
Owner

This is something I have already considered. Open questions:

  • What should be used as track anchor (ID, position or name)? I think name makes most sense in this context ... but then probably only a part of the name. Which part?
  • What if multiple tracks are selected? Only one preset can be active at one time

Correct me if I am wrong but you are thinking at a preset-per-track, am I right? In that case probably name or ID seem to be good candidates.

Yes.

What does this mean?

My suggestion, poorly worded as usual, is a bit more convoluted: I am still thinking to a preset per each FX, only with the selected track instead of the focused FX to provide the context. Of course a track will have more than one FX and then there will be the need to specify a way to move from one to the other. This is effectively a request for something similar to CSI MapSelectedTrackFXToWidgets

Now I get it. We would need a new ReaLearn concept "Currently active FX" because REAPER itself doesn't have the notion of a currently active FX apart from the "currently focused" one.

@jackmau
Copy link
Author

jackmau commented Mar 3, 2021

Now I get it. We would need a new ReaLearn concept "Currently active FX" because REAPER itself doesn't have the notion of a currently active FX apart from the "currently focused" one.

Precisely, I am not enough expert on Reaper end to know that REAPER didn't had the notion of currently active (but not fouces) FX. As of the moment, I think last focused FX could be a good workaround

@helgoboss helgoboss changed the title Add more ways to change realearn presets Add "Auto-load preset" option "Depending on currently active FX" Mar 13, 2021
@helgoboss
Copy link
Owner

@jackmau I made a separate ticket for the "Last focused" idea: #229

This one is now about introducing a "Depending on currently active FX" option for "Auto-load preset". And as mentioned, in order to do this, we first need the concept of a "Currently active FX", which will also be part of this ticket. Some notes to self:

  • Dynamic FX instance calculation #212 added the new FX selector <Dynamic>. You can use a mathematical expression that's based on ReaLearn's internal parameters to calculate a position in the FX chain and by that essentially "selecting" the FX on which the target will operate.
  • This allows you to step between different FX instances within one FX chain - so it's kind of related.
  • However, it has 2 differences to what is wanted here:
    1. The most obvious one: It selects the targeted FX on mapping level, not on instance level, so it can't be used with "Auto-load preset".
      • If this would be the only difference, we could just make it possible to enter a ReaLearn-instance-wide mathematical expression whose result will be considered as the "Currently active FX".
    2. But there's a 2nd difference: You want a currently active FX per track. So that you can switch between multiple tracks and doing so will switch to whatever FX was active on the corresponding track. Is that correct, @jackmau?
      • In that case, ReaLearn would need to memorize one FX position per track.
      • That means, using ReaLearn's internal parameters would not be a good way to model this. They are rather global in nature and not bound to a certain track.

@jackmau
Copy link
Author

jackmau commented Mar 17, 2021

@jackmau I made a separate ticket for the "Last focused" idea: #229

nice, seen and 👍

  • Dynamic FX instance calculation #212 added the new FX selector <Dynamic>. You can use a mathematical expression that's based on ReaLearn's internal parameters to calculate a position in the FX chain and by that essentially "selecting" the FX on which the target will operate.

Have been doing some testing on this and the <By Name> functionality (which I really love, particularly the pseudo-regex syntax). Very happy to see that now I can jump from one selected track to the other, with FX in different part of the chain and they get recognised. However, I am sorry to say that with non-customisable parameters, and no other way to interact that with the number of FX loaded in the chain, <Dynamic> selector are not usable in my scenario.

  • This allows you to step between different FX instances within one FX chain - so it's kind of related.

As I was writing above, I struggle to see the practical use of this, unless you have a chain of identical FX, as in all my scenario I would always want to control different parameters of different plugins in the chain.

  1. It selects the targeted FX on mapping level, not on instance level, so it can't be used with "Auto-load preset".

Fine with me, I see all the recent FX selector additions to be an effective replacement for the Auto-load preset functionality, as they offer both more flexibility and more visibility on what is happening.

  • we could just make it possible to enter a ReaLearn-instance-wide mathematical expression whose result will be considered as the "Currently active FX".

very interested, how would this work? Tbh it would be enough having a parameter to mirror that.

2. But there's a 2nd difference: You want a currently active FX per track. So that you can switch between multiple tracks and doing so will switch to whatever FX was active on the corresponding track. Is that correct, @jackmau?

You took my words too much in their literal sense :D. What I actually meant was: it would be nice if I could use realearn itself to navigate to select controlled plugins without opening single FX GUIs. Since this assume controlling only one plugin at once, In practice one parameter is enough and we can safely assume that every time we change track we start from controlling the first FX, no need for an active-FX-per-track imho. Ofc the parameter should be realearn instance based, so that different instances (where in my mind 1 controller = 1 instance) can be controlling different plugins. This would make a very logical use case of <Dynamic> track selection, as two controllers would more likely be controlling plugins on different tracks.

@helgoboss
Copy link
Owner

Have been doing some testing on this and the <By Name> functionality (which I really love, particularly the pseudo-regex syntax). Very happy to see that now I can jump from one selected track to the other, with FX in different part of the chain and they get recognised. However, I am sorry to say that with non-customisable parameters, and no other way to interact that with the number of FX loaded in the chain, <Dynamic> selector are not usable in my scenario.

  • This allows you to step between different FX instances within one FX chain - so it's kind of related.

As I was writing above, I struggle to see the practical use of this, unless you have a chain of identical FX, as in all my scenario I would always want to control different parameters of different plugins in the chain.

No need to be sorry. It's just a slightly related feature, not supposed to be a solution to your problem. But it's going to help with other use cases. <Dynamic> was added for tracks (control-surface style track navigation) and FX parameters (because someone requested it) mainly . I also added it to FX because it's consequent.

  1. It selects the targeted FX on mapping level, not on instance level, so it can't be used with "Auto-load preset".

Fine with me, I see all the recent FX selector additions to be an effective replacement for the Auto-load preset functionality, as they offer both more flexibility and more visibility on what is happening.

How is that? It's not intended as a replacement for "Auto-load preset". You need "Auto-load preset" to load the mappings that fit to your current FX. If not, you would have every mapping for every possible FX inside one super big ReaLearn preset. Sounds like a huge mess to me. Having small reusable presets that are loaded on demand is better in my opinion.

  • we could just make it possible to enter a ReaLearn-instance-wide mathematical expression whose result will be considered as the "Currently active FX".

very interested, how would this work? Tbh it would be enough having a parameter to mirror that.

If one parameter is enough, we could make it even more simple and provide a dropdown that lets you select the parameter that should control the currently active FX. Or maybe no parameter at all, read on ...

  1. But there's a 2nd difference: You want a currently active FX per track. So that you can switch between multiple tracks and doing so will switch to whatever FX was active on the corresponding track. Is that correct, @jackmau?

You took my words too much in their literal sense :D. What I actually meant was: it would be nice if I could use realearn itself to navigate to select controlled plugins without opening single FX GUIs. Since this assume controlling only one plugin at once, In practice one parameter is enough and we can safely assume that every time we change track we start from controlling the first FX, no need for an active-FX-per-track imho. Ofc the parameter should be realearn instance based, so that different instances (where in my mind 1 controller = 1 instance) can be controlling different plugins. This would make a very logical use case of <Dynamic> track selection, as two controllers would more likely be controlling plugins on different tracks.

How about that:

  1. I provide a new target "Currently active FX".
    • This would allow you to use encoders or prev/next buttons to choose a particular FX within a particular FX chain and make that the "Currently active FX" within this ReaLearn instance.
    • This target would also provide a "Track" option with the usual selectors (<Dynamic>, Selected, By Id, ...) so that it's up to you on which track's FX chain this operates.
    • I could build it in a way so that it always resets to position 1 when the context track is changed.
    • As soon as Add "Don't squeeze" option to discrete targets #184 is implemented, you would also be able to use buttons to jump directly to a specific FX position (e.g. buttons FX 1, FX 2, FX3) instead of having to navigate relatively via previous/next buttons.
    • In future, a "Set specific FX as currently active FX" target could be provided that allows one to make a very specific FX the currently active FX at the press of a button (identified by ID even, not just by position). I would like something like that.
    • Open question: What about persistence? Would users expect that still the same FX is currently active that was when they saved the project?
  2. I implement a new FX selector to be able to let all FX-related targets (most prominently the "FX parameter target") address the currently active FX.
  3. I provide the new "Auto-load preset" option "Depending on currently active FX".

@jackmau
Copy link
Author

jackmau commented Mar 17, 2021

How is that? It's not intended as a replacement for "Auto-load preset". You need "Auto-load preset" to load the mappings that fit to your current FX. If not, you would have every mapping for every possible FX inside one super big ReaLearn preset. Sounds like a huge mess to me. Having small reusable presets that are loaded on demand is better in my opinion.

Agreed, sorry in my mind I had written off the auto load preset function after #186 . This FR was not originally related to the auto-load function, and I missed the change in title. What you say now makes perfectly sense to me, yeah all the mapping in a single preset may not be the best way to go.

  1. I provide a new target "Currently active FX".

    • This would allow you to use encoders or prev/next buttons to choose a particular FX within a particular FX chain and make that the "Currently active FX" within this ReaLearn instance.
    • This target would also provide a "Track" option with the usual selectors (<Dynamic>, Selected, By Id, ...) so that it's up to you on which track's FX chain this operates.
    • I could build it in a way so that it always resets to position 1 when the context track is changed.

Sounds nice, but without a parameter, how do I determine which is the Currently Active FX? I.e. where do I see the FX selector current value?

@helgoboss helgoboss added the need more info Further information is requested label Mar 19, 2021
@vonglan
Copy link

vonglan commented Mar 19, 2021

Sounds nice, but without a parameter, how do I determine which is the Currently Active FX? I.e. where do I see the FX selector current value?

@jackmau : Written without completely understanding it (I did not try autoload yet):
Wouldn't you see it in the loaded preset (e.g. "ChorusEffect"), and then also if you use the projection feature?
Where would you want to see it?

@helgoboss
Copy link
Owner

@jackmau As @vonglan says, there are multiple ways to see what's currently active. And if this is not enough, another way could be added. Using ReaLearn FX parameters is not the only way to make something visible.

@jackmau
Copy link
Author

jackmau commented Mar 20, 2021

Wouldn't you see it in the loaded preset (e.g. "ChorusEffect"), and then also if you use the projection feature?

Haven't tested auto leading with projection yet, but that sounds like the most reasonable way, provided the user will be also provided with the track/fxchain position.

Using ReaLearn FX parameters is not the only way to make something visible.

I am definitely over-relying on parameters beacuse of their flexibility and ease of visibility as their nature of both controllers/controlled :D

@patmaddox
Copy link

@helgoboss in the forum thread you asked me to contribute to this discussion, so here goes...

Like @jackmau, I want to be able to pass control from one plugin to another, without having to open the FX window. This would be similar to the "blue hand" concept in Ableton live. There's a macro device that is the current target, and you can move to the previous or next device in the chain.

Now I get it. We would need a new ReaLearn concept "Currently active FX" because REAPER itself doesn't have the notion of a currently active FX apart from the "currently focused" one.

Yes, and I think it may be worthwhile to distinguish between "Currently active track" and "Currently active preset."

What I envision is having a single track-level configuration for my main controls - filter cutoff, reverb amount, etc. But then I could switch to a particular FX for more detailed control over it - oscillator detune, width, something like that. I'd want to use a previous / next button to navigate through the FX chain. It also would be fantastic if I could use buttons to jump directly to a specific FX. So let's say my chain is synth -> delay -> reverb then I could 1) select the track-level ReaLearn preset to change reverb amount then 2) press a button to jump to the reverb device 3) turn a knob to adjust the diffusion on the reverb directly 4) press another button to jump back to the track ReaLearn.

I hope that makes sense... I am just jumping in here, haven't given this nearly as much thought as you two!

@helgoboss
Copy link
Owner

#228 is finally implemented, which is the pre-requirement for this FR.

helgoboss added a commit that referenced this issue Jun 20, 2022
Reasoning: That way old FX presets automatically become much more
reusable by not insisting on <Focused> FX anymore but instead referring
to the <Instance> FX instead (which is set to <Focused> by default).
helgoboss added a commit that referenced this issue Jun 20, 2022
helgoboss added a commit that referenced this issue Jun 20, 2022
This solves the problem of auto-load replacing all mappings in the
main compartment - even those that are used to pin/set - in the
most flexible way.
@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 need more info Further information is requested realearn Related to ReaLearn
Projects
None yet
Development

No branches or pull requests

4 participants