Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::format::PluginDescriptor Struct Reference

Plugin metadata — declared once, immutable. More...

#include <plugin_descriptor.hpp>

Public Member Functions

NodeCapabilities effective_capabilities () const
int default_input_channels () const
 Channel count of the first (main) input bus.
int default_output_channels () const
 Channel count of the first (main) output bus.

Public Attributes

std::string name
std::string manufacturer
std::string bundle_id
std::string version
 Semantic version string, e.g. "1.0.0".
PluginCategory category = PluginCategory::Effect
std::vector< BusInfo > input_buses = {{"Main In", 2, false}}
 Bus configuration — defaults to single stereo in/out for compatibility.
std::vector< BusInfo > output_buses = {{"Main Out", 2, false}}
bool accepts_midi = false
 true if plugin receives MIDI input
bool produces_midi = false
 true if plugin sends MIDI output
bool supports_mpe = false
 Opt in to MPE (MIDI Polyphonic Expression).
bool supports_ump = false
 Opt in to the native MIDI 2.0 UMP sidecar.
bool ios_requires_background_audio = false
 iOS-only: true when the plugin renders audio that must continue while the host app is backgrounded (live synth in AUM, looper that keeps running while the user switches apps, etc.).
int tail_samples = 0
 Tail time in samples (0 = no tail, -1 = infinite).
std::string vendor_url
 Optional contact info — appended here so existing positional aggregate initializers keep working.
std::string vendor_email
NodeCapabilities node_capabilities
 Node ABI capability bits.
bool supports_f64_audio = false
 Opt in to native double-precision audio processing.
std::vector< BusLayoutConfiguration > supported_bus_layouts
 Explicit host-selectable layouts.
std::uint32_t voice_count = 0
 Number of simultaneously sounding voices this plugin allocates.

Detailed Description

Plugin metadata — declared once, immutable.

Every Processor subclass returns a PluginDescriptor from descriptor(). Format adapters use this to register the plugin with the host.

PluginDescriptor descriptor() const override {
return {
.name = "MyGain",
.manufacturer = "Example",
.bundle_id = "com.example.mygain",
.version = "1.0.0",
};
}
@ Effect
Audio effect (takes input, produces output).
Definition plugin_descriptor.hpp:186
Plugin metadata — declared once, immutable.
Definition plugin_descriptor.hpp:245

Member Function Documentation

◆ default_input_channels()

int pulp::format::PluginDescriptor::default_input_channels ( ) const
inline

Channel count of the first (main) input bus.

◆ default_output_channels()

int pulp::format::PluginDescriptor::default_output_channels ( ) const
inline

Channel count of the first (main) output bus.

◆ effective_capabilities()

NodeCapabilities pulp::format::PluginDescriptor::effective_capabilities ( ) const
inline

Member Data Documentation

◆ accepts_midi

bool pulp::format::PluginDescriptor::accepts_midi = false

true if plugin receives MIDI input

◆ bundle_id

std::string pulp::format::PluginDescriptor::bundle_id

◆ category

PluginCategory pulp::format::PluginDescriptor::category = PluginCategory::Effect

◆ input_buses

std::vector<BusInfo> pulp::format::PluginDescriptor::input_buses = {{"Main In", 2, false}}

Bus configuration — defaults to single stereo in/out for compatibility.

Override input_buses/output_buses for multi-bus (sidechain, aux).

◆ ios_requires_background_audio

bool pulp::format::PluginDescriptor::ios_requires_background_audio = false

iOS-only: true when the plugin renders audio that must continue while the host app is backgrounded (live synth in AUM, looper that keeps running while the user switches apps, etc.).

The host-app layer uses this flag to decide whether to set the audio UIBackgroundModes entitlement and keep the AVAudioSession active in background.

Default false — most effects don't need background audio and setting the entitlement unnecessarily attracts App Store review scrutiny.

◆ manufacturer

std::string pulp::format::PluginDescriptor::manufacturer

◆ name

std::string pulp::format::PluginDescriptor::name

◆ node_capabilities

NodeCapabilities pulp::format::PluginDescriptor::node_capabilities

Node ABI capability bits.

This is the forward-compatible capability model; legacy supports_mpe/supports_ump/supports_f64_audio remain accepted and are OR'd into effective_capabilities().

◆ output_buses

std::vector<BusInfo> pulp::format::PluginDescriptor::output_buses = {{"Main Out", 2, false}}

◆ produces_midi

bool pulp::format::PluginDescriptor::produces_midi = false

true if plugin sends MIDI output

◆ supported_bus_layouts

std::vector<BusLayoutConfiguration> pulp::format::PluginDescriptor::supported_bus_layouts

Explicit host-selectable layouts.

Appended at the true end of the descriptor so every pre-existing positional aggregate initializer, including one that supplies supports_f64_audio, retains its meaning. Empty preserves legacy flexible mono/stereo negotiation.

◆ supports_f64_audio

bool pulp::format::PluginDescriptor::supports_f64_audio = false

Opt in to native double-precision audio processing.

Appended after the original descriptor fields so positional aggregate initializers keep their existing meaning. Existing plugins leave this false and use the adapter-boundary f64->f32 compatibility path when a host supplies 64-bit buffers. Plugins that set it should override process_f64() for their real double-precision DSP; the default still converts through the f32 process() path so an early opt-in remains safe.

◆ supports_mpe

bool pulp::format::PluginDescriptor::supports_mpe = false

Opt in to MPE (MIDI Polyphonic Expression).

When true, format adapters that recognize MPE will run the inbound MIDI stream through an MpeVoiceTracker, build an MpeBuffer for the block, and make it available via Processor::mpe_input() during process(). The standard process() signature is unchanged; plugins that don't set this flag see no MPE-specific behavior.

◆ supports_ump

bool pulp::format::PluginDescriptor::supports_ump = false

Opt in to the native MIDI 2.0 UMP sidecar.

When true, format adapters that recognize UMP provide a UmpBuffer of full-resolution channel-voice packets (16-bit velocity, per-note pitch bend, per-note CCs) through Processor::ump_input() during process(). Adapters without native UMP transport synthesise the buffer by converting the inbound MIDI 1.0 stream. supports_mpe and supports_ump are independent and can both be set.

◆ tail_samples

int pulp::format::PluginDescriptor::tail_samples = 0

Tail time in samples (0 = no tail, -1 = infinite).

Used by hosts to flush reverb/delay tails after playback stops.

◆ vendor_email

std::string pulp::format::PluginDescriptor::vendor_email

◆ vendor_url

std::string pulp::format::PluginDescriptor::vendor_url

Optional contact info — appended here so existing positional aggregate initializers keep working.

Surfaced by VST3 PFactoryInfo::url/email, CLAP manufacturer_url/manufacturer_email, AU kAudioUnitProperty_URL. Leave empty to skip.

◆ version

std::string pulp::format::PluginDescriptor::version

Semantic version string, e.g. "1.0.0".

◆ voice_count

std::uint32_t pulp::format::PluginDescriptor::voice_count = 0

Number of simultaneously sounding voices this plugin allocates.

0 (the default) means "not voice-based": the plugin does not publish a voice count and a host applies its own default. Declare the real count for a polyphonic instrument so a host can size its own voice pool to match and route per-voice modulation; declare 1 for a monophonic one, which tells a host to use global modulation mapping instead. A host that is told nothing assumes mono, so leaving this at 0 silently downgrades per-voice modulation on a polyphonic instrument.

Appended after supported_bus_layouts to keep every pre-existing positional aggregate initializer's meaning.


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