This commit is contained in:
Robin E. R. Davies
2025-09-08 02:02:56 -04:00
parent b310853959
commit c100ad1aa5
8 changed files with 109 additions and 20 deletions
+24
View File
@@ -72,6 +72,12 @@ public:
, value_(value)
{
}
ControlValue(const std::string&key, float value)
:key_(key)
, value_(value)
{
}
GETTER_SETTER_REF(key)
GETTER_SETTER_REF(value)
@@ -174,6 +180,24 @@ public:
Lv2PluginState lv2State_;
std::map<std::string,std::string> pathProperties_;
DECLARE_JSON_MAP(SnapshotValue);
ControlValue*GetControlValue(const std::string& key) {
for (ControlValue&controlValue: controlValues_) {
if (controlValue.key() == key) {
return &controlValue;
}
}
return nullptr;
}
void SetControlValue(const std::string& key,float value) {
for (ControlValue&controlValue: controlValues_) {
if (controlValue.key() == key) {
controlValue.value(value);
return;
}
}
controlValues_.push_back(ControlValue{key,value});
}
};
+70 -6
View File
@@ -2033,6 +2033,69 @@ std::shared_ptr<Lv2PluginInfo> PiPedalModel::GetPluginInfo(const std::string &ur
return pluginHost.GetPluginInfo(uri);
}
void PiPedalModel::UpdateDefaults(SnapshotValue&snapshotValue, const PedalboardItem*pedalboardItem_)
{
std::shared_ptr<Lv2PluginInfo> pPlugin = pluginHost.GetPluginInfo(pedalboardItem_->uri());
if (!pPlugin)
{
if (pedalboardItem_->uri() == SPLIT_PEDALBOARD_ITEM_URI)
{
pPlugin = GetSplitterPluginInfo();
}
}
if (pPlugin)
{
//////// PLUGIN SPECIFIC UPGRADES //////////////////////
if (pPlugin->uri() == "http://two-play.com/plugins/toob-nam")
{
ControlValue *pVersion = snapshotValue.GetControlValue("version");
if (pVersion == nullptr) {
ControlValue *pValue = snapshotValue.GetControlValue("inputCalibrationMode");
if (pValue == nullptr)
{
// calibration is OFF when upgradfing.
snapshotValue.SetControlValue("inputCalibrationMode", 0.0f);
}
// convert old gate threshold to new gate threshold.
ControlValue *pGateValue = snapshotValue.GetControlValue("gate");
if (pGateValue) {
float value = pGateValue->value();
// Is the gate disabled?
if (value <= -100.0f)
{
value = -120.0f; // "disabled in new range."
} else {
value = value * 0.5; // correct the bug in original implementation.
}
snapshotValue.SetControlValue("gate", value);
}
snapshotValue.SetControlValue("version", 0.0f);
}
}
if (pPlugin->piPedalUI())
{
PiPedalUI::ptr piPedalUI = pPlugin->piPedalUI();
std::set<std::string> validFileProperties;
for (auto &fileProperty : piPedalUI->fileProperties())
{
validFileProperties.insert(fileProperty->patchProperty());
}
for (auto i = snapshotValue.pathProperties_.begin(); i != snapshotValue.pathProperties_.end(); /**/)
{
if (!validFileProperties.contains(i->first))
{
i = snapshotValue.pathProperties_.erase(i);
}
else
{
++i;
}
}
}
}
}
void PiPedalModel::UpdateDefaults(PedalboardItem *pedalboardItem, std::unordered_map<int64_t, PedalboardItem *> &itemMap)
{
itemMap[pedalboardItem->instanceId()] = pedalboardItem;
@@ -2161,9 +2224,9 @@ void PiPedalModel::UpdateDefaults(Snapshot *snapshot, std::unordered_map<int64_t
// plugin is no longer present. Remove from the snapshot.
snapshot->values_.erase(snapshot->values_.begin() + i);
--i;
} else {
UpdateDefaults(value, f->second);
}
// missing values in snapshots get filled in with plugin defaults at load time,
// so we don't need to actually populate the missing values.
}
for (auto &snapshotValue : snapshot->values_)
{
@@ -2174,11 +2237,12 @@ void PiPedalModel::UpdateDefaults(Pedalboard *pedalboard)
{
// add missing values.
std::unordered_map<int64_t, PedalboardItem *> itemMap;
for (size_t i = 0; i < pedalboard->GetAllPlugins().size(); ++i)
auto allPlugins = pedalboard->GetAllPlugins();
for (size_t i = 0; i < allPlugins.size(); ++i)
{
UpdateDefaults(&(pedalboard->items()[i]), itemMap);
UpdateDefaults(allPlugins[i], itemMap);
}
// set all missiong values on snapshots to default values.
// set all missing values on snapshots to default values.
for (auto snapshot : pedalboard->snapshots())
{
if (snapshot)
@@ -2190,7 +2254,7 @@ void PiPedalModel::UpdateDefaults(Pedalboard *pedalboard)
PluginPresets PiPedalModel::GetPluginPresets(const std::string &pluginUri)
{
std::lock_guard<std::recursive_mutex> lock(mutex);
std::lock_guard<std::recursive_mutex> lock(mutex);
return storage.GetPluginPresets(pluginUri);
}
+1
View File
@@ -207,6 +207,7 @@ namespace pipedal
void FireBanksChanged(int64_t clientId);
void FireJackConfigurationChanged(const JackConfiguration &jackConfiguration);
void FireLv2StateChanged(int64_t instanceId, const Lv2PluginState &lv2State);
void UpdateDefaults(SnapshotValue&snapshotValue, const PedalboardItem*pedalboardItem);
void UpdateDefaults(Snapshot *snapshot, std::unordered_map<int64_t, PedalboardItem *> &itemMap);
void UpdateDefaults(PedalboardItem *pedalboardItem, std::unordered_map<int64_t, PedalboardItem *> &itemMap);
void UpdateDefaults(Pedalboard *pedalboard);