n2xController.h (2219B)
1 #pragma once 2 3 #include "jucePluginLib/controller.h" 4 #include "n2xLib/n2xstate.h" 5 6 namespace n2xJucePlugin 7 { 8 class AudioPluginAudioProcessor; 9 10 class Controller : public pluginLib::Controller 11 { 12 public: 13 enum class MidiPacketType 14 { 15 RequestDump, 16 SingleDump, 17 MultiDump, 18 19 Count 20 }; 21 22 baseLib::Event<> onProgramChanged; 23 baseLib::Event<n2x::KnobType, uint8_t> onKnobChanged; 24 25 Controller(AudioPluginAudioProcessor&); 26 ~Controller() override; 27 28 void onStateLoaded() override; 29 30 uint8_t getPartCount() const override 31 { 32 return 4; 33 } 34 35 bool parseSysexMessage(const pluginLib::SysEx&, synthLib::MidiEventSource) override; 36 bool parseSingleDump(const pluginLib::SysEx& _msg); 37 bool parseMultiDump(const pluginLib::SysEx& _msg); 38 bool parseControllerMessage(const synthLib::SMidiEvent&) override; 39 40 void sendParameterChange(const pluginLib::Parameter& _parameter, pluginLib::ParamValue _value) override; 41 42 void setSingleParameter(uint8_t _part, n2x::SingleParam _sp, uint8_t _value); 43 void setMultiParameter(n2x::MultiParam _mp, uint8_t _value); 44 uint8_t getMultiParameter(n2x::MultiParam _param) const; 45 46 void sendMultiParameter(const pluginLib::Parameter& _parameter, uint8_t _value); 47 bool sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const; 48 49 void requestDump(uint8_t _bank, uint8_t _patch) const; 50 51 std::vector<uint8_t> createSingleDump(uint8_t _bank, uint8_t _program, uint8_t _part) const; 52 std::vector<uint8_t> createMultiDump(n2x::SysexByte _bank, uint8_t _program); 53 54 bool activatePatch(const std::vector<uint8_t>& _sysex, uint32_t _part); 55 56 bool isDerivedParameter(pluginLib::Parameter& _derived, pluginLib::Parameter& _base) const override; 57 58 std::string getSingleName(uint8_t _part) const; 59 std::string getPatchName(uint8_t _part) const; 60 61 using pluginLib::Controller::sendSysEx; 62 63 bool getKnobState(uint8_t& _result, n2x::KnobType _type) const; 64 65 std::vector<uint8_t> getPartsForMidiChannel(uint8_t _channel) override; 66 67 private: 68 uint8_t combineSyncRingModDistortion(uint8_t _part, uint8_t _currentCombinedValue, bool _lockedOnly); 69 70 n2x::State m_state; 71 baseLib::EventListener<uint8_t> m_currentPartChanged; 72 }; 73 }