Add channelFactory::deserializePlugin() function
This commit is contained in:
parent
37576c08d6
commit
d3219d4158
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
|
Loading…
Reference in New Issue