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:
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 ¶ms.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);