-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Add support for cycling through available hotcue colors #2384
Conversation
This adds two new control objects: hotcue_X_color_prev hotcue_X_color_next These allow users to cycle through the available colors in their palette and makes it possible to modify colors through controller mappings (e.g. by mapping the parameter +/- buttons).
This makes assigning colors to cue points much more straightforward on this controller. When pressing a performance pad (e.g. to activate a hotcue, the mapping "remembers" the hotcue number and allows cycling through the available colors of that hotcue using the PARAMETER 2 +/- buttons.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the PR. From the code it looks already good. However I like to discuss two issues, unsure.
This introduced a massive number of 5027 new COs.
The the new controls are not learn-able.
Both can be solved by moving the controller script part to the c++ domain.
@daschuer I moved the logic to the C++ domain, so that this only introduces 3 COs per channel. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good now, only a minor comment.
OK, I removed it. |
Are there any issues remaining that you want me to fix before merging thi? If not, I'll merge this tomorrow. |
I don't understand why this was added. Couldn't this already be done entirely by a controller script? Why should Mixxx have a concept of a focused hotcue? Why doesn't the controller script maintain that state? |
That was my initial implementation. However, as @daschuer pointed out this a) adds a lot of new COs for cycling through colors and b) is not learnable/mappable by plain XML mappings. Shall I revert the merge? |
The reason why I wanted a CO to cycle through colors at all is that it would be very cumbersome to implement it in JS. We currently do not have a way to know how many colors are in the current palette. And even if we had that, a JS implementation that just increments/decrements the color_id would only work until we switch to the QColor/QRgb-based approach. Also, we'd also keep an eye on palette changes (when a user switches/modified the palette). |
Yeah, that would take some work to implement in JS. I was just wondering whether we need to expose the color palette to the JS environment. With this new feature, I don't think we do. If we don't need that, it will make #2399 a bit easier. |
With the If we revert the last 3 commits of this PR, we'd get rid of the |
Without exposing the color palette to JS, we impose this one way of mapping how to choose hotcue colors as the only way it can be mapped. I am doubting this is a great way to map this functionality. Scrolling through an ordered list one by one, especially when you can't see what is next and previous, is cumbersome and inefficient. In Mixxx 2.0, that was the only way to load different effects and it was a pain. It would be easier to pick a hotcue whose color to change (perhaps by pressing it with some modifier button held) then show the color palette on the controller's pads so they are all visible and the user could immediately choose any of them without scrolling. This would require exposing the color palette to JS.
Why would that be a problem?
I'm not concerned about this. The approach in this PR is already unusable with XML. There is no way to choose the focused hotcue via XML. |
I am still convinced that his PR is a good step forward.
Because of the time it will take to fire up and shut down Mixxx.
There is no need to, because it happens implicit by activating the desired hot cue. Making Mixxx aware of the focused hot cue allows some more features. We may pop up the color selector when the controller switches the color. This way a user can see which color is next and can more easily scroll to it. |
Ping @Holzhaus, thoughts on my comment above? |
It is, but it can somewhat be mitigated by popping up the color selector for a few seconds. Also, I fear this is the only way to map this properly on some controllers (see point 3 below).
Great idea! Some thoughts:
|
I don't agree that this is necessary, nor does anyone else making DJ software (nor have I come across anyone else saying they want this from any DJ software). That's not to say it isn't a good idea and a neat feature, but I don't think there's much of a point if it is more cumbersome than using the mouse. I think scrolling through a list from a controller would be more cumbersome than using the mouse, even if there was on screen feedback. So I wouldn't suggest adding this to mappings for controllers that don't have multicolor LEDs.
Do we really want to support this complexity? Currently only 8 colors are shown in the color picker popup. Letting users add an arbitrary number of colors to this seems like overkill to me.
Yes, the JS implementation would be a bit complex. We could change the HotcueButton class so that it can be switched to a mode for picking a color. Somehow all the HotcueButtons would need to be iterated over to enable that mode. I am thinking the color picking mode would be activated by pressing the hotcue button with a special modifier. I'm not exactly sure what would be the best way to organize the code would be without writing out the code, but I think we can take care of it (mostly) in the HotcueButton class.
This would require sticking with the "focused hotcue is the last activated hotcue" paradigm implemented in this PR. I do not think that is the best way to design this. It would prohibit changing the color of a cue on a playing deck unless the user interrupts playback by jumping to that cue, which I would think would not be desirable in some cases (or maybe most cases, depending on your workflow). Instead, I propose holding some modifier and selecting which hotcue to pick the color for by pressing that hotcue button. Then the pads show the color palette, then switch back to showing the hotcues after a color is picked. No existing controller is designed for this, so it may be a challenge to squeeze it into mappings. Perhaps holding shift in addition to some infrequently used button could be used as the modifier.
I don't consider this a problem. |
Not always. The context switch is really bothersome IMHO. And most people would customize the palette that the most important 5 colors are near the front of the list. Setting a hotcue and pressing PARAM1+ 4 times is miles ahead of grabbing the mouse (or even the touchpad if there's none connected), searching the cue in the waveform, right clicking and picking a color in terms of speed and usability.
Maybe users like the Palette from Serato DJ Intro/Pro (18 Colors) or Rekordbox (16 colors). I think we should support that.
I'm not sure that this is a problem. Usually I'm editing hotcues while I'm at home and practicing transitions. So It's very convenient to set/trigger a hotcue and then immediately edit its color. If it's not a new hotcue I want to listen to the part of the song it jumps to anyway, so that I know what kind of hotcue it is. I don't think anybody edits hotcues during a live set while that track is playing on master out. Even if we implemented a hotcue picker instead of using the last hotcue, I wouldn't risk accidently jumping to a hotcue while editing colors because I release the modifier button too early or something like that. By the way, that's another reason why I find it handy to map these
I think this is harder to implement and also less straightforward to use than just using the last activated hotcue. |
This adds
twothree new control objects:The first one "remembers" the hotcue number of the most recently activated/set hotcue. The other two allow users to cycle through the available colors in their palette and makes it possible to modify colors through controller mappings.
For the Roland DJ-505, I mapped the (previously unused) PARAMETER 2 +/- buttons to make assigning colors to cue points much more straightforward on this controller.