gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit 5df8f9bc2b5fe66d76be94abeb4405a496cf6841
parent 35e2b6d99e9801c7356b16596f0a84272396f3e3
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Sat,  3 Aug 2024 03:43:11 +0200

add outpput mode configuration

Diffstat:
Msource/nord/n2x/n2xJucePlugin/n2xPart.cpp | 58++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 52 insertions(+), 6 deletions(-)

diff --git a/source/nord/n2x/n2xJucePlugin/n2xPart.cpp b/source/nord/n2x/n2xJucePlugin/n2xPart.cpp @@ -29,24 +29,70 @@ namespace n2xJucePlugin { juce::PopupMenu menuChannel; - const auto paramMidiChannel = static_cast<n2x::MultiParam>(n2x::MultiParam::SlotAMidiChannel + getPart()); - const auto ch = controller.getMultiParameter(paramMidiChannel); + const auto mp = static_cast<n2x::MultiParam>(n2x::MultiParam::SlotAMidiChannel + getPart()); + const auto ch = controller.getMultiParameter(mp); for(uint8_t c=0; c<16; ++c) { - menuChannel.addItem((std::string("Channel ") + std::to_string(c+1)).c_str(), true, c == ch, [&controller, c, paramMidiChannel] + menuChannel.addItem((std::string("Channel ") + std::to_string(c+1)).c_str(), true, c == ch, [&controller, c, mp] { - controller.setMultiParameter(paramMidiChannel, c); + controller.setMultiParameter(mp, c); }); } menuChannel.addSeparator(); - menuChannel.addItem("Off", true, ch == 16, [&controller, paramMidiChannel] + menuChannel.addItem("Off", true, ch == 16, [&controller, mp] { - controller.setMultiParameter(paramMidiChannel, 16); + controller.setMultiParameter(mp, 16); }); menu.addSubMenu("Midi Channel", menuChannel); } + { + juce::PopupMenu menuOut; + + constexpr auto mp = n2x::MultiParam::OutModeABCD; + auto o = controller.getMultiParameter(mp); + auto out = o; + + if(getPart() >= 2) + out >>= 4; + else + out &= 0xf; + + auto setMode = [this, &controller, mp, o](uint8_t _mode) + { + auto newO = o; + if(getPart() < 2) + { + newO &= 0xf0; + newO |= _mode; + } + else + { + newO &= 0x0f; + newO |= _mode << 4u; + } + controller.setMultiParameter(mp, newO); + }; + + if(getPart() < 2) + { + menuOut.addItem("A & B Mono/Stereo", true, out == 0, [setMode, mp] { setMode(0); }); + menuOut.addItem("A & B Mono" , true, out == 1, [setMode, mp] { setMode(1); }); + menuOut.addItem("A & B Alternating", true, out == 2, [setMode, mp] { setMode(2); }); + menuOut.addItem("A to A / B to B" , true, out == 3, [setMode, mp] { setMode(3); }); + } + else + { + menuOut.addItem("Same as A & B " , true, out == 0, [setMode, mp] { setMode(0); }); + menuOut.addItem("C & D Mono/Stereo" , true, out == 1, [setMode, mp] { setMode(1); }); + menuOut.addItem("C & D Mono" , true, out == 2, [setMode, mp] { setMode(2); }); + menuOut.addItem("C & D Alternating" , true, out == 3, [setMode, mp] { setMode(3); }); + menuOut.addItem("C to C / D to D" , true, out == 4, [setMode, mp] { setMode(4); }); + } + + menu.addSubMenu("Output Mode", menuOut); + } menu.showMenuAsync({}); }