helgoboss / helgobox

Helgobox: ReaLearn & Playtime

Home Page:https://www.helgoboss.org/projects/helgobox

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Feature request: Allow conditional activation of mappings based off *FX* params

sdeleon28 opened this issue · comments

tl;dr;

Could I conditionally enable/disable mappings based off the value of a param in the target plugin?

Motivation

I have this mid/side EQ plugin that I wrote. You can set the mode (Stereo, Mid, Side, MidSolo or SideSolo) from the UI. This setting is also exposed as a plugin parameter (using JUCE's AudioParameterChoice).

I have set the side buttons on my MIDI fighter twister like this:

  • Top left toggles Stereo/Mid modes
  • Top right sets Side mode
  • Bottom left sets MidSolo mode
  • Bottom right sets SideSolo mode

The bands displayed in the UI respond to the mode like this:

  • Stereo displays bands that affect the whole signal in stereo mode
  • Mid or MidSolo displays bands that affect the mid channel in mid/side mode
  • Side or SideSolo displays bands that affect the side channel in mid/side mode

Params for the bands are exposed as plugin params (freq, gain, q, etc for each band).

As of right now, I have to map stereo band 1 freq to a different encoder than mid band 1 freq. This means that I have to change modes using the side buttons AND cycle banks in the twister for the encoders to match what I'm seeing on the screen. This can lead to situations where I'm changing the params for Stereo while in Mid mode inadvertently because I forgot to switch banks after changing the plugin mode.

The way I would like it to behave is:

  • Create a mapping that has stereo band 1 freq as a target, source = encoder 0
  • Create a mapping that has mid band 1 freq as a target, source = encoder 0
  • Create a mapping that has side band 1 freq as a target, source = encoder 0
  • Have these activate conditionally depending on the value of the mode param of the plugin
  • Repeat the same for all params in all bands

I think I've tried all of the conditional activation features and none seems to match my use case. Is there something that covers this use case? Could this be a new feature?

This exists already: Target-based conditional activation ("Active: When target value met"). It's explained in the user guide.

Thanks so much for the quick response! I think I've already tried that but wasn't sure if it was the right option. I'll try it and if I figure out how to do it, I'll document here for future readers and close the ticket.

Target-value conditional activation worked like a charm the first try!

The procedure

Here's what I did:

  • Map the FREQ param for my Q2 Stereo band:
    • Create a mapping for Q2-FREQ that maps the freq param of band 2 (stereo) to encoder 0
    • Create a "lead mapping" that targets the plugin's mode param (MODE-LEAD)
      • There's no need for a source in this mapping
      • Learn the mode param as target by hitting learn, then changing the mode on the plugin
      • Set the FX to <Focused> as opposed to the particular one picked up by the learn feature
    • Set the activiation condition
      • Go back to the Q2-FREQ param, set activation condition to "When target value met"
      • Choose the MODE-LEAD mapping
      • Type y == 0 as the condition (see mapping parameter choices to values)
  • Map the FREQ param for my Q2 Mid band:
    • Create a mapping for Q2-FREQ-MID that maps the freq param of band 2 (mid) to encoder 0
    • Set activation condition to "When target value met"
    • Choose the MODE-LEAD mapping
    • Type y == 0.25 as the condition (see mapping parameter choices to values)

It works! When I switch back and forth between Stereo and Mid modes, the encoder correctly maps to the right param.

Mapping choices to values

In my case, the mode param is a choice field that lets you choose between Stereo, Mid, MidSolo and SideSolo modes. This ends up being a float number under the hood. Spreading these options in a 0-1 range gives us:

Stereo: 0.00
Mid: 0.25
Side: 0.50
MidSolo: 0.75
SideSolo: 1.00

Next steps

There's a bunch of mappings that I need to create here, but this gives me enough information about how the mappings can model what I want. I will next copy these mappings as lua and automatically generate all the mappings that I need with some lua scripting.