-
-
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
Epic: STEM mixing #13116
Comments
I'm thinking about the proposed
|
|
Should these COs only work for main decks, or also for preview decks and samplers? The later would be difficult to visualize in the UI. But I could imagine the use case, that a DJ want's to clone a single stem into a sampler. Regarding 1. :
|
I don't think so. I don't really see the use case for having stem control in these component
I didn't think of this but that sounds like a great usecase indeed. Currently, the expected behaviour of loading a stem file in preview or sampler would lead to load the main mix. I'm going to add COs in the plan for loading a stereo track but target a specific stem. Question: is there a naming convention with COs? I went with snake case, but I can see that Regarding 1. :
|
Please use snake case for new COs, Is the extra CO
|
Not particularly needed, but I was under the impression that for MIDI device mapping, having atomic CO which can be triggered is easier for user, seeing some of the latest COs that were added. |
Besides the new COs, it is also important to consider which of the existing COs will behave differently with stem files, e.g.: |
Currently, it loads the master mix which I think make sense
I think it would make sense to clone stem gain and mute state, probably not effect tho. I'm going to add this to #13086 Going to this to |
I profiled the CPU consumption of the engine thread with a stem deck playing and Rubberband R3 running. It seems all CPU is burned in the Rubberband code itself and neither in Mixxx nor in the dependencies of Rubberband:
These functions contain large loops with break conditions. Break-Conditions make the loop length unpredictable, and the compiler can't translate it into SIMD instructions. |
Thanks for running these tests! I have put together a PoC on multithreaded rubberband and the results are extremely promising on my end. Could you please have a go at it and tell me if you see an clear improvement? |
Hello, is this implementation independent from the stem file format? For example, in the future it would be useful to use multiple FLAC / WAV files, or multiple channels in a single FLAC file. |
The scope of this project is limited to STEM files, but in future other soundsources might be added. |
Yes and no.
That's not that simple, due to synchronisation across track. The NI stem is made so it guarantees the same bitrate and ensure synchronisation across track (remember that STEM have not transport control and are expected to provide a synchronised sample rate naturally)
That would work. Only issue would be to deal with stem definition. Note that implementation aim to be as agnostic as possible in the engine; as long as the SoundSource provides multiple channels, and a the MetadataSource provides a stem definition (a pair label/color per stem), this will work fine. The issue is around standardising the stem definition, which might be hard and providing a tool to build or convert a stem in the "extended" NI spec that we support (that is, not restricting to AAC and ALAC) might be the easier way instead of creating yet another standard for STEM. For example, it could take the form of an option that would show in the context menu of a track with more multiple channel, allowing to create a |
Just a note that Mixxx supports tracker module playback, which have multiple channels that get rendered to memory as a stereo pair on load, and it would be cool to level/mute/solo/effect these individually, so this is another consideration for a further future soundsource. |
That would be able to make the most of the stem feature developed here, but the same problem remains and a way to provide stem definition will have to be designed/implemented. From the engine perspective, that has already been taken into account |
Hi guys, I just wanted to show some support for this feature. It's one that I find to be incredibly important since it's one of the few features that has me locked into using Traktor. I'd love to transition to using Mixxx but I simply can't live without this feature. I'm own a Traktor Kontrol S8 and a pair of D2s as well as a S4 Mk2 so if there's anything I can do to help in terms of hardware, just say the word. I've also created a program to split and convert regular mp3s into STEM compatible files using machine learning, which you can find here: Good luck! |
You could try the builds from the PRs mentioned above, like #13123, they are already fully useable, but not yet reviewed and polished. Testing with files generated by another tool will be of cause helpful. |
Thanks for the support @MrPatben8 ! This is hopefully in good tracks to make into Mixxx 2.6, which go to beta somewhere around Q4. As @JoergAtGithub suggested, your help on testing the PR would be greatly appreciated too. Currently, only the S4 Mk3 has some basic support for STEM (#13126) |
Hey guys, I cloned and compiled a version from #13123 but unfortunately loading a stem file into a deck does not seem to activate the on screen STEM controls. Perhaps I'm missing something? |
The CMake settings FFMPEG and STEM needs to be enabled for the build. |
I found and enabled the FFMPEG setting but couldn't find STEM. I tried adding it manually but that hasn't worked. Compiled builds still do not show STEM controls. I can see that in the CMakeLists.txt there is a section dedicated to STEM file support so I'm fairly confident that I'm on the correct branch. |
Line 3442 in a0a8d25
|
For reference, the new Traktor 4 contains some minor changes compared to Traktor 3s stem controls. Loading the original non-stem track when loading a track while shift button is pressed: https://www.youtube.com/watch?v=WRcLyFmZLP0 |
Hey guys! Just found this. This is awesome, thank you so much for your hard work! Let me know if you need help with beta testing and/or code reviews. Feel free to send me an email :)
Yeah it's pretty useful to sync the original file and the stem file to keep the metadata in sync (grid, cue points, etc...) -- is this something you already thought about? Not a big fan of Traktor's implementation because you cannot link your own stem files easily, only those created by Traktor. But it's great to be able to do the stem separation from the explorer (even if they don't support lossless stems yet). It would also be nice to co-locate the original file and the stem file instead of putting the stem files in another folder with a weird architecture. |
We might need also |
When I watched the video (and played with T yesterday to see the functionality of the F1) I thought about that to. |
Added |
As you could use the files that gave problems importing them in Mixxx in the screenshots of the newspost... |
The problem is still here, but this is a debug assert, so you may disable asserts on your build. |
ah ok. I thought you found a solution. |
This is an epic issue to track all the work on STEM mixing.
This issue will also be used to keep track of all possibilities about STEM mixing. This may include competitors or original features
Note that this epic only plans to build on top of the open standard created by Native Instrument. While the implementation will aim to support extended case (e.g MP3 or OGG format for channel) , but guidelines will be taken from the open standard.
Tasklist
This is the list of planned COs
[ChannelX],stem_count
[ChannelXStemY],volume
[ChannelXStemY],color
[ChannelXStemY],mute
[QuickEffectRack1_[ChannelXStemY]],loaded_chain_preset
[QuickEffectRack1_[ChannelXStemY]],enabled
[QuickEffectRack1_[ChannelXStemY]],super1
[ChannelXStemY],split
[ChannelXStemY],split_into_Z
[ChannelXStemY],vu_meter
[ChannelXStemY],vu_meter_l
[ChannelXStemY],vu_meter_r
[SamplerX],load_selected_track
[PreviewDeck1],load_selected_track_stem_Y
[ChannelX],load_selected_track_stems
[LibraryStemX],selected
(Currently
Y
goes from1
to4
)Limitations
Rubberband audio scaling is currently the bottleneck and seem to not allow more than 2 stem decks at a time. When using linear or SoundTouch, all four decks can be used as stem, although CPU usage is significantly increasing compare to stereo decks.
Usecase log
Split a stem deck
When splitting a stem from a deck, the deck will be cloned to the sibling deck (A and C, or B and D), and the given stem will be muted on the current deck, and played solo on the sibling deck.
Deck coping and cloning
Here the expected behaviour from the two existing COs when targeting a deck with stem loaded
[SamplerN]LoadTrackFromDeck
: Will load the main mix, that is the pre-mixed track included in the stem file[ChannelN]CloneFromDeck
: Will clone the stem parameters values from the original deck, that is the gain and mute statusPre-mixed stereo load
Design 1
load_selected_track_stems
can be used as followed:0
no individual stem selected.File will be loaded as a stem if on a primary deck, or the mixed stem in a secondary decks (sampler or preview, same as
0b1111
/15
)0b0001
means only the first stem is selected for stereo pre-mixing.0b1101
means all stem but the second are selected for stereo pre-mixing.Design 2
[LibraryStemX]
can be used to pre-select stem to load, before calling<group>,LoadSelectedTrack
. Note that the selection state will be persisted after loading, meaning that multiple call toLoadSelectedTrack
will lead to the same section. No selection will default to load the track as a stem deck if supported, or the entire track as stereo if stem deck is not supported.Relates to #7935
Dependency of #11391
The text was updated successfully, but these errors were encountered: