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 1eeca051409bf6ba5b76edcb12ee5116c7a1100d
parent 6b5bdcc9093866cf7cf0a17dbc1a660fed6c80f7
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Fri,  2 Aug 2024 13:28:35 +0200

allow part midi channel selection

Diffstat:
Msource/nord/n2x/n2xJucePlugin/n2xController.cpp | 5+++++
Msource/nord/n2x/n2xJucePlugin/n2xController.h | 3+++
Msource/nord/n2x/n2xJucePlugin/n2xPart.cpp | 29+++++++++++++++++++++++++++++
Msource/nord/n2x/n2xJucePlugin/n2xPart.h | 1+
4 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.cpp b/source/nord/n2x/n2xJucePlugin/n2xController.cpp @@ -231,6 +231,11 @@ namespace n2xJucePlugin pluginLib::Controller::sendSysEx(pluginLib::SysEx{multi.begin(), multi.end()}); } + uint8_t Controller::getMultiParameter(const n2x::MultiParam _param) const + { + return m_state.getMultiParam(_param, 0); + } + void Controller::sendMultiParameter(const pluginLib::Parameter& _parameter, const uint8_t _value) { const auto& desc = _parameter.getDescription(); diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.h b/source/nord/n2x/n2xJucePlugin/n2xController.h @@ -41,7 +41,10 @@ namespace n2xJucePlugin bool parseControllerMessage(const synthLib::SMidiEvent&) override; void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override; + void setMultiParameter(n2x::MultiParam _mp, uint8_t _value); + uint8_t getMultiParameter(n2x::MultiParam _param) const; + void sendMultiParameter(const pluginLib::Parameter& _parameter, uint8_t _value); bool sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const; diff --git a/source/nord/n2x/n2xJucePlugin/n2xPart.cpp b/source/nord/n2x/n2xJucePlugin/n2xPart.cpp @@ -13,4 +13,33 @@ namespace n2xJucePlugin { m_editor.getN2xController().setCurrentPart(getPart()); } + + void Part::mouseDown(const juce::MouseEvent& _e) + { + if(!_e.mods.isPopupMenu()) + { + PartButton<DrawableButton>::mouseDown(_e); + return; + } + + juce::PopupMenu menu; + + juce::PopupMenu menuChannel; + + auto& controller = m_editor.getN2xController(); + + const auto paramMidiChannel = static_cast<n2x::MultiParam>(n2x::MultiParam::SlotAMidiChannel + getPart()); + const auto ch = controller.getMultiParameter(paramMidiChannel); + 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] + { + controller.setMultiParameter(paramMidiChannel, c); + }); + } + + menu.addSubMenu("Midi Channel", menuChannel); + + menu.showMenuAsync({}); + } } diff --git a/source/nord/n2x/n2xJucePlugin/n2xPart.h b/source/nord/n2x/n2xJucePlugin/n2xPart.h @@ -13,6 +13,7 @@ namespace n2xJucePlugin void onClick() override; + void mouseDown(const juce::MouseEvent& _e) override; private: Editor& m_editor; };