Description
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
- Add simple support for STEM files #13044
- Add support for stem in the engine #13070
- Add analyser support for stem #13106
- Add stem controls #13086 (Manual)
- Add quick effect support on stem #13123
- S4 Mk3 screen support #13653 (contains the STEM implementation as well)
- Multithreaded rubberband #13143
- feat: add advanced stem loading COs #13268
This is the list of planned COs
COs | Description | Status |
---|---|---|
[ChannelX],stem_count |
The number of available stem on the deck (read-only, 2..4) | Implemented in #13086 |
[ChannelXStemY],volume |
Adjust the gain of stem #Y (0..1) | Implemented in #13086 |
[ChannelXStemY],color |
The colour of stem #Y (read-only, 32-bit RGB) | Implemented in #13086 |
[ChannelXStemY],mute |
Mute the stem #Y (0 or1) | Implemented in #13086 |
[QuickEffectRack1_[ChannelXStemY]],loaded_chain_preset |
Load the chain preset to the stem #Y | Implemented in #13123 |
[QuickEffectRack1_[ChannelXStemY]],enabled |
Enable the chain preset to the stem #Y | Implemented in #13123 |
[QuickEffectRack1_[ChannelXStemY]],super1 |
Adjust the 1st super parameter on the chain preset for the stem #Y | Implemented in #13123 |
[ChannelXStemY],split |
Split the stem #Y into the sibling deck if empty. | Not implemented |
[ChannelXStemY],split_into_Z |
Split the stem #Y into the specified deck #Z if empty. | Not implemented |
[ChannelXStemY],vu_meter |
Outputs the current instantaneous stem #Y volume | Not implemented |
[ChannelXStemY],vu_meter_l |
Outputs the current instantaneous stem #Y volume for the left channel | Not implemented |
[ChannelXStemY],vu_meter_r |
Outputs the current instantaneous stem #Y volume for the right channel | Not implemented |
[SamplerX],load_selected_track |
Load a selection of stem from the selected file as stereo track into the sampler #X | Blocked in #13268 |
[PreviewDeck1],load_selected_track_stem_Y |
Load a selection of stem from the selected file as stereo track into the preview | Blocked in #13268 |
[ChannelX],load_selected_track_stems |
Load a selection of stem from the selected file as stereo track into the channel #X | Blocked in #13268 |
[LibraryStemX],selected |
Indicate whether or not the stem Y is selected by user for load operation | Blocked in #13268 |
(Currently Y
goes from 1
to 4
)
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 status
Pre-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 as0b1111
/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 to LoadSelectedTrack
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