commit f9fd034d546a3b865f2e0c0d3c0cfc5701700dc0
parent a125b32c704bdacc47d73b8d765557489d895c7a
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Sun, 21 Apr 2024 00:50:42 +0200
fix pure virtual function call / specify default mode to load parameter descriptions
Diffstat:
6 files changed, 34 insertions(+), 18 deletions(-)
diff --git a/source/osTIrusJucePlugin/OsTIrusProcessor.cpp b/source/osTIrusJucePlugin/OsTIrusProcessor.cpp
@@ -30,8 +30,9 @@ OsTIrusProcessor::OsTIrusProcessor() :
.withOutput("USB 3", juce::AudioChannelSet::stereo(), true)
#endif
, ::getConfigOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect}
- , virusLib::ROMLoader::findROMs(virusLib::DeviceModel::TI2, virusLib::DeviceModel::Snow))
+ , virusLib::ROMLoader::findROMs(virusLib::DeviceModel::TI2, virusLib::DeviceModel::Snow), virusLib::DeviceModel::TI2)
{
+ postConstruct();
}
OsTIrusProcessor::~OsTIrusProcessor()
diff --git a/source/osirusJucePlugin/OsirusProcessor.cpp b/source/osirusJucePlugin/OsirusProcessor.cpp
@@ -27,8 +27,9 @@ OsirusProcessor::OsirusProcessor() :
.withOutput("Out 3", juce::AudioChannelSet::stereo(), true)
#endif
, ::getConfigOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect}
- , virusLib::ROMLoader::findROMs(virusLib::DeviceModel::ABC))
+ , virusLib::ROMLoader::findROMs(virusLib::DeviceModel::ABC), virusLib::DeviceModel::ABC)
{
+ postConstruct();
}
OsirusProcessor::~OsirusProcessor()
diff --git a/source/virusJucePlugin/VirusController.cpp b/source/virusJucePlugin/VirusController.cpp
@@ -37,7 +37,11 @@ namespace Virus
return g_midiPacketNames[static_cast<uint32_t>(_type)];
}
- Controller::Controller(VirusProcessor &p, unsigned char deviceId) : pluginLib::Controller(p, loadParameterDescriptions(p)), m_processor(p), m_deviceId(deviceId)
+ Controller::Controller(VirusProcessor &p, const virusLib::DeviceModel _defaultModel, unsigned char deviceId)
+ : pluginLib::Controller(p, loadParameterDescriptions(_defaultModel, p))
+ , m_processor(p)
+ , m_defaultModel(_defaultModel)
+ , m_deviceId(deviceId)
{
switch(p.getModel())
{
@@ -392,10 +396,9 @@ namespace Virus
return parseMidiPacket(*m, _data, _parameterValues, _msg);
}
- std::string Controller::loadParameterDescriptions(const VirusProcessor& _processor)
+ std::string Controller::loadParameterDescriptions(virusLib::DeviceModel _model, const VirusProcessor& _processor)
{
- const auto model = _processor.getModel();
- const auto name = model == virusLib::DeviceModel::Invalid || isTIFamily(model) ? "parameterDescriptions_TI.json" : "parameterDescriptions_C.json";
+ const auto name = isTIFamily(_model) ? "parameterDescriptions_TI.json" : "parameterDescriptions_C.json";
const auto path = synthLib::getModulePath() + name;
const std::ifstream f(path.c_str(), std::ios::in);
diff --git a/source/virusJucePlugin/VirusController.h b/source/virusJucePlugin/VirusController.h
@@ -65,7 +65,7 @@ namespace Virus
PresetSource source = PresetSource::Unknown;
};
- Controller(VirusProcessor &, unsigned char deviceId = 0x00);
+ Controller(VirusProcessor&, virusLib::DeviceModel _defaultModel, unsigned char deviceId = 0x00);
~Controller() override;
std::vector<uint8_t> createSingleDump(uint8_t _part, uint8_t _bank, uint8_t _program);
@@ -154,7 +154,7 @@ namespace Virus
bool parseSingle(pluginLib::MidiPacket::Data& _data, pluginLib::MidiPacket::AnyPartParamValues& _parameterValues, const pluginLib::SysEx& _msg, MidiPacketType& usedPacketType) const;
private:
- static std::string loadParameterDescriptions(const VirusProcessor& _processor);
+ std::string loadParameterDescriptions(virusLib::DeviceModel _model, const VirusProcessor& _processor);
void timerCallback() override;
@@ -172,6 +172,8 @@ namespace Virus
void parseControllerDump(const synthLib::SMidiEvent&);
VirusProcessor& m_processor;
+ virusLib::DeviceModel m_defaultModel;
+
unsigned char m_deviceId;
virusLib::BankNumber m_currentBank[16]{};
uint8_t m_currentProgram[16]{};
diff --git a/source/virusJucePlugin/VirusProcessor.cpp b/source/virusJucePlugin/VirusProcessor.cpp
@@ -9,16 +9,11 @@
#include "../synthLib/os.h"
//==============================================================================
-VirusProcessor::VirusProcessor(const BusesProperties& _busesProperties, const juce::PropertiesFile::Options& _configOptions, const pluginLib::Processor::Properties& _properties, const std::vector<virusLib::ROMFile>& _roms)
- : jucePluginEditorLib::Processor(_busesProperties, _configOptions, _properties)
+VirusProcessor::VirusProcessor(const BusesProperties& _busesProperties, const juce::PropertiesFile::Options& _configOptions, const pluginLib::Processor::Properties& _properties, const std::vector<virusLib::ROMFile>& _roms, const virusLib::DeviceModel _defaultModel)
+ : Processor(_busesProperties, _configOptions, _properties)
, m_roms(_roms)
+ , m_defaultModel(_defaultModel)
{
- evRomChanged.retain(getSelectedRom());
-
- m_clockTempoParam = getController().getParameterIndexByName(Virus::g_paramClockTempo);
-
- const auto latencyBlocks = getConfig().getIntValue("latencyBlocks", static_cast<int>(getPlugin().getLatencyBlocks()));
- Processor::setLatencyBlocks(latencyBlocks);
}
VirusProcessor::~VirusProcessor()
@@ -70,6 +65,16 @@ bool VirusProcessor::setSelectedRom(const uint32_t _index)
}
}
+void VirusProcessor::postConstruct()
+{
+ evRomChanged.retain(getSelectedRom());
+
+ m_clockTempoParam = getController().getParameterIndexByName(Virus::g_paramClockTempo);
+
+ const auto latencyBlocks = getConfig().getIntValue("latencyBlocks", static_cast<int>(getPlugin().getLatencyBlocks()));
+ Processor::setLatencyBlocks(latencyBlocks);
+}
+
synthLib::Device* VirusProcessor::createDevice()
{
const auto* rom = getSelectedRom();
@@ -81,7 +86,7 @@ pluginLib::Controller* VirusProcessor::createController()
// force creation of device as the controller decides how to initialize based on the used ROM
getPlugin();
- return new Virus::Controller(*this);
+ return new Virus::Controller(*this, m_defaultModel);
}
void VirusProcessor::saveChunkData(synthLib::BinaryStream& s)
diff --git a/source/virusJucePlugin/VirusProcessor.h b/source/virusJucePlugin/VirusProcessor.h
@@ -13,7 +13,7 @@
class VirusProcessor : public jucePluginEditorLib::Processor
{
public:
- VirusProcessor(const BusesProperties& _busesProperties, const juce::PropertiesFile::Options& _configOptions, const pluginLib::Processor::Properties& _properties, const std::vector<virusLib::ROMFile>& _roms);
+ VirusProcessor(const BusesProperties& _busesProperties, const juce::PropertiesFile::Options& _configOptions, const pluginLib::Processor::Properties& _properties, const std::vector<virusLib::ROMFile>& _roms, virusLib::DeviceModel _defaultModel);
~VirusProcessor() override;
void processBpm(float _bpm) override;
@@ -54,6 +54,9 @@ public:
virtual const char* findEmbeddedResource(const char* _name, uint32_t& _size) const = 0;
+protected:
+ void postConstruct();
+
// _____________
//
private:
@@ -68,6 +71,7 @@ private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(VirusProcessor)
std::vector<virusLib::ROMFile> m_roms;
+ const virusLib::DeviceModel m_defaultModel;
uint32_t m_selectedRom = 0;
uint32_t m_clockTempoParam = 0xffffffff;