Skip to content

Keep all meta knobs when loading presets if the user preference is set to keep the values.#4687

Draft
ywwg wants to merge 2 commits into
mixxxdj:mainfrom
ywwg:keep-meta-for-real
Draft

Keep all meta knobs when loading presets if the user preference is set to keep the values.#4687
ywwg wants to merge 2 commits into
mixxxdj:mainfrom
ywwg:keep-meta-for-real

Conversation

@ywwg
Copy link
Copy Markdown
Member

@ywwg ywwg commented Feb 26, 2022

The preference option "keep metaknob value" currently only restores the top-level meta value instead of applying it to the underlying effects.
Because the loaded preset will use the default metaknob values, the preference is essentially inoperative.
This causes the meta knobs in the underlying effects to be out of sync with the user's controller.
If the user wants to overwrite meta values with the saved presets, they can change the preference to restore to default values.

…t to keep the values.

The preference option "keep metaknob value" currently only restores the top-level meta value instead of applying it to the underlying effects.
Because the loaded preset will use the default metaknob values, the preference is essentially inoperative.
This causes the meta knobs in the underlying effects to be out of sync with the user's controller.
If the user wants to overwrite meta values with the saved presets, they can change the preference to restore to default values.
Copy link
Copy Markdown
Member

@daschuer daschuer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks reasonable to me.
I will delay merge a bit to give others a chance for a review.

@ywwg
Copy link
Copy Markdown
Member Author

ywwg commented Mar 1, 2022

@Be-ing any opinion here? I saw the comment that is in the existing code which is why I tried to address in my comment above

@Be-ing
Copy link
Copy Markdown
Contributor

Be-ing commented Mar 2, 2022

Ehh... I'm not sure about this. On one hand it does reduce soft-takeover situations. On the other hand it reduces chain presets to just being a list of loaded effects and the state of parameters not linked to metaknobs...

@ywwg
Copy link
Copy Markdown
Member Author

ywwg commented Mar 3, 2022

Ehh... I'm not sure about this. On one hand it does reduce soft-takeover situations. On the other hand it reduces chain presets to just being a list of loaded effects and the state of parameters not linked to metaknobs...

yeah I understand, that's why I wanted to ask... Is your desired use-case not covered by the existing effect loading preferences? We could add a third option, so we'd have:

  • Loading a preset keeps all metaknob positions (my desired behavior)
  • Loading a preset keeps top-level metaknob position (existing "keep" behavior)
  • Loading a preset resets all metaknob positions (existing other preference)

@Be-ing
Copy link
Copy Markdown
Contributor

Be-ing commented Mar 3, 2022

The effect loading preference is orthogonal. It determines what happens when loading an effect. The question here is what to do when loading a chain preset.

My motivation for implementing the current behavior was thinking that you should be able to load a preset, turn up the mix knob, and have it sound exactly the same as when the preset was saved.

@ywwg
Copy link
Copy Markdown
Member Author

ywwg commented Mar 4, 2022

As per our effect workflow discussion, presets are meant to be loaded into effect units on-demand instead of the old flow, where effect units are mostly static and rerouted to different decks as needed. Therefore presets act as an effect-loading mechanism, and for controllers with a superknob it makes sense to have a mode where all the superknob values are reset. I am not sure what you'd like to do based on your replies, but it feels like it makes sense to add a third preference option so all three situations are covered.

Make the new keep_all behavior a third option in the preferences. Existing user configs will not be touched.
@github-actions github-actions Bot added the ui label Mar 7, 2022
@ywwg
Copy link
Copy Markdown
Member Author

ywwg commented Mar 7, 2022

Updated preferences to include all three options. Includes code to migrate preferences from the old bool to the new enum. Existing behavior should not be affected.

enum class AdoptMetaknobValue {
// When loading effects, never adjust the metaknob positions
KEEP_ALL,
// When loading effects presets, never adjust the top-most metaknob position.
Copy link
Copy Markdown
Contributor

@Be-ing Be-ing Mar 9, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have no idea what a "top-most metaknob" is. This is new terminology. Please use existing terminology or explain your new terms, otherwise discussing this is going to be very confusing.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would "Effect Unit Metaknob" be better?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still don't know what that is. Effects have metaknobs, not effect units.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are talking about "[EffectRack1_EffectUnit1_Effect2], meta". There is only one, at this layers, so I think we need to adjust the naming.

Currently we have this:
KEEP_ALL -> The current meta knob position is adopted for the connected effect parameters, when loading effects and chain presets.
KEEP_TOP -> When loading a chain preset, the metaknob and the parameters are changed to the saved values, including an out of sync state if a single parameter was adjusted before saving. If a single effect is loaded, the meta knob position is kept like "KEEP_ALL".
LOAD_DEFAULT -> The saved metaknob adjust the parameters into a synced state, a saved individual parameter value is ignored.

How about:
KEEP
ADOPT_FROM_CHAIN_PRESET
ADOPT_FROM_EFFECT

We may also consider to use two preferences option

  • Effect Load Behavior (Keep/Reset)
  • Effect Chain Preset Load Behaviour (Keep/Reset)

Do we really need the "KEEP_TOP (ADOPT_FROM_CHAIN_PRESET)" or can we use a common (Keep/Reset) value?

slotEffectMetaParameter(m_pControlMetaParameter->get(), true);
break;
case AdoptMetaknobValue::KEEP_TOP:
if (loadingFromPreset) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (loadingFromPreset) {
if (loadingFromChainPreset) {

In contrast to the preset (default state) of a single effect.

<widget class="QRadioButton" name="radioButtonKeepAllMetaknobPositions">
<property name="text">
<string>Keep metaknob position</string>
<string>Keep all metaknob positions</string>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<string>Keep all metaknob positions</string>
<string>Keep meta knob position</string>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since it is the "Effect load behavior" we have only one in this context.

<item>
<widget class="QRadioButton" name="radioButtonKeepTopMetaknobPosition">
<property name="text">
<string>Only keep the top-level Effect Unit metaknob position</string>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<string>Only keep the top-level Effect Unit metaknob position</string>
<string>Restore meta knob position when loading a chain preset and keep it when changing an effect</string>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Below: "Always restore meta knob position"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may consider to ditch the middle option, because the user may be either used to changing meta knobs or to fixed.
Making this conditional to the effect selector used might be surprising.

<item>
<widget class="QRadioButton" name="radioButtonKeepTopMetaknobPosition">
<property name="text">
<string>Only keep the top-level Effect Unit metaknob position</string>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Below: "Always restore meta knob position"

<widget class="QRadioButton" name="radioButtonKeepAllMetaknobPositions">
<property name="text">
<string>Keep metaknob position</string>
<string>Keep all metaknob positions</string>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since it is the "Effect load behavior" we have only one in this context.

<item>
<widget class="QRadioButton" name="radioButtonKeepTopMetaknobPosition">
<property name="text">
<string>Only keep the top-level Effect Unit metaknob position</string>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may consider to ditch the middle option, because the user may be either used to changing meta knobs or to fixed.
Making this conditional to the effect selector used might be surprising.

@github-actions
Copy link
Copy Markdown

This PR is marked as stale because it has been open 90 days with no activity.

@github-actions github-actions Bot added the stale Stale issues that haven't been updated for a long time. label Jun 15, 2022
@github-actions github-actions Bot removed the stale Stale issues that haven't been updated for a long time. label Aug 28, 2023
@acolombier
Copy link
Copy Markdown
Member

Do you still have interest in completing this @ywwg ? Looks like this was pretty close to completion. I'll mark as draft for now, but feel free to put back as active when you want us to merge this!

@acolombier acolombier marked this pull request as draft February 5, 2025 18:34
@ywwg
Copy link
Copy Markdown
Member Author

ywwg commented Feb 5, 2025

I do not have time to work on mixxx code so this will need to be picked up by someone else

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants