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 be2bc97ad7415157639ffe50c0ea784e0e8ddc4c
parent cfd340c587f636166d85387bc19d96704f9ea873
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Sun,  8 Dec 2024 17:10:16 +0100

use filename as default patch name if there is exactly one patch in a file

Diffstat:
Msource/jucePluginEditorLib/patchmanager/patchmanager.cpp | 10+++++++---
Msource/jucePluginLib/patchdb/db.cpp | 6++++--
Msource/jucePluginLib/patchdb/db.h | 2+-
Msource/mqJucePlugin/mqPatchManager.cpp | 2+-
Msource/mqJucePlugin/mqPatchManager.h | 2+-
Msource/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp | 11+++++++----
Msource/nord/n2x/n2xJucePlugin/n2xPatchManager.h | 4++--
Msource/synthLib/os.cpp | 8++++++++
Msource/synthLib/os.h | 1+
Msource/virusJucePlugin/PatchManager.cpp | 2+-
Msource/virusJucePlugin/PatchManager.h | 2+-
Msource/xtJucePlugin/xtPatchManager.cpp | 2+-
Msource/xtJucePlugin/xtPatchManager.h | 2+-
13 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/source/jucePluginEditorLib/patchmanager/patchmanager.cpp b/source/jucePluginEditorLib/patchmanager/patchmanager.cpp @@ -22,6 +22,8 @@ #include "dsp56kEmu/logging.h" +#include "synthLib/os.h" + #if JUCE_MAJOR_VERSION < 8 // they forgot this include but fixed it in version 8+ #include "juce_gui_extra/misc/juce_ColourSelector.h" #endif @@ -760,9 +762,11 @@ namespace jucePluginEditorLib::patchManager if(!loadFile(results, file) || results.empty()) continue; + const auto defaultName = results.size() == 1 ? synthLib::stripExtension(synthLib::getFilenameWithoutPath(file)) : ""; + for (auto& result : results) { - if(const auto patch = initializePatch(std::move(result))) + if(const auto patch = initializePatch(std::move(result), defaultName)) patches.push_back(patch); } } @@ -825,7 +829,7 @@ namespace jucePluginEditorLib::patchManager pluginLib::patchDB::Data data; if(!requestPatchForPart(data, _part, 0)) return; - const auto patch = initializePatch(std::move(data)); + const auto patch = initializePatch(std::move(data), {}); if(!patch) return; updateStateAsync(_part, patch); @@ -1034,7 +1038,7 @@ namespace jucePluginEditorLib::patchManager for (auto& result : data.sysex) { - if(const auto patch = initializePatch(std::move(result))) + if(const auto patch = initializePatch(std::move(result), {})) patches.push_back(patch); } diff --git a/source/jucePluginLib/patchdb/db.cpp b/source/jucePluginLib/patchdb/db.cpp @@ -604,7 +604,7 @@ namespace pluginLib::patchDB { Data data; requestPatchForPart(data, _part, _userData); - return initializePatch(std::move(data)); + return initializePatch(std::move(data), {}); } void DB::getTags(const TagType _type, std::set<Tag>& _tags) @@ -959,9 +959,11 @@ namespace pluginLib::patchDB std::vector<PatchPtr> patches; patches.reserve(data.size()); + const std::string defaultName = data.size() == 1 ? synthLib::stripExtension(synthLib::getFilenameWithoutPath(ds->name)) : ""; + for (uint32_t p = 0; p < data.size(); ++p) { - if (const auto patch = initializePatch(std::move(data[p]))) + if (const auto patch = initializePatch(std::move(data[p]), defaultName)) { patch->source = ds->weak_from_this(); diff --git a/source/jucePluginLib/patchdb/db.h b/source/jucePluginLib/patchdb/db.h @@ -95,7 +95,7 @@ namespace pluginLib::patchDB virtual bool loadFile(DataList& _results, const std::string& _file); virtual bool loadLocalStorage(DataList& _results, const DataSource& _ds); virtual bool loadFolder(const DataSourceNodePtr& _folder); - virtual PatchPtr initializePatch(Data&& _sysex) = 0; + virtual PatchPtr initializePatch(Data&& _sysex, const std::string& _defaultPatchName) = 0; virtual Data applyModifications(const PatchPtr& _patch) const = 0; virtual bool parseFileData(DataList& _results, const Data& _data); virtual bool equals(const PatchPtr& _a, const PatchPtr& _b) const diff --git a/source/mqJucePlugin/mqPatchManager.cpp b/source/mqJucePlugin/mqPatchManager.cpp @@ -38,7 +38,7 @@ namespace mqJucePlugin return false; } - pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex) + pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) { pluginLib::MidiPacket::Data data; pluginLib::MidiPacket::AnyPartParamValues parameters; diff --git a/source/mqJucePlugin/mqPatchManager.h b/source/mqJucePlugin/mqPatchManager.h @@ -16,7 +16,7 @@ namespace mqJucePlugin // PatchManager overrides bool requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part, uint64_t _userData) override; bool loadRomData(pluginLib::patchDB::DataList& _results, uint32_t _bank, uint32_t _program) override; - pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex) override; + pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) override; pluginLib::patchDB::Data applyModifications(const pluginLib::patchDB::PatchPtr& _patch) const override; uint32_t getCurrentPart() const override; bool activatePatch(const pluginLib::patchDB::PatchPtr& _patch, uint32_t _part) override; diff --git a/source/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp b/source/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp @@ -47,7 +47,7 @@ namespace n2xJucePlugin return false; } - pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex) + pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) { if(!isValidPatchDump(_sysex)) return {}; @@ -82,7 +82,7 @@ namespace n2xJucePlugin p->tags.add(pluginLib::patchDB::TagType::Tag, "Mono"); } - p->name = getPatchName(_sysex); + p->name = getPatchName(_sysex, _defaultPatchName); p->sysex = std::move(_sysex); p->program = program; p->bank = bank; @@ -134,10 +134,10 @@ namespace n2xJucePlugin return jucePluginEditorLib::patchManager::PatchManager::parseFileData(_results, _data); } - std::string PatchManager::getPatchName(const pluginLib::patchDB::Data& _sysex) + std::string PatchManager::getPatchName(const pluginLib::patchDB::Data& _sysex, const std::string& _defaultPatchName/* = {}*/) { if(!isValidPatchDump(_sysex)) - return {}; + return _defaultPatchName; { const auto nameFromDump = n2x::State::extractPatchName(_sysex); @@ -145,6 +145,9 @@ namespace n2xJucePlugin return nameFromDump; } + if (!_defaultPatchName.empty()) + return _defaultPatchName; + const auto isSingle = n2x::State::isSingleDump(_sysex); const auto bank = _sysex[n2x::SysexIndex::IdxMsgType]; diff --git a/source/nord/n2x/n2xJucePlugin/n2xPatchManager.h b/source/nord/n2x/n2xJucePlugin/n2xPatchManager.h @@ -16,13 +16,13 @@ namespace n2xJucePlugin // PatchManager overrides bool requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part, uint64_t _userData) override; bool loadRomData(pluginLib::patchDB::DataList& _results, uint32_t _bank, uint32_t _program) override; - pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex) override; + pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) override; pluginLib::patchDB::Data applyModifications(const pluginLib::patchDB::PatchPtr& _patch) const override; uint32_t getCurrentPart() const override; bool activatePatch(const pluginLib::patchDB::PatchPtr& _patch, uint32_t _part) override; bool parseFileData(pluginLib::patchDB::DataList& _results, const pluginLib::patchDB::Data& _data) override; - static std::string getPatchName(const pluginLib::patchDB::Data& _sysex); + static std::string getPatchName(const pluginLib::patchDB::Data& _sysex, const std::string& _defaultPatchName = {}); static bool isValidPatchDump(const pluginLib::patchDB::Data& _sysex); private: diff --git a/source/synthLib/os.cpp b/source/synthLib/os.cpp @@ -233,6 +233,14 @@ namespace synthLib return {}; } + std::string stripExtension(const std::string& _name) + { + const auto pos = _name.find_last_of('.'); + if (pos != std::string::npos) + return _name.substr(0, pos); + return _name; + } + std::string getFilenameWithoutPath(const std::string& _name) { const auto pos = _name.find_last_of("/\\"); diff --git a/source/synthLib/os.h b/source/synthLib/os.h @@ -25,6 +25,7 @@ namespace synthLib std::string findROM(size_t _expectedSize = 524288); std::string getExtension(const std::string& _name); + std::string stripExtension(const std::string& _name); std::string getFilenameWithoutPath(const std::string& _name); std::string getPath(const std::string& _filename); diff --git a/source/virusJucePlugin/PatchManager.cpp b/source/virusJucePlugin/PatchManager.cpp @@ -93,7 +93,7 @@ namespace genericVirusUI return true; } - std::shared_ptr<pluginLib::patchDB::Patch> PatchManager::initializePatch(std::vector<uint8_t>&& _sysex) + std::shared_ptr<pluginLib::patchDB::Patch> PatchManager::initializePatch(std::vector<uint8_t>&& _sysex, const std::string& _defaultPatchName) { if (_sysex.size() < 267) return nullptr; diff --git a/source/virusJucePlugin/PatchManager.h b/source/virusJucePlugin/PatchManager.h @@ -22,7 +22,7 @@ namespace genericVirusUI // PatchDB impl bool loadRomData(pluginLib::patchDB::DataList& _results, uint32_t _bank, uint32_t _program) override; - std::shared_ptr<pluginLib::patchDB::Patch> initializePatch(std::vector<uint8_t>&& _sysex) override; + std::shared_ptr<pluginLib::patchDB::Patch> initializePatch(std::vector<uint8_t>&& _sysex, const std::string& _defaultPatchName) override; pluginLib::patchDB::Data applyModifications(const pluginLib::patchDB::PatchPtr& _patch) const override; bool parseFileData(std::vector<std::vector<uint8_t>>& _results, const std::vector<uint8_t>& _data) override; bool requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part, uint64_t _userData) override; diff --git a/source/xtJucePlugin/xtPatchManager.cpp b/source/xtJucePlugin/xtPatchManager.cpp @@ -43,7 +43,7 @@ namespace xtJucePlugin return false; } - pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex) + pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) { if(_sysex.size() == xt::Mw1::g_singleDumpLength) { diff --git a/source/xtJucePlugin/xtPatchManager.h b/source/xtJucePlugin/xtPatchManager.h @@ -16,7 +16,7 @@ namespace xtJucePlugin // PatchManager overrides bool requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part, uint64_t _userData) override; bool loadRomData(pluginLib::patchDB::DataList& _results, uint32_t _bank, uint32_t _program) override; - pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex) override; + pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) override; pluginLib::patchDB::Data applyModifications(const pluginLib::patchDB::PatchPtr& _patch) const override; uint32_t getCurrentPart() const override; bool activatePatch(const pluginLib::patchDB::PatchPtr& _patch, uint32_t _part) override;