Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
zrythm::plugins::Plugin Class Referenceabstract

DSP processing plugin. More...

#include <src/plugins/plugin.h>

Inheritance diagram for zrythm::plugins::Plugin:
Collaboration diagram for zrythm::plugins::Plugin:

Data Structures

struct  ParamSync
 Per-parameter state for bidirectional plugin sync. More...

Public Types

enum class  InstantiationStatus : std::uint8_t { Pending , Successful , Failed }

Public Member Functions

int programIndex () const
 Returns the current program index, or -1 if no program exists.
void setProgramIndex (int index)
Q_SIGNAL void programIndexChanged (int index)
 Implementations should attach to this and set the program.
PluginConfigurationconfiguration () const
Q_SIGNAL void configurationChanged (PluginConfiguration *configuration, bool generateNewPluginPortsAndParams)
 Emitted when the configuration is set on the plugin.
dsp::ProcessorParameterbypassParameter () const
dsp::ProcessorParametergainParameter () const
bool uiVisible () const
void setUiVisible (bool visible)
Q_SIGNAL void uiVisibleChanged (bool visible)
 Implementations should listen to this and show/hide the plugin UI accordingly.
InstantiationStatus instantiationStatus () const
Q_SIGNAL void instantiationStatusChanged (InstantiationStatus status)
Q_SIGNAL void instantiationFinished (bool successful, const QString &error)
 To be emitted by implementations when instantiation finished.
PluginDescriptorget_descriptor () const
utils::Utf8String get_name () const
Protocol::ProtocolType get_protocol () const
void set_configuration (const PluginConfiguration &setting)
 Sets the plugin configuration to use.
void custom_prepare_for_processing (const dsp::graph::GraphNode *node, units::sample_rate_t sample_rate, units::sample_u32_t max_block_length) final
void custom_process_block (dsp::graph::EngineProcessTimeInfo time_nfo, const dsp::ITransport &transport, const dsp::TempoMap &tempo_map) noexcept final
 Custom processor logic after processing all owned parameters.
void custom_release_resources () final
bool currently_enabled () const
 Returns whether the plugin is enabled (not bypassed).
bool currently_enabled_rt () const noexcept
std::string save_state () const
 Serializes the plugin's internal state to a base64-encoded string.
void load_state (const std::string &base64_state)
 Queues a previously saved state to be applied to the plugin.
void flush_plugin_values ()
 Flushes plugin-reported parameter values to Zrythm params.
Public Member Functions inherited from zrythm::dsp::ProcessorBase
 ProcessorBase (ProcessorBaseDependencies dependencies, utils::Utf8String name={ u8"ProcessorBase" })
void set_name (const utils::Utf8String &name)
 Set a custom name to be used in the DSP graph.
void add_input_port (const dsp::PortUuidReference &uuid)
void add_output_port (const dsp::PortUuidReference &uuid)
void add_parameter (const dsp::ProcessorParameterUuidReference &uuid)
auto & get_input_ports () const
auto & get_output_ports () const
auto & get_parameters () const
const ParameterChangeTrackerchange_tracker () const noexcept
 Returns the change tracker.
utils::Utf8String get_node_name () const final
 Returns a human friendly name of the node.
void process_block (dsp::graph::EngineProcessTimeInfo time_nfo, const dsp::ITransport &transport, const dsp::TempoMap &tempo_map) noexcept final
 Calls custom_process_block() internally after processing all the parameters.
void prepare_for_processing (const graph::GraphNode *node, units::sample_rate_t sample_rate, units::sample_u32_t max_block_length) final
 Called to allocate resources required for processing.
void release_resources () final
 Called to release resources allocated by prepare_for_processing().
Public Member Functions inherited from zrythm::dsp::graph::IProcessable
virtual units::sample_u32_t get_single_playback_latency () const
 Returns the latency of only the given processable, without adding the previous/next latencies (zero latency by default).
Public Member Functions inherited from zrythm::utils::UuidIdentifiableObject< Plugin >
UuidIdentifiableObject & operator= (const UuidIdentifiableObject &other)=default
auto get_uuid () const

Protected Member Functions

 Plugin (ProcessorBaseDependencies dependencies, QObject *parent)
 Creates/initializes a plugin and its internal plugin (LV2, etc.) using the given setting.
dsp::ProcessorParameterUuidReference generate_default_bypass_param () const
 To be called by implementations to generate the default bypass parameter if the plugin does not provide its own.
dsp::ProcessorParameterUuidReference generate_default_gain_param () const
 To be called by implementations to generate the default gain parameter if the plugin does not provide its own.
Protected Member Functions inherited from zrythm::dsp::ProcessorBase
auto dependencies () const

Protected Attributes

bool instantiation_failed_ = false
 Set to true if instantiation failed and the plugin will be treated as disabled.
std::optional< dsp::ProcessorParameter::Uuid > bypass_id_
 Bypass toggle parameter,.
std::optional< dsp::ProcessorParameter::Uuid > gain_id_
 Zrythm-provided plugin gain parameter.
std::vector< dsp::AudioPort * > audio_in_ports_
std::vector< dsp::AudioPort * > audio_out_ports_
std::vector< dsp::CVPort * > cv_in_ports_
dsp::MidiPortmidi_in_port_ {}
dsp::MidiPortmidi_out_port_ {}
dsp::ProcessorParameterbypass_param_rt_ {}
ParamSync param_sync_

Properties

int programIndex
zrythm::plugins::PluginConfigurationconfiguration
zrythm::dsp::ProcessorParameterbypassParameter
zrythm::dsp::ProcessorParametergainParameter
bool uiVisible
InstantiationStatus instantiationStatus

Friends

void to_json (nlohmann::json &j, const Plugin &p)
void from_json (const nlohmann::json &j, Plugin &p)

Detailed Description

DSP processing plugin.

Can be external or internal.

Plugin State Persistence

All plugin types serialize their state as base64-encoded data within the project JSON file via their to_json/from_json functions. There are no separate state files on disk — JSON serialization is the sole persistence mechanism.

Each plugin subclass includes a "state" key in its to_json() output containing the base64-encoded plugin state. During from_json(), the state is deserialized first and stored in a temporary member (e.g., state_to_apply_), then applied after the plugin instance is fully initialized. No filesystem paths or state directories are involved.

Definition at line 42 of file plugin.h.

Member Enumeration Documentation

◆ InstantiationStatus

enum class zrythm::plugins::Plugin::InstantiationStatus : std::uint8_t
strong
Enumerator
Pending 

Instantiation underway.

Successful 

Instantiation successful.

Failed 

Instantiation failed.

Definition at line 60 of file plugin.h.

Constructor & Destructor Documentation

◆ Plugin()

zrythm::plugins::Plugin::Plugin ( ProcessorBaseDependencies dependencies,
QObject * parent )
protected

Creates/initializes a plugin and its internal plugin (LV2, etc.) using the given setting.

Exceptions
ZrythmExceptionIf the plugin could not be created.

Member Function Documentation

◆ bypassParameter()

dsp::ProcessorParameter * zrythm::plugins::Plugin::bypassParameter ( ) const
inline

Definition at line 119 of file plugin.h.

◆ configuration()

PluginConfiguration * zrythm::plugins::Plugin::configuration ( ) const
inline

Definition at line 100 of file plugin.h.

◆ configurationChanged()

Q_SIGNAL void zrythm::plugins::Plugin::configurationChanged ( PluginConfiguration * configuration,
bool generateNewPluginPortsAndParams )

Emitted when the configuration is set on the plugin.

Implementing plugins should attach to this and, if generateNewPluginPortsAndParams is true, query the underlying plugin for its port/parameter layout and create corresponding Zrythm objects. If false, ports and parameters already exist (e.g., after JSON deserialization) and only the underlying plugin instance needs to be reinitialized.

Parameters
configurationThe plugin configuration.
generateNewPluginPortsAndParamsWhether the handler should create new Zrythm ports and parameters from the underlying plugin.

◆ currently_enabled()

bool zrythm::plugins::Plugin::currently_enabled ( ) const
inline

Returns whether the plugin is enabled (not bypassed).

Definition at line 212 of file plugin.h.

◆ currently_enabled_rt()

bool zrythm::plugins::Plugin::currently_enabled_rt ( ) const
inlinenoexcept

Definition at line 218 of file plugin.h.

◆ custom_prepare_for_processing()

void zrythm::plugins::Plugin::custom_prepare_for_processing ( const dsp::graph::GraphNode * node,
units::sample_rate_t sample_rate,
units::sample_u32_t max_block_length )
finalvirtual

Reimplemented from zrythm::dsp::ProcessorBase.

◆ custom_process_block()

void zrythm::plugins::Plugin::custom_process_block ( dsp::graph::EngineProcessTimeInfo time_nfo,
const dsp::ITransport & transport,
const dsp::TempoMap & tempo_map )
finalvirtualnoexcept

Custom processor logic after processing all owned parameters.

By default, this does passthrough to same-type ports.

Reimplemented from zrythm::dsp::ProcessorBase.

◆ custom_release_resources()

void zrythm::plugins::Plugin::custom_release_resources ( )
finalvirtual

Reimplemented from zrythm::dsp::ProcessorBase.

◆ flush_plugin_values()

void zrythm::plugins::Plugin::flush_plugin_values ( )

Flushes plugin-reported parameter values to Zrythm params.

Called on the main thread by a timer (~20ms). Exchanges pending_value atomics and calls setBaseValue() for any non-sentinel values.

◆ gainParameter()

dsp::ProcessorParameter * zrythm::plugins::Plugin::gainParameter ( ) const
inline

Definition at line 124 of file plugin.h.

◆ get_descriptor()

PluginDescriptor & zrythm::plugins::Plugin::get_descriptor ( ) const
inline

Definition at line 164 of file plugin.h.

◆ get_name()

utils::Utf8String zrythm::plugins::Plugin::get_name ( ) const
inline

Definition at line 168 of file plugin.h.

◆ get_protocol()

Protocol::ProtocolType zrythm::plugins::Plugin::get_protocol ( ) const
inline

Definition at line 172 of file plugin.h.

◆ instantiationFinished()

Q_SIGNAL void zrythm::plugins::Plugin::instantiationFinished ( bool successful,
const QString & error )

To be emitted by implementations when instantiation finished.

This is used since some plugins do instantiation asynchronously. The project should re-calculate the DSP graph when this gets fired.

Parameters
errorNon-empty on instantiation failure.

◆ instantiationStatus()

InstantiationStatus zrythm::plugins::Plugin::instantiationStatus ( ) const
inline

Definition at line 146 of file plugin.h.

◆ load_state()

void zrythm::plugins::Plugin::load_state ( const std::string & base64_state)

Queues a previously saved state to be applied to the plugin.

The state will be applied during the next processing cycle.

◆ programIndex()

int zrythm::plugins::Plugin::programIndex ( ) const
inline

Returns the current program index, or -1 if no program exists.

Definition at line 77 of file plugin.h.

◆ save_state()

std::string zrythm::plugins::Plugin::save_state ( ) const

Serializes the plugin's internal state to a base64-encoded string.

Returns
Base64-encoded state, or empty string if no state is available.

◆ set_configuration()

void zrythm::plugins::Plugin::set_configuration ( const PluginConfiguration & setting)

Sets the plugin configuration to use.

This must be called exactly once right after construction to set the PluginConfiguration for this plugin.

When called during fresh construction, the plugin will have no ports or parameters and the signal will instruct handlers to create them. When called during deserialization (after ports/params are already restored from JSON), the signal will instruct handlers to skip creation and only reinitialize the underlying plugin instance.

◆ setProgramIndex()

void zrythm::plugins::Plugin::setProgramIndex ( int index)
inline

Definition at line 78 of file plugin.h.

◆ setUiVisible()

void zrythm::plugins::Plugin::setUiVisible ( bool visible)
inline

Definition at line 131 of file plugin.h.

◆ uiVisible()

bool zrythm::plugins::Plugin::uiVisible ( ) const
inline

Definition at line 130 of file plugin.h.

Field Documentation

◆ audio_in_ports_

std::vector<dsp::AudioPort *> zrythm::plugins::Plugin::audio_in_ports_
protected

Definition at line 339 of file plugin.h.

◆ audio_out_ports_

std::vector<dsp::AudioPort *> zrythm::plugins::Plugin::audio_out_ports_
protected

Definition at line 340 of file plugin.h.

◆ bypass_id_

std::optional<dsp::ProcessorParameter::Uuid> zrythm::plugins::Plugin::bypass_id_
protected

Bypass toggle parameter,.

If the plugin itself doesn't provide a bypass parameter, one will be created for it.

Definition at line 331 of file plugin.h.

◆ bypass_param_rt_

dsp::ProcessorParameter* zrythm::plugins::Plugin::bypass_param_rt_ {}
protected

Definition at line 344 of file plugin.h.

◆ cv_in_ports_

std::vector<dsp::CVPort *> zrythm::plugins::Plugin::cv_in_ports_
protected

Definition at line 341 of file plugin.h.

◆ gain_id_

std::optional<dsp::ProcessorParameter::Uuid> zrythm::plugins::Plugin::gain_id_
protected

Zrythm-provided plugin gain parameter.

Definition at line 336 of file plugin.h.

◆ instantiation_failed_

bool zrythm::plugins::Plugin::instantiation_failed_ = false
protected

Set to true if instantiation failed and the plugin will be treated as disabled.

Definition at line 319 of file plugin.h.

◆ midi_in_port_

dsp::MidiPort* zrythm::plugins::Plugin::midi_in_port_ {}
protected

Definition at line 342 of file plugin.h.

◆ midi_out_port_

dsp::MidiPort* zrythm::plugins::Plugin::midi_out_port_ {}
protected

Definition at line 343 of file plugin.h.

◆ param_sync_

ParamSync zrythm::plugins::Plugin::param_sync_
protected

Definition at line 399 of file plugin.h.

Property Documentation

◆ bypassParameter

zrythm::dsp::ProcessorParameter * zrythm::plugins::Plugin::bypassParameter
read

Definition at line 50 of file plugin.h.

◆ configuration

zrythm::plugins::PluginConfiguration * zrythm::plugins::Plugin::configuration
read

Definition at line 49 of file plugin.h.

◆ gainParameter

zrythm::dsp::ProcessorParameter * zrythm::plugins::Plugin::gainParameter
read

Definition at line 52 of file plugin.h.

◆ instantiationStatus

InstantiationStatus zrythm::plugins::Plugin::instantiationStatus
read

Definition at line 54 of file plugin.h.

◆ programIndex

int zrythm::plugins::Plugin::programIndex
readwrite

Definition at line 48 of file plugin.h.

◆ uiVisible

bool zrythm::plugins::Plugin::uiVisible
readwrite

Definition at line 53 of file plugin.h.


The documentation for this class was generated from the following file: