Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Eq band bypass mode #10934

Draft
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

ferranpujolcamins
Copy link
Contributor

@ferranpujolcamins ferranpujolcamins commented Sep 30, 2022

I added a preference in settings that allows the EQ buttons to be set in Bypass mode.

In bypass mode, when the button is enabled, the EQ band has no effect (it's parameter is set to 1).

The idea is that you can bypass the EQ of the track you are mixing out, which allows you to set its EQ knobs to a lower level without them immediately affecting the playing track. Then when transitioning to the new track, you disable the bypass of the EQ and the outgoing track sets to lower eq levels which don't have to be total kill, as opposed to the classic "kill swap" transition.

Thus I find this technique more flexible while mixing and I think it's worth the addition. I'm not aware of any Dj software or mixer that implements this, so this is a chance for Mixxx to break new ground :D

TODO: The tooltips need to be updated. I'm not sure whether I should change them to something generic like "Eq button" or try to make them dynamic so they change with the selected eq mode. ☑️

@ferranpujolcamins
Copy link
Contributor Author

Manual PR: mixxxdj/manual#520

@ferranpujolcamins
Copy link
Contributor Author

@daschuer any ideas on how to approach the tooltips?

@ferranpujolcamins
Copy link
Contributor Author

So I managed to get the tooltips update when the mode changes. This is ready for review.

@ronso0
Copy link
Member

ronso0 commented Oct 3, 2022

The idea is that you can bypass the EQ of the track you are mixing out, which allows you to set its EQ knobs to a lower level without them immediately affecting the playing track. Then when transitioning to the new track, you disable the bypass of the EQ and the outgoing track sets to lower eq levels which don't have to be total kill, as opposed to the classic "kill swap" transition.

So this is suuposed to allow "level swap", like set the EQ levels for a transition, then disable Bypass on both decks to immediately apply the prepared levels?

@ferranpujolcamins
Copy link
Contributor Author

So this is suuposed to allow "level swap", like set the EQ levels for a transition, then disable Bypass on both decks to immediately apply the prepared levels?

Exactly, just that you will disable bypass on the incoming track so you hear it full level and enable it on the outgoing track to set new eq levels

double fHigh = knobValueToBesselRatio(
m_pPotHigh->value(), m_pKillHigh->toBool());
double fLow, fMid, fHigh;
if (m_pEQButtonMode->get() == 0) {
Copy link
Member

Choose a reason for hiding this comment

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

An enum value for this compare would be nice.

@daschuer
Copy link
Member

daschuer commented Oct 4, 2022

I am unsure what is a best approach here regarding the COs.

We have the "intended" model of the controller, that has a clear assignment of buttons and knobs.
For my understanding this is expressed by:
"[Channel1]", "filterLowKill"

Than we have the implementation driven:
"[EqualizerRack1_Effect1]", "button_parameter1"

In current main, both are aliased. This allows us to use the deck EQs as effects.

In this proposal you keep the alias and add a global mode inside the effect that modifies the behaviour of the effect itself.

Looking at the cue button, we have the same. In this case we have single cue COs for different behaviours and the "cue_default" that changes the behaviour according global parameters.

My expectation was to do the same here.
"[Channel1]", "filterLowKill" may control either the kill button of the effect or the "enable" button of the effect "[EqualizerRack1_Effect1]"

This would allow to continue to use the EQs in the effect racks independent from the kill button setting of the decks.

What do you think?

@ferranpujolcamins
Copy link
Contributor Author

HI @daschuer , I'm sorry I don't quite understand what changes are you proposing me to do. Could you elaborate?

@daschuer
Copy link
Member

daschuer commented Oct 8, 2022

It is just a suggestion for discussion:

  • Remove the alias
  • route the legacy variable name, that match the controller layout to either the "button_parameter" or the "enable" co.

Oh,I just realize that we have only one "enable" CO
This means we need to introduce new "bypass" COs for each band.

Consequences: loading a EQ into the effect Rack gives access to bypass and kill at the same time.

@daschuer
Copy link
Member

daschuer commented Oct 8, 2022

The idea is a clear abstraction layer:
Legacy COs = what you see on the Controller
Effects Rack COs = what the effect provides.

This way every effect writer is free to decide how the controller should work when loaded into the deck. This is relevant when using a four band EQ or a PlayDifferntly EQ or whatever fancy we like.

@ferranpujolcamins
Copy link
Contributor Author

Makes sense, but shouldn't we rename the legacy CO to something more generic anyway? They might not control kill or EQ.

@daschuer
Copy link
Member

Renaming COs should only be done in exceptional cases, because we are not sure who works with the old names.

My view here is, that the legacy COs match the marking of the controller. In that regards the CO name is good. If we have controllers with different making/EQ concepts, we may add them in addition. Are you aware of one?

@ferranpujolcamins
Copy link
Contributor Author

ferranpujolcamins commented Oct 12, 2022

@daschuer something like my last commit?

TODO:

  • Fix tooltips
  • Update skins
  • Fix a couple of bugs when loading tracks / changing eq button mode

@ferranpujolcamins ferranpujolcamins marked this pull request as draft October 12, 2022 22:38
@ferranpujolcamins
Copy link
Contributor Author

@daschuer ping

@daschuer
Copy link
Member

daschuer commented Dec 8, 2022

Yes, exactly. Thank you.

@github-actions
Copy link

github-actions bot commented Mar 9, 2023

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 Mar 9, 2023
@ferranpujolcamins
Copy link
Contributor Author

Hi @daschuer, I'm trying to bring this to master.

My expectation was to do the same here.
"[Channel1]", "filterLowKill" may control either the kill button of the effect or the "enable" button of the effect "[EqualizerRack1_Effect1]"

SO IIUC, in this PR I should change all skins and controller mappings to now use e.g. [Channel1], filterLowKill instead of [EqualizerRack1_[Channel1]_Effect1], button_parameter_1. Did I get this correctly?

@github-actions github-actions bot removed the stale Stale issues that haven't been updated for a long time. label Jun 11, 2023
@daschuer
Copy link
Member

Did I get this correctly?

Yes, IMHO this will make the intention how to use it clear. But I am also interested how others think about it?
@ronso0 Does it make sense for skins?
@Swiftb0y and for controllers?

@ronso0
Copy link
Member

ronso0 commented Jun 12, 2023

I'll take a look asap. I understand the idea but didn't follow this PR closely so I'll need to test it.

@Swiftb0y
Copy link
Member

I find this feature quite odd. What advantage does this bypass feature have over just turning the eq knobs to the intended level quickly?

@ferranpujolcamins
Copy link
Contributor Author

@Swiftb0y

What advantage does this bypass feature have over just turning the eq knobs to the intended level quickly?

Well, this could also be said about the kill buttons :)

Imagine you are playing Track A and you want to transition to a Track B. Let's say you want to it by swapping the mid frequencies.

The typical frequency swap with the kill buttons looks like this:

A Kill B Kill A Level B Level
Before transition Off On 1 0
After transition On Off 0 1

You first have kill enabled on the upcoming track and at some point you swap kills with the other track. The * Level columns represent the final volume of the track (0 means the audience does not hear that frequency band for that track).

Notice how you don't have control over the final volume of the freq. band of the outgoing track, because the kill switch always sets the level to 0.

Take a look at how a similar transition would look like with the Bypass feature. Here, the "button work" is reversed: bypass is first enabled on the outgoing track. This allows us to set the Eq knob to a lower level without affecting the track yet. When we do the swap, we then disable bypass on the outgoing track which then sees its volume reduced.

A Bypass B Bypass A Knob B Knob A Level B Level
On Off 0.5 0.5 1 0.5
Off On 0.5 0.5 0.5 1

Notice how, unlike with the Kill button, with bypass we have control on the final level of the outgoing track via its eq level knob.

Can you do this by quickly moving the knobs? Yes, however you need your 2 hands, thus you cannot do anything else at the same time (for example, you cannot swap 2 frequency bands, you'd need 4 hands for that :) ).

You can however use one hand to press the Bypass buttons while your other hand is free.

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

Successfully merging this pull request may close these issues.

4 participants