-
-
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 beatloop anchor to set and adjust loop from either start or end #12745
Add beatloop anchor to set and adjust loop from either start or end #12745
Conversation
e467ee9
to
27154a8
Compare
Thank you for strating this topic. Can you take s screenshot of the new button in it skin area? The icon itself does not work well for. It looks like a beat grid edit icon. Did you consider to reuse the icons of the loop-in/out button? I can think of a loop-out button with a lock overlay for the reverse case. Or the full loop icon with a pointer or lock overlay right or left. |
The most puzzling question is how make this accessible from the controllers. Did you consider this? We are currently facing the issue that the loop out button alone does nothing or surprising things. Did you consider to make use of it? |
this, | ||
[this](double value) { | ||
if (value > 0) { | ||
slotBeatLoopAnchorChangeRequest(static_cast<double>( |
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.
I think you can read the value of m_pCOBeatLoopAnchorToggle right away using toBool()
without any connection.
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.
I've used toBool()
but not sure how I can make the toggle
work without connection. Could yous how me a example?
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.
You need to make the control a toggle pushbutton like here:
Line 233 in 7b3e485
m_pSelectBigSpinnyCover->setButtonMode(ControlPushButton::TOGGLE); |
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.
Sorry, I'm not sure how you want me to remove the connection. This should already be a ControlPushButton
. In the example you've linked, there also seem to be a connect
m_pSelectBigSpinnyCover = std::make_unique<ControlPushButton>(
ConfigKey("[Skin]", "select_big_spinny_or_cover"), true);
m_pSelectBigSpinnyCover->setButtonMode(ControlPushButton::TOGGLE);
connect(m_pSelectBigSpinnyCover.get(),
&ControlObject::valueChanged,
this,
&SkinLoader::updateSpinnyCoverControls);
Just to make sure you haven't missed it, but this connect
is for the toggle
(loop_anchor_toggle
) control, which flip the state of the main CO (loop_anchor
), later use in the loop logic. Do you think I can still remove the connect for the toggle? If yes, could you make a code suggestion?
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.
The toggling is handled inside the control, via ControlPushButton::TOGGLE
You need only to connect the signal when you like to react on the event. But this is not the case here.
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.
Why do I not want to react to the toggle event here? Since the loop anchor state is stored in an other CO, do I not need to replicate it here? I'm confused
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.
I think you can do it with just with one CO. But maybe I miss something?
27154a8
to
f08b0f7
Compare
I have put a little screen recording in the PR description. Here is a focus on the section as well
Yeah, I've used the loop-in SVG as a starting point, but I must confess I have no clue what I'm doing in Inkscape. Some help on the icons would be greatly appreciated :) I will update change the
Yep, I have already implemented it on my controller, before doing the UI work in order to test the feature on a real setup. Currently with my S4 MK3 mapping, if you keep the "Sample" pressed, the
Yes, it does now weird thing consistently in the tho modes. At first glance, there seems to be multiple issues, but I believe this will be out of scope for the current piece of work. |
f08b0f7
to
b3246c0
Compare
I have rework the icon to follow your suggestion @daschuer Kooha-2024-02-07-11-09-43.webmKooha-2024-02-07-11-19-15.webmThe classic one seems to loose its background when active but I haven't managed to find the CSS rule causing issue yet |
Thank you for the new Icon. I think this is good enough to see the intention. We can polish it at any time. No need to learn Inkscape ;-) |
Just a side note, didn't test this yet: |
b3246c0
to
a75206b
Compare
I have removed the redundant CO ( Kooha-2024-02-08-10-22-24.webmKooha-2024-02-08-10-21-51.webm |
I'm wondering how this solves the use case mentioned in #12737 where you want to spontaneously create a loop backwards from the playhead. Wouldn't that require to always keep the loop anchor set to End, but how does this work with the 'regular' beatloop usecase where you want a forward loop? |
For my understanding you can switch between these two modes by the new toggle button. I have not yet played with it, but I can imagine that will become my new default. You can kind of listen the first path of the planed loop before enable it. Before you need to remove the loop quickly before the loop end if you notice something is messed up. |
a75206b
to
776b730
Compare
776b730
to
70f0639
Compare
I think we should extend this by What do you think? |
I'm afraid it may lead to unexpected behavior, since it could mean that one could "accidentally" set a loop on the last X beats rather than on the next X ones. Say you want to put a 64 beats loop on the outro that just started, but it turns out that the outro only has 32 beats, you unexpectedly end up setting the loop on the last 64 beats, leading to a jump back in the verse or chorus preceding the outro. It's worth to point out that, this PR in its current state has already solved the issue #12737, by:
|
I am also not sure that AUTO will work. The issue is that you can not rely on it. You need always check if the picked loop is usable or on any outro garbage. The Ideal outro loop is on some beats without lyrics or lead instruments. All the long press tricks will not work, because we need immediate responds for the end loop in the emergency use case and it will also immediately mess up the mix when doing wrong.
Ideas: 3. 4. This works for the emergency case where you realize the forward loop will produce rubbish, but probably not on a regular basis. 5. |
So a bit like my loop_out idea? (hold loop_out, press beatloop for backwards loop)
|
I like 3 since that would encourage more granularity on the mapping and describe behaviour more explicitly (e.g "while you press this button, you also enable slip" - as it is the case with 4 will not work in case of emergency since you aren't able to set a lop beyond the end of a track, so I like 5 too although I thing it is mutual exclusive with 3 - you can also set |
Yes, Drawback: It will mess with the loop_anchor button, and is not mappable via XML (GUI) |
Yeah, that sounds like a major drawback. Perhaps option 5 is the best then? Just add a |
I have added the the |
I'm not happy with the LateNight icons, the lock is too small and has cutouts whic makes it hard to read IMO. |
@ronso0 Your review is pending. Are all your topics fixed? |
I'm taking a look at the LateNight visuals and will send a commit with some fixes & tweaks soonish. |
Are you happy to do it as a subsequent PR or do you think it should come as part of that one? |
Yes, thanks. FWIW I'd prefer if we stick to the rule that the reviewer closes his review convos if the issues/request have been addressed. That allows to quickly check for open issues. |
Thank you, I am curious if this will change my habit with beatliops. |
Add the ability to define what is the static point of the loop or which point gets inherited from the current position.
Better wording suggestion would be greatly appreciated!
Kooha-2024-02-07-10-30-13.webm
Resolves #12737