diff --git a/src/engine/channels/enginedeck.cpp b/src/engine/channels/enginedeck.cpp index d8262381a9c..09f2474e4b5 100644 --- a/src/engine/channels/enginedeck.cpp +++ b/src/engine/channels/enginedeck.cpp @@ -13,6 +13,13 @@ #ifdef __STEM__ namespace { constexpr int kMaxSupportedStems = 4; + +QString getGroupForStem(const QString& deckGroup, int stemIdx) { + DEBUG_ASSERT(deckGroup.endsWith("]")); + return QStringLiteral("%1Stem%2]") + .arg(deckGroup.left(deckGroup.size() - 1), + QString::number(stemIdx)); +} } // anonymous namespace #endif @@ -69,14 +76,14 @@ EngineDeck::EngineDeck( m_stemMute.reserve(kMaxSupportedStems); for (int stemIdx = 1; stemIdx <= kMaxSupportedStems; stemIdx++) { m_stemGain.emplace_back(std::make_unique( - ConfigKey(getGroup(), QString("stem_%1_volume").arg(stemIdx)))); + ConfigKey(getGroupForStem(getGroup(), stemIdx), QStringLiteral("volume")))); // The default value is ignored and override with the medium value by // ControlPotmeter. This is likely a bug but fixing might have a // disruptive impact, so setting the default explicitly m_stemGain.back()->set(1.0); m_stemGain.back()->setDefaultValue(1.0); m_stemMute.emplace_back(std::make_unique( - ConfigKey(getGroup(), QString("stem_%1_mute").arg(stemIdx)))); + ConfigKey(getGroupForStem(getGroup(), stemIdx), QStringLiteral("mute")))); } #endif } diff --git a/src/mixer/basetrackplayer.cpp b/src/mixer/basetrackplayer.cpp index c099d149013..e6b9d87a744 100644 --- a/src/mixer/basetrackplayer.cpp +++ b/src/mixer/basetrackplayer.cpp @@ -286,9 +286,13 @@ BaseTrackPlayerImpl::BaseTrackPlayerImpl( #ifdef __STEM__ m_pStemColors.reserve(kMaxSupportedStems); + QString group = getGroup(); for (int stemIdx = 1; stemIdx <= kMaxSupportedStems; stemIdx++) { + QString stemGroup = QStringLiteral("%1Stem%2]") + .arg(group.left(group.size() - 1), + QString::number(stemIdx)); m_pStemColors.emplace_back(std::make_unique( - ConfigKey(getGroup(), QStringLiteral("stem_%1_color").arg(stemIdx)))); + ConfigKey(stemGroup, QStringLiteral("color")))); m_pStemColors.back()->set(kNoTrackColor); m_pStemColors.back()->setReadOnly(); } diff --git a/src/test/stemcontrolobjecttest.cpp b/src/test/stemcontrolobjecttest.cpp index a5ba43371e5..cf01a8545e0 100644 --- a/src/test/stemcontrolobjecttest.cpp +++ b/src/test/stemcontrolobjecttest.cpp @@ -10,6 +10,13 @@ class StemControlTest : public BaseSignalPathTest { protected: + QString getGroupForStem(const QString& deckGroup, int stemIdx) { + DEBUG_ASSERT(deckGroup.endsWith("]")); + return QStringLiteral("%1Stem%2]") + .arg(deckGroup.left(deckGroup.size() - 1), + QString::number(stemIdx)); + } + void SetUp() override { BaseSignalPathTest::SetUp(); @@ -20,20 +27,31 @@ class StemControlTest : public BaseSignalPathTest { loadTrack(m_pMixerDeck3, pStemFile); m_pPlay = std::make_unique(m_sGroup1, "play"); - m_pStem1Volume = std::make_unique(m_sGroup1, "stem_1_volume"); - m_pStem2Volume = std::make_unique(m_sGroup1, "stem_2_volume"); - m_pStem3Volume = std::make_unique(m_sGroup1, "stem_3_volume"); - m_pStem4Volume = std::make_unique(m_sGroup1, "stem_4_volume"); - m_pStem1Mute = std::make_unique(m_sGroup1, "stem_1_mute"); - m_pStem2Mute = std::make_unique(m_sGroup1, "stem_2_mute"); - m_pStem3Mute = std::make_unique(m_sGroup1, "stem_3_mute"); - m_pStem4Mute = std::make_unique(m_sGroup1, "stem_4_mute"); - m_pStem1Color = std::make_unique(m_sGroup1, "stem_1_color"); - m_pStem2Color = std::make_unique(m_sGroup1, "stem_2_color"); - m_pStem3Color = std::make_unique(m_sGroup1, "stem_3_color"); - m_pStem4Color = std::make_unique(m_sGroup1, "stem_4_color"); + + m_pStem1Volume = std::make_unique( + getGroupForStem(m_sGroup1, 1), "volume"); + m_pStem2Volume = std::make_unique( + getGroupForStem(m_sGroup1, 2), "volume"); + m_pStem3Volume = std::make_unique( + getGroupForStem(m_sGroup1, 3), "volume"); + m_pStem4Volume = std::make_unique( + getGroupForStem(m_sGroup1, 4), "volume"); + m_pStem1Mute = std::make_unique(getGroupForStem(m_sGroup1, 1), "mute"); + m_pStem2Mute = std::make_unique(getGroupForStem(m_sGroup1, 2), "mute"); + m_pStem3Mute = std::make_unique(getGroupForStem(m_sGroup1, 3), "mute"); + m_pStem4Mute = std::make_unique(getGroupForStem(m_sGroup1, 4), "mute"); + m_pStem1Color = std::make_unique( + getGroupForStem(m_sGroup1, 1), "color"); + m_pStem2Color = std::make_unique( + getGroupForStem(m_sGroup1, 2), "color"); + m_pStem3Color = std::make_unique( + getGroupForStem(m_sGroup1, 3), "color"); + m_pStem4Color = std::make_unique( + getGroupForStem(m_sGroup1, 4), "color"); + m_pStemCount = std::make_unique(m_sGroup1, "stem_count"); } + void setCurrentPosition(mixxx::audio::FramePos position) { m_pChannel1->getEngineBuffer()->queueNewPlaypos(position, EngineBuffer::SEEK_STANDARD); ProcessBuffer(); diff --git a/src/waveform/renderers/allshader/waveformrendererstem.cpp b/src/waveform/renderers/allshader/waveformrendererstem.cpp index 1aeab961b8c..a1d03a63377 100644 --- a/src/waveform/renderers/allshader/waveformrendererstem.cpp +++ b/src/waveform/renderers/allshader/waveformrendererstem.cpp @@ -34,11 +34,15 @@ void WaveformRendererStem::initializeGL() { m_textureShader.init(); auto group = m_pEQEnabled->getKey().group; for (int stemIdx = 1; stemIdx <= kMaxSupportedStems; stemIdx++) { + DEBUG_ASSERT(group.endsWith("]")); + QString stemGroup = QStringLiteral("%1Stem%2]") + .arg(group.left(group.size() - 1), + QString::number(stemIdx)); m_pStemGain.emplace_back( - std::make_unique(group, - QStringLiteral("stem_%1_volume").arg(stemIdx))); + std::make_unique(stemGroup, + QStringLiteral("volume").arg(stemIdx))); m_pStemMute.emplace_back(std::make_unique( - group, QStringLiteral("stem_%1_mute").arg(stemIdx))); + stemGroup, QStringLiteral("mute").arg(stemIdx))); } }