commit eaaeb4d3514b0330dc3bcbbcf523eb46e71af35c
parent df6fc70be64b0f63980fd358d21a52ebb70da47d
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Mon, 5 Aug 2024 22:56:00 +0200
allow parameters with a larger range than 0-127
Diffstat:
17 files changed, 49 insertions(+), 53 deletions(-)
diff --git a/source/jucePluginEditorLib/pluginEditor.cpp b/source/jucePluginEditorLib/pluginEditor.cpp
@@ -473,7 +473,7 @@ namespace jucePluginEditorLib
return true;
}
- bool Editor::setParameters(const std::map<std::string, uint8_t>& _paramValues) const
+ bool Editor::setParameters(const std::map<std::string, pluginLib::ParamValue>& _paramValues) const
{
if(_paramValues.empty())
return false;
diff --git a/source/jucePluginEditorLib/pluginEditor.h b/source/jucePluginEditorLib/pluginEditor.h
@@ -9,6 +9,7 @@
#include "synthLib/buildconfig.h"
#include "jucePluginLib/event.h"
+#include "jucePluginLib/types.h"
namespace baseLib
{
@@ -86,7 +87,7 @@ namespace jucePluginEditorLib
bool copyRegionToClipboard(const std::string& _regionId) const;
bool copyParametersToClipboard(const std::vector<std::string>& _params, const std::string& _regionId = {}) const;
- bool setParameters(const std::map<std::string, uint8_t>& _paramValues) const;
+ bool setParameters(const std::map<std::string, pluginLib::ParamValue>& _paramValues) const;
auto& getImagePool() { return m_imagePool; }
diff --git a/source/jucePluginLib/clipboard.h b/source/jucePluginLib/clipboard.h
@@ -5,6 +5,8 @@
#include <string>
#include <vector>
+#include "types.h"
+
namespace pluginLib
{
class Processor;
@@ -14,7 +16,7 @@ namespace pluginLib
public:
struct Data
{
- using ParameterValues = std::map<std::string,uint8_t>;
+ using ParameterValues = std::map<std::string, ParamValue>;
std::string pluginName;
std::string pluginVersionString;
diff --git a/source/jucePluginLib/controller.cpp b/source/jucePluginLib/controller.cpp
@@ -174,7 +174,7 @@ namespace pluginLib
m_processor.addMidiEvent(synthLib::SMidiEvent(_source, _a, _b, _c, _offset));
}
- bool Controller::combineParameterChange(uint8_t& _result, const std::string& _midiPacket, const Parameter& _parameter, uint8_t _value) const
+ bool Controller::combineParameterChange(uint8_t& _result, const std::string& _midiPacket, const Parameter& _parameter, ParamValue _value) const
{
const auto &desc = _parameter.getDescription();
@@ -214,7 +214,7 @@ namespace pluginLib
if (definitions.size() == 1)
{
- _result = _value;
+ _result = static_cast<uint8_t>(_value);
return true;
}
@@ -259,8 +259,7 @@ namespace pluginLib
bool Controller::sendSysEx(const std::string& _packetName) const
{
- const std::map<pluginLib::MidiDataType, uint8_t> params;
- return sendSysEx(_packetName, params);
+ return sendSysEx(_packetName, {});
}
bool Controller::sendSysEx(const std::string& _packetName, const std::map<MidiDataType, uint8_t>& _params) const
@@ -346,7 +345,7 @@ namespace pluginLib
return m_descriptions.getIndexByName(index, _name) ? index : InvalidParameterIndex;
}
- bool Controller::setParameters(const std::map<std::string, uint8_t>& _values, const uint8_t _part, const Parameter::Origin _changedBy) const
+ bool Controller::setParameters(const std::map<std::string, ParamValue>& _values, const uint8_t _part, const Parameter::Origin _changedBy) const
{
bool res = false;
@@ -465,7 +464,7 @@ namespace pluginLib
return _packet.parse(_data, _parameterValues, m_descriptions, _src);
}
- bool Controller::parseMidiPacket(const MidiPacket& _packet, MidiPacket::Data& _data, const std::function<void(MidiPacket::ParamIndex, uint8_t)>& _parameterValues, const std::vector<uint8_t>& _src) const
+ bool Controller::parseMidiPacket(const MidiPacket& _packet, MidiPacket::Data& _data, const std::function<void(MidiPacket::ParamIndex, ParamValue)>& _parameterValues, const std::vector<uint8_t>& _src) const
{
_data.clear();
return _packet.parse(_data, _parameterValues, m_descriptions, _src);
@@ -524,9 +523,9 @@ namespace pluginLib
m_parameterLinks.loadChunkData(_cr);
}
- void Controller::saveChunkData(baseLib::BinaryStream& s)
+ void Controller::saveChunkData(baseLib::BinaryStream& _s) const
{
- m_parameterLinks.saveChunkData(s);
+ m_parameterLinks.saveChunkData(_s);
}
Parameter::Origin Controller::midiEventSourceToParameterOrigin(const synthLib::MidiEventSource _source)
diff --git a/source/jucePluginLib/controller.h b/source/jucePluginLib/controller.h
@@ -34,7 +34,7 @@ namespace pluginLib
explicit Controller(Processor& _processor, const std::string& _parameterDescJson);
~Controller() override;
- virtual void sendParameterChange(const Parameter& _parameter, uint8_t _value) = 0;
+ virtual void sendParameterChange(const Parameter& _parameter, ParamValue _value) = 0;
void sendLockedParameters(uint8_t _part);
juce::Value* getParamValueObject(uint32_t _index, uint8_t _part) const;
@@ -44,21 +44,21 @@ namespace pluginLib
uint32_t getParameterIndexByName(const std::string& _name) const;
- bool setParameters(const std::map<std::string, uint8_t>& _values, uint8_t _part, Parameter::Origin _changedBy) const;
+ bool setParameters(const std::map<std::string, ParamValue>& _values, uint8_t _part, Parameter::Origin _changedBy) const;
const MidiPacket* getMidiPacket(const std::string& _name) const;
bool createNamedParamValues(MidiPacket::NamedParamValues& _params, const std::string& _packetName, uint8_t _part) const;
bool createNamedParamValues(MidiPacket::NamedParamValues& _dest, const MidiPacket::AnyPartParamValues& _source) const;
- bool createMidiDataFromPacket(std::vector<uint8_t>& _sysex, const std::string& _packetName, const std::map<MidiDataType, uint8_t>& _data, uint8_t _part) const;
- bool createMidiDataFromPacket(std::vector<uint8_t>& _sysex, const std::string& _packetName, const std::map<MidiDataType, uint8_t>& _data, const MidiPacket::NamedParamValues& _values) const;
- bool createMidiDataFromPacket(std::vector<uint8_t>& _sysex, const std::string& _packetName, const std::map<MidiDataType, uint8_t>& _data, const MidiPacket::AnyPartParamValues& _values) const;
+ bool createMidiDataFromPacket(SysEx& _sysex, const std::string& _packetName, const std::map<MidiDataType, uint8_t>& _data, uint8_t _part) const;
+ bool createMidiDataFromPacket(SysEx& _sysex, const std::string& _packetName, const std::map<MidiDataType, uint8_t>& _data, const MidiPacket::NamedParamValues& _values) const;
+ bool createMidiDataFromPacket(SysEx& _sysex, const std::string& _packetName, const std::map<MidiDataType, uint8_t>& _data, const MidiPacket::AnyPartParamValues& _values) const;
- bool parseMidiPacket(const MidiPacket& _packet, MidiPacket::Data& _data, MidiPacket::ParamValues& _parameterValues, const std::vector<uint8_t>& _src) const;
- bool parseMidiPacket(const MidiPacket& _packet, MidiPacket::Data& _data, MidiPacket::AnyPartParamValues& _parameterValues, const std::vector<uint8_t>& _src) const;
- bool parseMidiPacket(const MidiPacket& _packet, MidiPacket::Data& _data, const std::function<void(MidiPacket::ParamIndex, uint8_t)>& _parameterValues, const std::vector<uint8_t>& _src) const;
- bool parseMidiPacket(const std::string& _name, MidiPacket::Data& _data, MidiPacket::ParamValues& _parameterValues, const std::vector<uint8_t>& _src) const;
- bool parseMidiPacket(std::string& _name, MidiPacket::Data& _data, MidiPacket::ParamValues& _parameterValues, const std::vector<uint8_t>& _src) const;
+ bool parseMidiPacket(const MidiPacket& _packet, MidiPacket::Data& _data, MidiPacket::ParamValues& _parameterValues, const SysEx& _src) const;
+ bool parseMidiPacket(const MidiPacket& _packet, MidiPacket::Data& _data, MidiPacket::AnyPartParamValues& _parameterValues, const SysEx& _src) const;
+ bool parseMidiPacket(const MidiPacket& _packet, MidiPacket::Data& _data, const std::function<void(MidiPacket::ParamIndex, ParamValue)>& _parameterValues, const SysEx& _src) const;
+ bool parseMidiPacket(const std::string& _name, MidiPacket::Data& _data, MidiPacket::ParamValues& _parameterValues, const SysEx& _src) const;
+ bool parseMidiPacket(std::string& _name, MidiPacket::Data& _data, MidiPacket::ParamValues& _parameterValues, const SysEx& _src) const;
const auto& getExposedParameters() const { return m_synthParams; }
@@ -77,7 +77,7 @@ namespace pluginLib
void enqueueMidiMessages(const std::vector<synthLib::SMidiEvent>&);
void loadChunkData(baseLib::ChunkReader& _cr);
- void saveChunkData(baseLib::BinaryStream& s);
+ void saveChunkData(baseLib::BinaryStream& _s) const;
static Parameter::Origin midiEventSourceToParameterOrigin(synthLib::MidiEventSource _source);
@@ -112,9 +112,9 @@ namespace pluginLib
void sendMidiEvent(const synthLib::SMidiEvent& _ev) const;
void sendMidiEvent(uint8_t _a, uint8_t _b, uint8_t _c, uint32_t _offset = 0, synthLib::MidiEventSource _source = synthLib::MidiEventSource::Editor) const;
- bool combineParameterChange(uint8_t& _result, const std::string& _midiPacket, const Parameter& _parameter, uint8_t _value) const;
+ bool combineParameterChange(uint8_t& _result, const std::string& _midiPacket, const Parameter& _parameter, ParamValue _value) const;
- void applyPatchParameters(const MidiPacket::ParamValues& _params, const uint8_t _part) const;
+ void applyPatchParameters(const MidiPacket::ParamValues& _params, uint8_t _part) const;
virtual bool isDerivedParameter(Parameter& _derived, Parameter& _base) const { return true; }
diff --git a/source/jucePluginLib/midipacket.cpp b/source/jucePluginLib/midipacket.cpp
@@ -165,7 +165,7 @@ namespace pluginLib
}, _parameters, _src, _ignoreChecksumErrors);
}
- bool MidiPacket::parse(Data& _data, const std::function<void(ParamIndex, uint8_t)>& _addParamValueCallback, const ParameterDescriptions& _parameters, const Sysex& _src, bool _ignoreChecksumErrors) const
+ bool MidiPacket::parse(Data& _data, const std::function<void(ParamIndex, ParamValue)>& _addParamValueCallback, const ParameterDescriptions& _parameters, const Sysex& _src, bool _ignoreChecksumErrors) const
{
if(_src.size() != size())
return false;
diff --git a/source/jucePluginLib/midipacket.h b/source/jucePluginLib/midipacket.h
@@ -9,6 +9,8 @@
#include <unordered_map>
#include <vector>
+#include "types.h"
+
namespace pluginLib
{
class ParameterDescriptions;
@@ -50,12 +52,12 @@ namespace pluginLib
uint32_t checksumLastIndex = 0;
uint8_t checksumInitValue = 0;
- uint8_t packValue(const uint8_t _unmasked) const
+ uint8_t packValue(const ParamValue _unmasked) const
{
return static_cast<uint8_t>(((_unmasked & paramMask) << paramShiftRight) >> paramShiftLeft);
}
- uint8_t unpackValue(const uint8_t _masked) const
+ ParamValue unpackValue(const uint8_t _masked) const
{
return ((_masked << paramShiftLeft) >> paramShiftRight) & paramMask;
}
@@ -79,9 +81,9 @@ namespace pluginLib
};
using ParamIndices = std::set<ParamIndex>;
- using ParamValues = std::unordered_map<ParamIndex, uint8_t, ParamIndexHash>; // part, index => value
- using AnyPartParamValues = std::vector<std::optional<uint8_t>>; // index => value
- using NamedParamValues = std::map<std::pair<uint8_t,std::string>, uint8_t>; // part, name => value
+ using ParamValues = std::unordered_map<ParamIndex, ParamValue, ParamIndexHash>; // part, index => value
+ using AnyPartParamValues = std::vector<std::optional<ParamValue>>; // index => value
+ using NamedParamValues = std::map<std::pair<uint8_t,std::string>, ParamValue>; // part, name => value
using Sysex = std::vector<uint8_t>;
MidiPacket() = default;
@@ -94,7 +96,7 @@ namespace pluginLib
bool create(std::vector<uint8_t>& _dst, const Data& _data) const;
bool parse(Data& _data, AnyPartParamValues& _parameterValues, const ParameterDescriptions& _parameters, const Sysex& _src, bool _ignoreChecksumErrors = true) const;
bool parse(Data& _data, ParamValues& _parameterValues, const ParameterDescriptions& _parameters, const Sysex& _src, bool _ignoreChecksumErrors = true) const;
- bool parse(Data& _data, const std::function<void(ParamIndex, uint8_t)>& _addParamValueCallback, const ParameterDescriptions& _parameters, const Sysex& _src, bool _ignoreChecksumErrors = true) const;
+ bool parse(Data& _data, const std::function<void(ParamIndex, ParamValue)>& _addParamValueCallback, const ParameterDescriptions& _parameters, const Sysex& _src, bool _ignoreChecksumErrors = true) const;
bool getParameterIndices(ParamIndices& _indices, const ParameterDescriptions& _parameters) const;
bool getDefinitionsForByteIndex(std::vector<const MidiDataDefinition*>& _result, uint32_t _byteIndex) const;
bool getParameterIndicesForByteIndex(std::vector<ParamIndex>& _result, const ParameterDescriptions& _parameters, uint32_t _byteIndex) const;
diff --git a/source/jucePluginLib/parameterdescriptions.cpp b/source/jucePluginLib/parameterdescriptions.cpp
@@ -188,16 +188,6 @@ namespace pluginLib
const auto maxValue = readPropertyInt("max");
const auto defaultValue = readPropertyIntWithDefault("default", Description::NoDefaultValue);
- if (minValue < 0 || minValue > 127)
- {
- errors << name << ": min value for parameter desc " << name << " must be in range 0-127 but min is set to " << minValue << std::endl;
- continue;
- }
- if(maxValue < 0 || maxValue > 127)
- {
- errors << name << ": max value for parameter desc " << name << " must be in range 0-127 but max is set to " << maxValue << std::endl;
- continue;
- }
if (maxValue < minValue)
{
errors << name << ": max value must be larger than min value but min is " << minValue << ", max is " << maxValue << std::endl;
diff --git a/source/jucePluginLib/types.h b/source/jucePluginLib/types.h
@@ -12,4 +12,6 @@ namespace pluginLib
Source = 1,
Target = 2
};
+
+ using ParamValue = int32_t;
}
diff --git a/source/mqJucePlugin/mqController.cpp b/source/mqJucePlugin/mqController.cpp
@@ -447,7 +447,7 @@ void Controller::selectPreset(int _offset)
*/ }
}
-void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, const uint8_t _value)
+void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, const pluginLib::ParamValue _value)
{
const auto &desc = _parameter.getDescription();
diff --git a/source/mqJucePlugin/mqController.h b/source/mqJucePlugin/mqController.h
@@ -92,7 +92,7 @@ private:
bool parseSysexMessage(const pluginLib::SysEx&, synthLib::MidiEventSource _source) override;
bool parseControllerMessage(const synthLib::SMidiEvent&) override;
- void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override;
+ void sendParameterChange(const pluginLib::Parameter& _parameter, pluginLib::ParamValue _value) override;
bool sendGlobalParameterChange(mqLib::GlobalParameter _param, uint8_t _value);
void requestSingle(mqLib::MidiBufferNum _buf, mqLib::MidiSoundLocation _location, uint8_t _locationOffset = 0) const;
void requestMulti(mqLib::MidiBufferNum _buf, mqLib::MidiSoundLocation _location, uint8_t _locationOffset = 0) const;
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.cpp b/source/nord/n2x/n2xJucePlugin/n2xController.cpp
@@ -206,11 +206,11 @@ namespace n2xJucePlugin
return true;
}
- void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value)
+ void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, pluginLib::ParamValue _value)
{
if(_parameter.getDescription().page >= g_multiPage)
{
- sendMultiParameter(_parameter, _value);
+ sendMultiParameter(_parameter, static_cast<uint8_t>(_value));
return;
}
@@ -250,13 +250,13 @@ namespace n2xJucePlugin
const auto parts = m_state.getPartsForMidiChannel(ch);
- const auto ev = synthLib::SMidiEvent{synthLib::MidiEventSource::Editor, static_cast<uint8_t>(synthLib::M_CONTROLCHANGE + ch), cc, _value};
+ const auto ev = synthLib::SMidiEvent{synthLib::MidiEventSource::Editor, static_cast<uint8_t>(synthLib::M_CONTROLCHANGE + ch), cc, static_cast<uint8_t>(_value)};
if(parts.size() > 1)
{
// this is problematic. We want to edit one part only but two parts receive on the same channel. We have to send a full dump
nonConstParam.setRateLimitMilliseconds(sysexRateLimitMs);
- setSingleParameter(part, singleParam, _value);
+ setSingleParameter(part, singleParam, static_cast<uint8_t>(_value));
}
else
{
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.h b/source/nord/n2x/n2xJucePlugin/n2xController.h
@@ -39,7 +39,7 @@ namespace n2xJucePlugin
bool parseMultiDump(const pluginLib::SysEx& _msg);
bool parseControllerMessage(const synthLib::SMidiEvent&) override;
- void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override;
+ void sendParameterChange(const pluginLib::Parameter& _parameter, pluginLib::ParamValue _value) override;
void setSingleParameter(uint8_t _part, n2x::SingleParam _sp, uint8_t _value);
void setMultiParameter(n2x::MultiParam _mp, uint8_t _value);
diff --git a/source/virusJucePlugin/VirusController.cpp b/source/virusJucePlugin/VirusController.cpp
@@ -651,11 +651,11 @@ namespace Virus
return pluginLib::Controller::sendSysEx(midiPacketName(_type), _params);
}
- void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value)
+ void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, const pluginLib::ParamValue _value)
{
const auto& desc = _parameter.getDescription();
- sendParameterChange(desc.page, _parameter.getPart(), desc.index, _value);
+ sendParameterChange(desc.page, _parameter.getPart(), desc.index, static_cast<uint8_t>(_value));
}
bool Controller::sendParameterChange(uint8_t _page, uint8_t _part, uint8_t _index, uint8_t _value) const
diff --git a/source/virusJucePlugin/VirusController.h b/source/virusJucePlugin/VirusController.h
@@ -144,7 +144,7 @@ namespace Virus
bool requestArrangement() const;
void requestRomBanks();
- void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override;
+ void sendParameterChange(const pluginLib::Parameter& _parameter, pluginLib::ParamValue _value) override;
bool sendParameterChange(uint8_t _page, uint8_t _part, uint8_t _index, uint8_t _value) const;
using pluginLib::Controller::sendSysEx;
diff --git a/source/xtJucePlugin/xtController.cpp b/source/xtJucePlugin/xtController.cpp
@@ -536,7 +536,7 @@ void Controller::selectPreset(const int _offset)
*/ }
}
-void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, const uint8_t _value)
+void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, const pluginLib::ParamValue _value)
{
const auto &desc = _parameter.getDescription();
diff --git a/source/xtJucePlugin/xtController.h b/source/xtJucePlugin/xtController.h
@@ -109,7 +109,7 @@ private:
bool parseSysexMessage(const pluginLib::SysEx&, synthLib::MidiEventSource) override;
bool parseControllerMessage(const synthLib::SMidiEvent&) override;
- void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override;
+ void sendParameterChange(const pluginLib::Parameter& _parameter, pluginLib::ParamValue _value) override;
bool sendGlobalParameterChange(xt::GlobalParameter _param, uint8_t _value);
bool sendModeDump() const;
void requestSingle(xt::LocationH _buf, uint8_t _location) const;