surge-synthesizer / surge

Synthesizer plug-in (previously released as Vember Audio Surge)
https://surge-synthesizer.github.io/
GNU General Public License v3.0
3.11k stars 397 forks source link

QoL UI: user feedback for the meaning of macro selection #5813

Open j5v opened 2 years ago

j5v commented 2 years ago

Is your feature request related to a problem? Please describe. This is a quality of life UI feature that gives feedback to the user about what they have selected in macros, in cases where the effect is nontrivial.

For patches where formula LFOs take macro input to then modulate other parts of the synth, where the modulation outputs are not straightforwardly 0..1 continuous or linear, but are instead modes of operation or interpolated discrete states, that the user would want to know about. The feedback text would come from a formula LFO, while the user would be changing the macro slider.

For example, I might have a macro slider that selects from:

Describe the solution you'd like: Possible solutions (one, many, or all)

  1. A readout as float text (basic, but we'd need to make good API decisions to make formula code still work if we do the next step).
  2. An always-visible text panel. Stretch: multiple lines (main UI or tear-off) that macros can address by line. If space is tight, or accessibility is difficult, then we could optimize how these lines are shown, or have a single-line state.
  3. To help with the non-continuous slider, a design-time parameter to select the number of quantized steps (0 = continuous). That reflects in the UI as a scale, and discrete steps for the slider. There are use-cases for different partitioning modes: n.0-centred (interpolations), and n.5-centred (discrete modes).

Impacts:

Describe alternatives you've considered: .

Additional context: If we don't want macros to send unclamped values, then the slider output can still be 0..1 for all these cases, because the formula LFO can scale to context. It's an extra step for the sound designer to reconcile the slider steps with the code.

This is an advanced use case, used by (I guess) less than 5% of patch designers, but it would provide more meaningful context to users, for macros that would otherwise be difficult to use.

j5v commented 2 years ago

Alternatively, use the existing modulation UI, to have a formula output 'modulate' the UI Status lines. Instead of 'adding' like the other modulators, this modulation just copies the text to the Status line. This seems a lot simpler than adding side-effects to the object model, and scanning these states for changes.

baconpaul commented 2 years ago

This is super interesting. I've thought a lot about the modulation graph and how the orange arrow (in S16 and later) and the formula modulator (in XT) obscure it, even with things like the mod list. Mod Mappers will do the same. We did purposefully make the extra state opt-in so we could infer a maximum graph from the init state, but of course that's not the same as displaying value transformations.

Very interesting

mkruselj commented 1 year ago

I think a better way to deal with this is to simply have additional state stored per macro. Namely: