commit c8be492d13c3d5817f87e49de5f1a361ec26158b
parent 998278cb6a93248c7ad56c0e68397d870645da15
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Mon, 18 Nov 2024 23:37:49 +0100
extract a single parameter value from a midi dump via midi packet parser
Diffstat:
2 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/source/jucePluginLib/midipacket.cpp b/source/jucePluginLib/midipacket.cpp
@@ -324,6 +324,26 @@ namespace pluginLib
return InvalidIndex;
}
+ std::vector<uint32_t> MidiPacket::getDefinitionIndicesForParameterName(const std::string& _name) const
+ {
+ std::vector<uint32_t> res;
+
+ for(uint32_t i=0; i<m_definitions.size(); ++i)
+ {
+ const auto& d = m_definitions[i];
+
+ if(d.type != MidiDataType::Parameter)
+ continue;
+
+ if(d.paramName != _name)
+ continue;
+
+ res.push_back(i);
+ }
+
+ return res;
+ }
+
const MidiPacket::MidiDataDefinition* MidiPacket::getDefinitionByParameterName(const std::string& _name) const
{
for (const auto& definition : m_definitions)
@@ -335,6 +355,28 @@ namespace pluginLib
return nullptr;
}
+ ParamValue MidiPacket::getParameterValue(const Sysex& _sysex, const std::vector<uint32_t>& _definitionIndices) const
+ {
+ ParamValue res = 0;
+
+ bool valid = false;
+
+ for (uint32_t defIndex : _definitionIndices)
+ {
+ const auto& d = m_definitions[defIndex];
+
+ if (d.type != MidiDataType::Parameter)
+ continue;
+
+ const auto byteIndex = m_definitionToByteIndex.find(defIndex)->second;
+
+ res |= d.unpackValue(_sysex[byteIndex]);
+ valid = true;
+ }
+
+ return valid ? res : -1;
+ }
+
bool MidiPacket::updateChecksums(Sysex& _data) const
{
if (_data.size() != m_byteSize)
diff --git a/source/jucePluginLib/midipacket.h b/source/jucePluginLib/midipacket.h
@@ -103,8 +103,11 @@ namespace pluginLib
uint32_t getByteIndexForType(MidiDataType _type) const;
uint32_t getByteIndexForParameterName(const std::string& _name) const;
+ std::vector<uint32_t> getDefinitionIndicesForParameterName(const std::string& _name) const;
const MidiDataDefinition *getDefinitionByParameterName(const std::string& _name) const;
+ ParamValue getParameterValue(const Sysex& _sysex, const std::vector<uint32_t>& _definitionIndices) const;
+
bool updateChecksums(Sysex& _data) const;
bool hasPartDependentParameters() const { return m_numDifferentPartsUsedInParameters; }