1
Fork 0

Add channelFactory::deserializePlugin() function

This commit is contained in:
gvnnz 2023-06-11 16:37:58 +02:00
parent 37576c08d6
commit d3219d4158
3 changed files with 38 additions and 20 deletions

View File

@ -63,4 +63,36 @@ std::unique_ptr<Plugin> create(ID id, std::unique_ptr<juce::AudioPluginInstance>
std::make_unique<PluginHost::Info>(sequencer, sampleRate),
sampleRate, bufferSize);
}
/* -------------------------------------------------------------------------- */
std::unique_ptr<Plugin> deserializePlugin(const Patch::Plugin& pplugin, std::unique_ptr<juce::AudioPluginInstance> pi,
const model::Sequencer& sequencer, int sampleRate, int bufferSize)
{
/* If the original juce::AudioPluginInstance is invalid, just return an
invalid giada::m::Plugin object. This way we can keep track of invalid
plug-ins. */
if (pi == nullptr)
return pluginFactory::createInvalid(pplugin.path, pplugin.id);
std::unique_ptr<Plugin> plugin = create(pplugin.id, std::move(pi), sequencer, sampleRate, bufferSize);
plugin->setBypass(pplugin.bypass);
plugin->setState(PluginState(pplugin.state));
/* Fill plug-in MidiIn parameters. Don't fill Plugin::midiInParam if
Patch::midiInParams are zero: it would wipe out the current default 0x0
values. */
if (!pplugin.midiInParams.empty())
{
plugin->midiInParams.clear();
std::size_t paramIndex = 0;
for (uint32_t midiInParam : pplugin.midiInParams)
plugin->midiInParams.emplace_back(midiInParam, paramIndex++);
}
return plugin;
}
} // namespace giada::m::pluginFactory

View File

@ -27,6 +27,7 @@
#ifndef G_PLUGIN_FACTORY_H
#define G_PLUGIN_FACTORY_H
#include "core/patch.h"
#include "core/types.h"
#include <juce_audio_processors/juce_audio_processors.h>
#include <memory>
@ -52,6 +53,9 @@ void reset();
std::unique_ptr<Plugin> createInvalid(const std::string& pid, ID id);
std::unique_ptr<Plugin> create(ID id, std::unique_ptr<juce::AudioPluginInstance>, const model::Sequencer&,
int sampleRate, int bufferSize);
std::unique_ptr<Plugin> deserializePlugin(const Patch::Plugin&, std::unique_ptr<juce::AudioPluginInstance>,
const model::Sequencer&, int sampleRate, int bufferSize);
} // namespace giada::m::pluginFactory
#endif

View File

@ -166,26 +166,8 @@ const Patch::Plugin PluginManager::serializePlugin(const Plugin& p) const
std::unique_ptr<Plugin> PluginManager::deserializePlugin(const Patch::Plugin& p,
int sampleRate, int bufferSize, const model::Sequencer& sequencer)
{
std::unique_ptr<Plugin> plugin = makePlugin(p.path, sampleRate, bufferSize, sequencer, p.id);
if (!plugin->valid)
return plugin; // Return invalid version
plugin->setBypass(p.bypass);
plugin->setState(PluginState(p.state));
/* Fill plug-in MidiIn parameters. Don't fill Plugin::midiInParam if
Patch::midiInParams are zero: it would wipe out the current default 0x0
values. */
if (!p.midiInParams.empty())
{
plugin->midiInParams.clear();
std::size_t paramIndex = 0;
for (uint32_t midiInParam : p.midiInParams)
plugin->midiInParams.emplace_back(midiInParam, paramIndex++);
}
return plugin;
std::unique_ptr<juce::AudioPluginInstance> pi = makeJucePlugin(p.path, sampleRate, bufferSize);
return pluginFactory::deserializePlugin(p, std::move(pi), sequencer, sampleRate, bufferSize);
}
/* -------------------------------------------------------------------------- */