-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Allow convert tracks to STEMS using axeldelafosse/stemgen + install stemgen on debian #15881
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
Conversation
(Belated) Happy New Year 2026!
Implemented for track models that don't have a position column (playlists) as that still requires rebuilding the row cache
Tracks: avoid re-sorting table when purging/hiding tracks
Interface preferences: use main window screen to detect if skin fits
|
Thank you for this PR, As a first-time contributor we need you to sign the Mixxx Contributor Agreement and comment here when you have done so. It gives us permission to distribute your contribution under the GPL v2 or later license and the Apple Mac App Store. It is also helpful for us to have contact information for contributors in case we may need it in the future. |
|
A few general comments/questions before diving into the code.
|
|
Thank you. This looks nice. I am happy you enjoy the work with us even if you it some pit falls. You should really use git branches to not loose some valuable work one day. Than create a new PR from the branch and copy over your comments |
daschuer
left a comment
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 :-)
src/stems/dlgstemconversion.cpp
Outdated
| setMinimumWidth(600); | ||
| setMinimumHeight(400); | ||
|
|
||
| // Fer la finestra modeless (no bloquejant) |
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.
We use English comments.
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.
This one escaped me. This night I'll fix and create my own branch.
src/stems/dlgstemconversion.cpp
Outdated
| } | ||
|
|
||
| void DlgStemConversion::createUI() { | ||
| QVBoxLayout* pMainLayout = new QVBoxLayout(this); |
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.
Because this pointer is managed by the QT object tree and no delte is required we hide the new like this with our own Mixxx solution:
| QVBoxLayout* pMainLayout = new QVBoxLayout(this); | |
| parented_ptr<QVBoxLayout> pMainLayout = make_parented<QVBoxLayout>(this); |
You can apply this pattern to the other new calls as well.
Yep, what initial I was planning is when you click to convert to stems, it appears a dialogbox to choose all of this. Also stemgen only allows wav, flac and don't remember what more, for example mp3 don't allows to convert.
ok! nice! interesting contribution. Maybe the recommendation is not to convert tracks to stems when DJing.
ok! I'll try to implement.
I'm using debian, now I don't have other operating systems prepared to development, maybe I can prepare a virtualized windows, but take in mind that is my first time with c++, please give me some time to clarify 😅. |
|
I think we need to consider the deployment a bit. I can imagine to deploy with the stem menu option but without stemgen itself. The other option would be to deploy the tool within Mixxx. I have no experience how Python programs are normally deployed to a user that have no clue about pip and fiends. Last year we had a GSoc project porting a stem generator to CPP for fast execution |
|
Before knowing the existence of axeldelafosse/stemgen I tried to create a script that converts the audios to STEMS but was not working properly. The idea is to parse the track (with right format and extension) to htdemucs and then when you have the audios divided, you have to create a m4a with ffmpeg file that in metadata it has a kind of json. I can try to adapt the code in the same way. Now "the problem" is to install axeldelafosse/stemgen that is python, then the "problem" will be demucs. I have to search and see which is the best solution. Maybe I could find a project in c++ that has demucs implemented. Also in demucs we shall be aware about using CPU or GPU, always GPU support will be faster. Also we shall to see the Mx Apple CPUs that have NPU. I like it, I can see that this will take more work than I expected :) |
|
It is a good idea to go in small steps. Using stemgen here is a good approach to have a quick usable result. My post was more a cell for opinions on this of the others. @ronso0 is our GUI expert @acolombier and @JoergAtGithub where mentor in @dhunstack project. |
|
Later I'll create a new branch related to stems. About GUI, I was thinking that the wheel-type volume control might be a bit difficult to operate with the computer mouse and maybe it would be more interesting to use a sidebar or horizontal bar. What is the idea of integrating stems with mixing consoles? Because the one I have doesn't have a place to manage stems. It's already difficult for me to control the intensity of the effects. |
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 looking into this!
This actually clash with a very early proposal I was planning to start working on, which was allowing to define "Scripts" that could be summoned on tracks, including a lightweight API to interact with the Mixxx database (e.g after running a stem separation, duplicating cues for the newly created track and auto hide the stereo track...), similar to Gimp or Blender.
A few early comments on this initial efforts with direct integration to axeldelafosse's stemgen.
- Last time I checked, this project suffers from a few issues regarding transparency and license infringement, bundling some executable directly into the repo and shipping them into non compliant licenses. I think there is a serious risk for Mixxx integrating with it directly and potentially repercussion, as well as reputational damage, or at least ethical questions.
- This project is using the Facebook's initial research project and thus comes with pytorch and cuda, which total for over 6 GB of dependencies.
As Daniel mentioned, @dhunstack had worked on making the research project into a productionised ONNX model. I appreciate that integrating ONNX into Mixxx is still to be done and having an intermediary solution may not be a bad shout, but I would advocate to still push in the right direction and use a tool that can support Mixxx's ONNX model
JoergAtGithub
left a comment
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 to second @acolombier, using axeldelafosse/stemgen contradicts the work we've done over the last ~9 months. Mixxx is a cross-platform application and supporting only NVIDIA hardware acceleration does not fit, despite that axeldelafosse/stemgen implies the installation of a Python runtime and other dependencies.
The way to go is to add onnxruntime as a dependency and use the ONNX Demucs model from mixxxdj/demucs for stem separation.
But the GUI part implemented in this PR might be useful once all the parts are in place.
Bumps [azure/trusted-signing-action](https://github.com/azure/trusted-signing-action) from 0.5.10 to 1.0.0. - [Release notes](https://github.com/azure/trusted-signing-action/releases) - [Commits](https://github.com/azure/trusted-signing-action/compare/v0.5.10...v1.0.0) --- updated-dependencies: - dependency-name: azure/trusted-signing-action dependency-version: 1.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]>
|
OK @acolombier and @JoergAtGithub. It wasn't my intention to interrupt anyone's work; I hadn't seen this other repository, and it's infinitely more complete than anything I could have created. I propose reverting any commits I may have made to my implementations (except for the one fixing the Debian dependencies, which is where it all started and what motivated me to continue contributing). I've created a branch at https://github.com/blackhold/mixxx/tree/stemgen, I will try to continue implement stemgen looking how axeldelafosse/stemgen do creates the stem files, but using mixxxdj/demucs project (does it is working well?). As I told, I'm starting to use C++. Yesterday, with what I did, I started to understand a little more about how a program in this programming language is structured, although I still feel quite lost. |
|
Don't get us wrong, the GUI part of this PR is something we need and very welcome! Only using axeldelafosse/stemgen as backend is the part that does not fit. |
|
We've an Epic issue that describes the steps of implementing stem seperation in Mixxx: #15495 |
|
@JoergAtGithub ok! I will try then to implement the GUI stuff, next is try to make appear the damn button!!! create a window to choose the conversion options and the window to see previously converted tracks. With the implementation of axeldelafosse/stemgen I almost understood how to interact with other applications. Yep! all related to deployment of applications in Debian, I'm hard on it. Also to deploy python applications. I will replace axeldelafosse/stemgen with https://github.com/mixxxdj/demucs |
…ns/2.5/azure/trusted-signing-action-1.0.0 Bump azure/trusted-signing-action from 0.5.10 to 1.0.0
|
Hi! Right now working on it! I don't know if I have time to end it now, but at the moment:
One question, if I want to upload my branch commits what I have to do?
How to link to this PR? or I have to create a new one? Many thanks! |
|
Great progress, thank you. It would be nice to finish your other Debian environment PR first. This is suitable to become familiar with git. |




Description
Allow convert tracks to STEMS using axeldelafosse/stemgen + install stemgen on debian
Changes
Need help
This is my first c++ contribution, I'm not used to work with this language, on collaborating with this PR, I'm trying to learn this programming language. Apologies in advance for any damage I might be causing with this piece of code. Also, my apologies for getting a little confused with the PRs on GitHub.
Thanks @daschuer for encouraging me to participate and to learn.
Related Issues
Related #15307