helgoboss / helgobox

Helgobox: ReaLearn & Playtime
https://www.helgoboss.org/projects/helgobox
GNU General Public License v3.0
205 stars 20 forks source link

Reset FX Parameter to last value #273

Open vonglan opened 3 years ago

vonglan commented 3 years ago

Another idea. Not urgent or important to me. I just wanted to write it down, in case you are interested.

"Reset FX Parameter to last value" as yet another target type. I think you demonstrated the same Use Case at the end of your video with the Twister. "last value" is the last Feedback signal received from the FX (for that parameter), that was not related (i.e. within one second) to a Control signal from ReaLearn.

However, there is one problem: The main use case in my opinion is, to have a Controller Mapping for controllers like the MIDI Fighter Twister that have a generic "Bank of 8" encoder set with associated buttons. For this, it needs to be possible to use a virtual source/target as argument for this new target type (like for the normal "FX: Change Parameter" target), which then needs to be mapped to the corresponding FX parameter.

So in the Twister Controller Mapping, you would have

helgoboss commented 3 years ago

I think this is quite different from what I presented. The way it works in my video is that I have a separate reset mapping which just sets a parameter to a constant value (target min = max) at the press of the button. Until now, this is all I needed.

I'll leave this here as low-prio FR. Not planning to implement it but if someone raises a bounty, maybe one day.

vonglan commented 3 years ago

I think this is quite different from what I presented. The way it works in my video is that I have a separate reset mapping which just sets a parameter to a constant value (target min = max) at the press of the button. Until now, this is all I needed.

I guessed that that is the mechanism you used in the video. I just meant: This feature would make the same use case possible, but in a more general and usable way (no need to configure one neutral value manually, ReaLearn would automatically set it to whatever the neutral value is).

helgoboss commented 3 years ago

I think I understand now. The new target would essentially do this: "Set the value of the target to which the virtual control element X (the "argument") is mapped to whatever value it had on project load or had after subsequent changes in REAPER itself (not via ReaLearn).

But then ...

and one Mapping from the associated button to "FX: Reset to last value" with argument "Twister Button 1"

... should be

and one Mapping from the associated button to "FX: Reset to last value" with argument "Twister Encoder 1"

... , right? Because the button is mapped to the "Reset" target, not to the target whose value you want to reset. So referring to the button would be pointless, if I understand this correctly.

vonglan commented 3 years ago

Yes are right. It should be

  • one Mapping from the first encoder to to virtual target "Twister Encoder 1"
  • and one Mapping from the associated button to "FX: Reset to last value" with argument "Twister Encoder 1"
helgoboss commented 3 years ago

I'm right now implementing a similar target called "ReaLearn: Load mapping snapshot" which in its first incarnation will support setting the value of a bunch of mappings back to the value it had when loading ReaLearn (or the preset). Resetting them to the last value not set by ReaLearn itself could be subtype of it.

vonglan commented 2 years ago

didn't see this until now. Yes, that seems to be half of the implementation done ;-)

helgoboss commented 2 years ago

@vonglan The way I implemented it in "ReaLearn: Load mapping snapshot", is it maybe enough? Then I could close this issue?

vonglan commented 2 years ago

That's not exactly what I meant. This issue was about something like a "ReaLearn-independent snapshot", that always exists (it does not have to, and it cannot be "taken"), which consists of the last FX parameter values that the FX had independently from ReaLearn.

Like you wrote above:

Resetting them to the last value not set by ReaLearn itself could be subtype of it.

The new target would essentially do this: "Set the value of the target to which the virtual control element X (the "argument") is mapped to whatever value it had on project load or had after subsequent changes in REAPER itself (not via ReaLearn).

But if no one else finds this interesting, I guess now is a good time to close the issue. For me it is currently not important at all.