Keep all meta knobs when loading presets if the user preference is set to keep the values.#4687
Keep all meta knobs when loading presets if the user preference is set to keep the values.#4687ywwg wants to merge 2 commits into
Conversation
…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.
daschuer
left a comment
There was a problem hiding this comment.
This looks reasonable to me.
I will delay merge a bit to give others a chance for a review.
|
@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 |
|
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:
|
|
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. |
|
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.
|
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. |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
would "Effect Unit Metaknob" be better?
There was a problem hiding this comment.
I still don't know what that is. Effects have metaknobs, not effect units.
There was a problem hiding this comment.
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) { |
There was a problem hiding this comment.
| 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> |
There was a problem hiding this comment.
| <string>Keep all metaknob positions</string> | |
| <string>Keep meta knob position</string> |
There was a problem hiding this comment.
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> |
There was a problem hiding this comment.
| <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> |
There was a problem hiding this comment.
Below: "Always restore meta knob position"
There was a problem hiding this comment.
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> |
There was a problem hiding this comment.
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> |
There was a problem hiding this comment.
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> |
There was a problem hiding this comment.
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.
|
This PR is marked as stale because it has been open 90 days with no activity. |
|
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! |
|
I do not have time to work on mixxx code so this will need to be picked up by someone else |
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.