Skip to content

Epic: STEM mixing #13116

Open
Open
@acolombier

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

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 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 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

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions