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 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:
Msource/jucePluginLib/midipacket.cpp | 42++++++++++++++++++++++++++++++++++++++++++
Msource/jucePluginLib/midipacket.h | 3+++
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; }