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 8d183c31266b9ff1a4e01f582d375f6fa38553f8
parent 432634d9fc0b014649ce8afcd9e101cfbb27023f
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Tue, 17 May 2022 00:15:39 +0200

generic parameter change parsing

Diffstat:
Msource/jucePlugin/VirusController.cpp | 17+++++++++++------
Msource/jucePluginLib/controller.cpp | 10++++++++++
Msource/jucePluginLib/controller.h | 2++
3 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/source/jucePlugin/VirusController.cpp b/source/jucePlugin/VirusController.cpp @@ -116,13 +116,18 @@ namespace Virus return &params.front()->getValueObject(); } - void Controller::parseParamChange(const SysEx &msg) + void Controller::parseParamChange(const SysEx& msg) { - constexpr auto pos = kHeaderWithMsgCodeLen - 1; - const auto page = msg[pos]; - const auto ch = msg[pos + 1]; - const auto index = msg[pos + 2]; - const auto value = msg[pos + 3]; + std::map<pluginLib::MidiDataType, uint8_t> params; + std::map<uint32_t, uint8_t> parameterValues; + + if(!parseMidiPacket("parameterchange", params, parameterValues, msg)) + return; + + const auto page = params[pluginLib::MidiDataType::Page]; + const auto ch = params[pluginLib::MidiDataType::Part]; + const auto index = params[pluginLib::MidiDataType::ParameterIndex]; + const auto value = params[pluginLib::MidiDataType::ParameterValue]; const auto& partParams = findSynthParam(ch, page, index); diff --git a/source/jucePluginLib/controller.cpp b/source/jucePluginLib/controller.cpp @@ -178,4 +178,14 @@ namespace pluginLib } return true; } + + bool Controller::parseMidiPacket(const std::string& _name, std::map<pluginLib::MidiDataType, uint8_t>& _data, std::map<uint32_t, uint8_t>& _parameterValues, const std::vector<uint8_t>& _src) const + { + auto* m = getMidiPacket(_name); + assert(m); + if(!m) + return false; + + return m->parse(_data, _parameterValues, m_descriptions, _src); + } } diff --git a/source/jucePluginLib/controller.h b/source/jucePluginLib/controller.h @@ -25,6 +25,8 @@ namespace pluginLib const MidiPacket* getMidiPacket(const std::string& _name) const; bool createMidiDataFromPacket(std::vector<uint8_t>& _sysex, const std::string& _packetName, const std::map<MidiDataType, uint8_t>& _params) const; + bool parseMidiPacket(const std::string& _name, std::map<pluginLib::MidiDataType, uint8_t>& _data, std::map<uint32_t, uint8_t>& _parameterValues, const std::vector<uint8_t>& _src) const; + protected: virtual Parameter* createParameter(Controller& _controller, const Description& _desc, uint8_t _part, int _uid) = 0; void registerParams(juce::AudioProcessor& _processor);