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 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:
Msource/osTIrusJucePlugin/OsTIrusProcessor.cpp | 3++-
Msource/osirusJucePlugin/OsirusProcessor.cpp | 3++-
Msource/virusJucePlugin/VirusController.cpp | 11+++++++----
Msource/virusJucePlugin/VirusController.h | 6++++--
Msource/virusJucePlugin/VirusProcessor.cpp | 23++++++++++++++---------
Msource/virusJucePlugin/VirusProcessor.h | 6+++++-
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;