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 bc40253226726b7f4994425fc296186e8db3b5fb
parent fffacff3c4515280663597485f5422e264891398
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Tue, 30 Jul 2024 17:00:33 +0200

move controller into namespace

Diffstat:
Msource/nord/n2x/n2xJucePlugin/n2xController.cpp | 196++++++++++++++++++++++++++++++++++++++++---------------------------------------
Msource/nord/n2x/n2xJucePlugin/n2xController.h | 58+++++++++++++++++++++++++++++++---------------------------
Msource/nord/n2x/n2xJucePlugin/n2xEditor.h | 3+--
Msource/nord/n2x/n2xJucePlugin/n2xPluginProcessor.cpp | 2+-
4 files changed, 133 insertions(+), 126 deletions(-)

diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.cpp b/source/nord/n2x/n2xJucePlugin/n2xController.cpp @@ -19,130 +19,133 @@ namespace "multidump" }; - static_assert(std::size(g_midiPacketNames) == static_cast<size_t>(Controller::MidiPacketType::Count)); + static_assert(std::size(g_midiPacketNames) == static_cast<size_t>(n2xJucePlugin::Controller::MidiPacketType::Count)); - const char* midiPacketName(Controller::MidiPacketType _type) + const char* midiPacketName(n2xJucePlugin::Controller::MidiPacketType _type) { return g_midiPacketNames[static_cast<uint32_t>(_type)]; } } -Controller::Controller(AudioPluginAudioProcessor& _p) : pluginLib::Controller(_p, loadParameterDescriptions()) +namespace n2xJucePlugin { - registerParams(_p); + Controller::Controller(AudioPluginAudioProcessor& _p) : pluginLib::Controller(_p, loadParameterDescriptions()) + { + registerParams(_p); - requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 0); // single edit buffers A-D - requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 1); - requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 2); - requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 3); + requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 0); // single edit buffers A-D + requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 1); + requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 2); + requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 3); - requestDump(n2x::SysexByte::MultiRequestBankEditBuffer, 0); // performance edit buffer -} + requestDump(n2x::SysexByte::MultiRequestBankEditBuffer, 0); // performance edit buffer + } -Controller::~Controller() = default; + Controller::~Controller() = default; -const char* findEmbeddedResource(const std::string& _filename, uint32_t& _size) -{ - for(size_t i=0; i<BinaryData::namedResourceListSize; ++i) + const char* findEmbeddedResource(const std::string& _filename, uint32_t& _size) { - if (BinaryData::originalFilenames[i] != _filename) - continue; - - int size = 0; - const auto res = BinaryData::getNamedResource(BinaryData::namedResourceList[i], size); - _size = static_cast<uint32_t>(size); - return res; + for(size_t i=0; i<BinaryData::namedResourceListSize; ++i) + { + if (BinaryData::originalFilenames[i] != _filename) + continue; + + int size = 0; + const auto res = BinaryData::getNamedResource(BinaryData::namedResourceList[i], size); + _size = static_cast<uint32_t>(size); + return res; + } + return nullptr; } - return nullptr; -} -std::string Controller::loadParameterDescriptions() -{ - const auto name = "parameterDescriptions_n2x.json"; - const auto path = synthLib::getModulePath() + name; - - const std::ifstream f(path.c_str(), std::ios::in); - if(f.is_open()) - { - std::stringstream buf; - buf << f.rdbuf(); - return buf.str(); - } - - uint32_t size; - const auto res = findEmbeddedResource(name, size); - if(res) - return {res, size}; - return {}; -} - -bool Controller::parseSysexMessage(const pluginLib::SysEx& _msg, synthLib::MidiEventSource) -{ - if(_msg.size() == n2x::g_singleDumpSize) + std::string Controller::loadParameterDescriptions() { - return parseSingleDump(_msg); + const auto name = "parameterDescriptions_n2x.json"; + const auto path = synthLib::getModulePath() + name; + + const std::ifstream f(path.c_str(), std::ios::in); + if(f.is_open()) + { + std::stringstream buf; + buf << f.rdbuf(); + return buf.str(); + } + + uint32_t size; + const auto res = findEmbeddedResource(name, size); + if(res) + return {res, size}; + return {}; } - if(_msg.size() == n2x::g_multiDumpSize) + + bool Controller::parseSysexMessage(const pluginLib::SysEx& _msg, synthLib::MidiEventSource) { - return parseMultiDump(_msg); + if(_msg.size() == n2x::g_singleDumpSize) + { + return parseSingleDump(_msg); + } + if(_msg.size() == n2x::g_multiDumpSize) + { + return parseMultiDump(_msg); + } + return false; } - return false; -} -bool Controller::parseSingleDump(const pluginLib::SysEx& _msg) -{ - pluginLib::MidiPacket::Data data; - pluginLib::MidiPacket::ParamValues params; + bool Controller::parseSingleDump(const pluginLib::SysEx& _msg) + { + pluginLib::MidiPacket::Data data; + pluginLib::MidiPacket::ParamValues params; - if(!parseMidiPacket(midiPacketName(MidiPacketType::SingleDump), data, params, _msg)) - return false; + if(!parseMidiPacket(midiPacketName(MidiPacketType::SingleDump), data, params, _msg)) + return false; - const auto bank = data[pluginLib::MidiDataType::Bank]; - const auto program = data[pluginLib::MidiDataType::Program]; + const auto bank = data[pluginLib::MidiDataType::Bank]; + const auto program = data[pluginLib::MidiDataType::Program]; - if(bank == n2x::SysexByte::SingleDumpBankEditBuffer && program < getPartCount()) - { - applyPatchParameters(params, program); - return true; - } + if(bank == n2x::SysexByte::SingleDumpBankEditBuffer && program < getPartCount()) + { + applyPatchParameters(params, program); + return true; + } - assert(false && "receiving a single for a non-edit-buffer is unexpected"); - return false; -} + assert(false && "receiving a single for a non-edit-buffer is unexpected"); + return false; + } -bool Controller::parseMultiDump(const pluginLib::SysEx& _msg) -{ - return false; -} + bool Controller::parseMultiDump(const pluginLib::SysEx& _msg) + { + return false; + } -bool Controller::parseControllerMessage(const synthLib::SMidiEvent&) -{ - // TODO - return false; -} + bool Controller::parseControllerMessage(const synthLib::SMidiEvent&) + { + // TODO + return false; + } -void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, const uint8_t _value) -{ - const auto& controllerMap = getParameterDescriptions().getControllerMap(); + void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, const uint8_t _value) + { + const auto& controllerMap = getParameterDescriptions().getControllerMap(); - const auto& ccs = controllerMap.getControlChanges(synthLib::M_CONTROLCHANGE, _parameter.getParameterIndex()); - if(ccs.empty()) - return; - sendMidiEvent(synthLib::M_CONTROLCHANGE, ccs.front(), _value); -} + const auto& ccs = controllerMap.getControlChanges(synthLib::M_CONTROLCHANGE, _parameter.getParameterIndex()); + if(ccs.empty()) + return; + sendMidiEvent(synthLib::M_CONTROLCHANGE, ccs.front(), _value); + } -bool Controller::sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const -{ - return pluginLib::Controller::sendSysEx(midiPacketName(_packet), _params); -} + bool Controller::sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const + { + return pluginLib::Controller::sendSysEx(midiPacketName(_packet), _params); + } -void Controller::requestDump(const uint8_t _bank, const uint8_t _patch) const -{ - std::map<pluginLib::MidiDataType, uint8_t> params; + void Controller::requestDump(const uint8_t _bank, const uint8_t _patch) const + { + std::map<pluginLib::MidiDataType, uint8_t> params; - params[pluginLib::MidiDataType::DeviceId] = n2x::SysexByte::DefaultDeviceId; - params[pluginLib::MidiDataType::Bank] = static_cast<uint8_t>(_bank); - params[pluginLib::MidiDataType::Program] = _patch; + params[pluginLib::MidiDataType::DeviceId] = n2x::SysexByte::DefaultDeviceId; + params[pluginLib::MidiDataType::Bank] = static_cast<uint8_t>(_bank); + params[pluginLib::MidiDataType::Program] = _patch; - sendSysEx(MidiPacketType::RequestDump, params); -} + sendSysEx(MidiPacketType::RequestDump, params); + } +} +\ No newline at end of file diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.h b/source/nord/n2x/n2xJucePlugin/n2xController.h @@ -4,40 +4,43 @@ class AudioPluginAudioProcessor; -class Controller : public pluginLib::Controller +namespace n2xJucePlugin { -public: - enum class MidiPacketType + class Controller : public pluginLib::Controller { - RequestDump, - SingleDump, - MultiDump, + public: + enum class MidiPacketType + { + RequestDump, + SingleDump, + MultiDump, - Count - }; + Count + }; - Controller(AudioPluginAudioProcessor&); - ~Controller() override; + Controller(AudioPluginAudioProcessor&); + ~Controller() override; -private: - static std::string loadParameterDescriptions(); + private: + static std::string loadParameterDescriptions(); - void onStateLoaded() override - { - } + void onStateLoaded() override + { + } - uint8_t getPartCount() override - { - return 4; - } + uint8_t getPartCount() override + { + return 4; + } - bool parseSysexMessage(const pluginLib::SysEx&, synthLib::MidiEventSource) override; - bool parseSingleDump(const pluginLib::SysEx& _msg); - bool parseMultiDump(const pluginLib::SysEx& _msg); - bool parseControllerMessage(const synthLib::SMidiEvent&) override; + bool parseSysexMessage(const pluginLib::SysEx&, synthLib::MidiEventSource) override; + bool parseSingleDump(const pluginLib::SysEx& _msg); + bool parseMultiDump(const pluginLib::SysEx& _msg); + bool parseControllerMessage(const synthLib::SMidiEvent&) override; - void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override; - bool sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const; + void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override; + bool sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const; - void requestDump(uint8_t _bank, uint8_t _patch) const; -}; + void requestDump(uint8_t _bank, uint8_t _patch) const; + }; +} +\ No newline at end of file diff --git a/source/nord/n2x/n2xJucePlugin/n2xEditor.h b/source/nord/n2x/n2xJucePlugin/n2xEditor.h @@ -2,8 +2,6 @@ #include "jucePluginEditorLib/pluginEditor.h" -class Controller; - namespace jucePluginEditorLib { class FocusedParameter; @@ -18,6 +16,7 @@ namespace pluginLib namespace n2xJucePlugin { class PatchManager; + class Controller; class Editor final : public jucePluginEditorLib::Editor { diff --git a/source/nord/n2x/n2xJucePlugin/n2xPluginProcessor.cpp b/source/nord/n2x/n2xJucePlugin/n2xPluginProcessor.cpp @@ -56,7 +56,7 @@ synthLib::Device* AudioPluginAudioProcessor::createDevice() pluginLib::Controller* AudioPluginAudioProcessor::createController() { - return new Controller(*this); + return new n2xJucePlugin::Controller(*this); } juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter()