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. | |
Plugin metadata — declared once, immutable.
Every Processor subclass returns a PluginDescriptor from descriptor(). Format adapters use this to register the plugin with the host.
|
inline |
Channel count of the first (main) input bus.
|
inline |
Channel count of the first (main) output bus.
|
inline |
| bool pulp::format::PluginDescriptor::accepts_midi = false |
true if plugin receives MIDI input
| std::string pulp::format::PluginDescriptor::bundle_id |
| PluginCategory pulp::format::PluginDescriptor::category = PluginCategory::Effect |
| 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).
| 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.
| std::string pulp::format::PluginDescriptor::manufacturer |
| std::string pulp::format::PluginDescriptor::name |
| 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().
| std::vector<BusInfo> pulp::format::PluginDescriptor::output_buses = {{"Main Out", 2, false}} |
| bool pulp::format::PluginDescriptor::produces_midi = false |
true if plugin sends MIDI output
| 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.
| 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.
| 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.
| 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.
| 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.
| std::string pulp::format::PluginDescriptor::vendor_email |
| 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.
| std::string pulp::format::PluginDescriptor::version |
Semantic version string, e.g. "1.0.0".
| 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.