-
-
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
feat: add advanced stem loading COs #13268
base: main
Are you sure you want to change the base?
feat: add advanced stem loading COs #13268
Conversation
30fd666
to
2f2a22a
Compare
b4db8c8
to
fdd8810
Compare
a36c6a0
to
31becb9
Compare
31becb9
to
fab6880
Compare
Please note that UI changes (1st and 3rd commits) will be moved to #13515 once this PR is ready to be merged! |
2fc47ba
to
868a67e
Compare
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 have some doubts if this is consistent with the other PRs and the overall user experience.
The users sees only the track in the library which has four stems. The use can now load a single stem form a file or load the whole stem file and mute all 3 of them.
In the first case they cannot add a second stem in the second case they suffer the penalty of stem processing. They need a brief understanding of the engine interna to make the right decisions during mixing which could be limiting.
Can we join both? How can we allow to seamlessly switch between these cases.
A typical use case is probably:
- Play/Cue a full track
- Notice unusable part
- Switch to stem mode an silence that part
- Instant double the track in a second deck
- Bring the silenced part in using an effect
How can we allow this using the new single stem mode introduced here behind the scenes?
, | ||
stemIdx | ||
#endif | ||
); |
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.
That looks not right. How about use two lines? We may also consider to reduce the use of __STEM__
where it has no performance impact like here. We already have the default = 0.
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.
Make sense. So would you prefer I update the signature globally?
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.
Yes in general. I made this comment before raising my general concerns regarding this single stem mode. Maybe we need a slightly different signature .. unsure..
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 will wait for the full review before starting refactoring then :)
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 have replaced all the signature changes with two explicit lines, which makes it easier to understand now. Hopefully this works for you!
The first scenario is the only way on non-primary decks (sampler and preview), while second is the default for primary deck. realistically, I only added the second option for primary deck for feature parity and enabled that advanced capability, or workaround for light platform which would struggle with more than one stem deck + rubberband (eg. raspberrypi)
By default, the By the sounds of it, the use case you are describing (clone switching between individually loaded stem vs full deck with muted tracks) are falling under the the |
Ah, OK I forget about the sampler use case. Than let's think about a way to gerearize this topic. Since it is handled by the same engine class anyway. How is the transition from single stereo to stem now done? Is there way to keep the transport going during the switch? A switch from the full track to a stem mix is probably the same as a switch from a stem mix to one of the other stems. Do we need to consider something like "load as karaoke" where we process three of the stems? I am not demanding to implement it here. I just like to brainstorm possible future solution to have the Co interface proved for that. Idea: can we use the mute controls for selecting the loaded stems? |
Currently there is no way transition "live" for a stem deck to a stereo deck with a track. With that current feature, can chose the load a track in an empty deck. If we think of a case where one would want to switch from a stem deck to a stereo deck, they would need to use an empty deck and handle the transport synch.
It would be fairly trivial to implement to some kind of
I think it would be great to even go further an allow loading a set of stem pre-mixed to stereo (eg. Note that in case not all the above feature wouldn't be ready for 2.6 and we would like to wait for completeness before releasing, the
This is already how we were planning to make the |
I have removed the GUI element which aren't ready to be merged. I believe it shouldn't prevent testing this feature! I have also removed COs that are not yet ready to go and added the mask stem selection, as well as the menu for it. |
03d252d
to
6782bde
Compare
6782bde
to
0f433d4
Compare
The multi stem selection menu works great! Like it! But two improvements are needed:
|
Did you consider to put the stem selection in the root? Like proposed here: #13268 (comment) The think we have two options: I think we should keep the same UX in all such menues. "Load as stem deck" sounds wrong. There is no concept of a "stem deck" for a user. The deck has always stem controls. Maybe "Load for remixing"? |
I did - AFAIS, I cannot see anyway to make a multiple selection solution like I did already, without making something overly complicated.
The waveform renderer uses the same data available in the analysis. The renderer consume the signal that expose the stem mask and only display the stem signal actually played, similar as if it was muted on stem deck. This allows the waveform to be more aligned with what is played. I suggest we keep it this way, as it is the only way to know what is loaded |
I think @acolombier is right here! It can not work the other way around, because the possible operations depend on the type of deck. Therefore the deck type must be known, before we can show the possible load operations to the user. |
Ok, than let's continue this way and wait for user's test results. |
I think this looks almost mature regarding the upcoming deadline. I just need to do manual tests to confirm that it does not default or such. A decision about the visual sting suggestion would be also nice before merge, to not create double translatiors work. The rest can be postponed. Is that OK? |
Currently, we cannot load the stream 0 due to DSP not being supported. However, I guess we could add a
I'm not a big fan of this alternative, but appreciate that a "stem deck" may be misleading. I have gone with |
360b92a
to
9e1ea3d
Compare
9e1ea3d
to
394ba4a
Compare
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.
@JoergAtGithub it took me sometime to reproduce - my theory is that Could you please give it another try? |
I tried this again, and it does not fix the waveform issue. I found out, that if I select multiple stems with CTRL+Click it works up to three stems, but not if I select all 4. |
As I cannot narrow down how the race condition is happening, and the PR has been blocked for more than a month now, I have reverted the commit which introduced the loading of the stereo waveform if the stem was loaded as stereo. Are we happy with that trade-off? @JoergAtGithub could you confirm that there is no issue with this latest version? |
The waveforms now allways appear! |
Works as expected now! Thank you! |
Friendly ping @daschuer, in case you've missed the notification :) |
Currently, this goes with a mix of extending the existing load signal/slot and creating a second one, called subsequently. Is there any preference? Should I change the implementation to use only one? (only extending existing signal or only subsequently emit)