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

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 }