|
| struct | ContentInstallLimits |
| | Caps on what an archive may inflate to. More...
|
| class | ContentSizeBudget |
| | Running admission of archive entries against a ContentInstallLimits. More...
|
| struct | ContentPackInfo |
| | Metadata for one installed content pack. More...
|
| struct | ContentInstallPolicy |
| struct | ContentInstallPreview |
| struct | ContentInstallResult |
| class | ContentRegistry |
| | Installed content lookup. More...
|
| class | Binding |
| | Reactive binding between a UI widget and a StateStore parameter. More...
|
| class | CachedProperty |
| | Cached accessor for a StateTree property. More...
|
| struct | ContentCapabilityManifest |
| | Capabilities a plugin declares before consuming installed content packs. More...
|
| struct | EditAction |
| | Base class for undoable actions. More...
|
| class | LambdaEdit |
| | Convenience action using lambdas. More...
|
| class | EditHistory |
| | Global undo/redo history for the application. More...
|
| struct | ExternalBindingConfig |
| | Configuration for an ExternalBinding: the getter/setter that back a UI control whose value is NOT a StateStore parameter — e.g. More...
|
| class | ExternalBinding |
| | Reactive binding between a UI widget and an arbitrary external value source, interface-compatible with state::Binding but backed by getter/setter lambdas instead of a StateStore parameter. More...
|
| class | ListenerToken |
| | RAII handle for a registered parameter-change listener. More...
|
| struct | MidiMapScale |
| | Normalized [0, 1] output window a CC sweep is mapped onto. More...
|
| class | MidiParameterMap |
| struct | ModulationSource |
| struct | ModulationTarget |
| struct | ModulationLane |
| struct | ModulationLaneValidation |
| struct | ParamSnapshotEntry |
| class | ParamCursor |
| struct | ParamOrderingViolation |
| | One way a new descriptor version broke a previously-shipped parameter's host-facing identity. More...
|
| struct | BaseOffsetValue |
| | Canonical automation value shared by graph, Processor, and timeline delivery. More...
|
| struct | ParamRange |
| | Defines the numeric range of a parameter, including normalization. More...
|
| struct | SkewedRange |
| | Skew-aware normalized range with optional symmetric center. More...
|
| struct | ParamInfo |
| | Immutable parameter metadata, registered once at plugin initialization. More...
|
| class | ParamValue |
| | Thread-safe atomic parameter value for lock-free audio/UI communication. More...
|
| class | ParameterEdit |
| struct | ParameterEvent |
| struct | ModulationEvent |
| | Timestamped host modulation event. More...
|
| class | ModulationEventQueue |
| struct | ParameterEventQueueTelemetry |
| class | ParameterEventQueue |
| struct | PresetInfo |
| | Metadata for a single preset file. More...
|
| struct | ParamSetting |
| | One parameter value read from a preset file. More...
|
| class | PresetManager |
| | Built-in preset manager for Pulp plugins. More...
|
| class | PropertiesFile |
| | JSON-backed persistent settings file. More...
|
| class | ApplicationProperties |
| | Application-level properties with platform-standard paths. More...
|
| struct | StepCell |
| | One step in one lane. More...
|
| struct | PlayheadState |
| | Volatile, high-rate transport/playhead state. More...
|
| struct | SequencerConfig |
| | Lanes/Steps/Patterns are MAXIMUM CAPACITY (active extent lives in the Snapshot). More...
|
| struct | DirtyRegion |
| struct | SetCellEditT |
| | SetCell carries a full cell by value, so it is templated on the Config's cell type. More...
|
| struct | ClearEdit |
| struct | RandomizeLaneEdit |
| struct | SetPatternLengthEdit |
| struct | SwitchPatternEdit |
| struct | StepEditCommandT |
| struct | PatternStateT |
| struct | SnapshotT |
| | The full non-param state, published for bulk replacement / resync only. More...
|
| struct | StepRangeAppliedT |
| | The exact cells the engine wrote for a step-range edit. More...
|
| struct | AppliedEditT |
| class | SequencerStateChannelT |
| | Ownership: the engine (audio) thread is the single reader of the command queue and the single writer of the applied queue / snapshot / playhead. More...
|
| class | StateMigrationRegistry |
| | Offline migration support for serialized StateStore payloads. More...
|
| struct | PropertyArrayValue |
| struct | PropertyObjectValue |
| struct | PropertyArray |
| struct | PropertyObject |
| struct | TreeEditError |
| | Error value for a refused StateTree edit. More...
|
| class | StateTree |
| | Reactive tree node — each node has a type name, properties, and children. More...
|
| class | ObservableValue |
| | Observable value — wraps a single value with change notification. More...
|
| struct | SyncDelta |
| | A single change to synchronize. More...
|
| class | StateTreeSynchroniser |
| | Encodes StateTree changes as deltas for transmission. More...
|
| struct | ParamGroup |
| | Named parameter group for hierarchical UI organization. More...
|
| struct | RtListenerQueueTelemetry |
| | Snapshot of StateStore's real-time listener queue. More...
|
| struct | ParameterGestureApplyResult |
| class | ParameterFeedbackBaseline |
| | Opaque exact identity captured when asynchronous work is ordered against a parameter. More...
|
| struct | ConditionalParameterApplyResult |
| class | ParamReader |
| | Pre-resolved audio-thread read handle for one parameter's base value. More...
|
| class | StateStore |
| | Centralized parameter storage with lock-free value access. More...
|
| struct | UndoAction |
| | A single undoable action with undo and redo functions. More...
|
| struct | UndoTransaction |
| | A group of actions that undo/redo together as one step. More...
|
| class | UndoManager |
| | Manages undo/redo history with configurable depth. More...
|
|
| using | ModulationSourceId = uint32_t |
| using | ParamID = uint32_t |
| | Unique parameter identifier, stable across plugin versions.
|
| using | ParamChangeCallback = std::function<void(ParamID id, float new_value)> |
| | Callback signature for parameter change notifications.
|
| using | ContentPresetSource |
| | Lists installed content-pack presets for a plugin's content manifest.
|
| using | Epoch = std::uint64_t |
| using | EngineSequence = std::uint64_t |
| using | ClientSequence = std::uint64_t |
| using | EditTransactionId = std::uint32_t |
| using | ReferenceSequencerConfig |
| | The canonical way to name the transport types is via the channel's member typedefs (e.g.
|
| using | SequencerStateChannel = SequencerStateChannelT<ReferenceSequencerConfig> |
| using | Snapshot = SnapshotT<ReferenceSequencerConfig> |
| using | PatternState = PatternStateT<ReferenceSequencerConfig> |
| using | StepEditCommand = StepEditCommandT<ReferenceSequencerConfig> |
| using | AppliedEdit = AppliedEditT<ReferenceSequencerConfig> |
| using | StepRangeApplied = StepRangeAppliedT<ReferenceSequencerConfig> |
| using | SetCellEdit = SetCellEditT<ReferenceSequencerConfig> |
| using | PropertyValue |
| | Property value — can hold scalar values plus immutable recursive arrays and string-keyed objects.
|
| using | TreeListener |
| | Listener callback — receives the tree node, property name, old value, new value.
|
| using | ChildListener = std::function<void(StateTree& parent, StateTree& child, int index)> |
| | Child listener — receives parent, child, index.
|
| using | ChildMovedListener |
| | Reorder listener — a child moved within the same parent from old_index to new_index (both positions at the time of the edit).
|
| using | ParentChangedListener = std::function<void(StateTree& node, StateTree* old_parent)> |
| | Parent-changed listener — node's parent pointer changed.
|
| using | AncestorChangedListener = std::function<void(StateTree& node)> |
| | Ancestor-changed listener — some ancestor link above node changed (the node itself or one of its ancestors was added, removed or moved).
|
| using | TreeEditResult = runtime::Result<std::monostate, TreeEditError> |
| | Result of a checked StateTree edit: success carries no value.
|
| using | PropertyValidator |
| | Property validator used by checked edits.
|
|
| enum class | ContentReloadPolicy { hot_reload
, manual_rescan
, restart_required
} |
| enum class | ListenerThread { Main
, Audio
} |
| | Where a parameter-change listener runs. More...
|
| enum class | ListenerRestoreBehavior { Silent
, Reconcile
} |
| | Whether a Main listener participates in the UI refresh that follows a successful state restore. More...
|
| enum class | ModulationScope : uint8_t { Global
, Voice
, Note
, GraphNode
} |
| enum class | ModulationRate : uint8_t { Control
, Audio
} |
| enum class | ModulationMixMode : uint8_t { Add
, Replace
, Multiply
} |
| enum class | ModulationLaneRejectReason : uint8_t {
None
, InvalidSource
, InvalidTarget
, TargetNotWritable
,
TargetNotModulatable
, ScopeMismatch
, AudioSourceRequiresAudioTarget
} |
| enum class | BaseOffsetRefusal : std::uint8_t { None
, NonFiniteBase
, NonFiniteOffset
, OutOfRange
} |
| enum class | ParamRate { ControlRate
, AudioRate
} |
| | Parameter update-rate classification. More...
|
| enum class | ParamKind { Continuous
, Integer
, Toggle
, Enum
} |
| | Author-declared parameter semantics. More...
|
| enum class | ParamDesignation { None
, Bypass
, Reset
} |
| | Declared semantic role of a parameter. More...
|
| enum class | DirtyKind : std::uint8_t {
None
, FullSnapshot
, Pattern
, Lane
,
StepRange
, Cell
} |
| enum class | StepEditKind : std::uint8_t {
SetCell
, Clear
, RandomizeLane
, SetPatternLength
,
SwitchPattern
} |
| enum class | ClearScope : std::uint8_t { Cell
, Lane
, Pattern
, All
} |
| enum class | GesturePhase : std::uint8_t {
None
, Begin
, Update
, End
,
Cancel
} |
| | Host-undo gesture bracketing hint. More...
|
| enum class | AppliedEditKind : std::uint8_t { StepRangeChanged
, PatternLengthChanged
, ActivePatternChanged
, CommandRejected
} |
| enum class | ListenerDelivery { kCoalesced
, kImmediate
} |
| | When a listener is told about edits made inside a StateTree::Transaction. More...
|
| enum class | TreeEditErrorCode {
kInvalidName
, kMissingProperty
, kNullChild
, kIndexOutOfRange
,
kWouldCreateCycle
, kTransactionConflict
, kRejectedByValidator
, kNotInTransaction
,
kReentrantTransaction
, kTransactionClosed
} |
| | Why a checked StateTree edit was refused. More...
|
| enum class | SyncDeltaType : uint8_t {
PropertySet = 1
, PropertyRemove = 2
, ChildAdd = 3
, ChildRemove = 4
,
ChildMove = 5
} |
| | Delta types for tree synchronization. More...
|
| enum class | ParameterGestureApplyStatus {
Applied
, GenerationConflict
, InvalidParameter
, ConcurrentMutation
,
CallbackFailureRolledBack
, CallbackFailureUnknown
} |
| | Outcome of a generation-bound complete parameter gesture. More...
|
| enum class | ConditionalParameterApplyStatus { Applied
, Conflict
, InvalidParameter
} |
|
| ContentInstallLimits | clamp_content_install_bytes (ContentInstallLimits limits, std::uint64_t max_bytes) |
| | Lower both byte caps to at most max_bytes (a user-facing --max-pack-bytes value).
|
| ContentPresetSource | content_registry_preset_source () |
| | A PresetManager content-preset source backed by this registry: it lists the installed packs' presets under data_root, or under platform_data_root() when data_root is empty.
|
| ContentInstallPreview | preview_content_pack_install (const std::filesystem::path &input, const ContentCapabilityManifest &plugin, const std::filesystem::path &data_root=ContentRegistry::platform_data_root(), const ContentInstallLimits &limits={}) |
| | Validate a local content-pack directory or .pulpcontent archive against a trusted plugin runtime manifest without copying any files.
|
| ContentInstallResult | install_content_pack (const std::filesystem::path &input, const ContentCapabilityManifest &plugin, const std::filesystem::path &data_root=ContentRegistry::platform_data_root(), bool approved=false, const ContentInstallLimits &limits={}) |
| | Install a previously previewable data-only content pack.
|
| const char * | to_string (ContentReloadPolicy policy) |
| std::vector< Binding > | create_bindings (StateStore &store) |
| | Create a Binding for every parameter registered in a store.
|
| bool | property_is_absent (const PropertyValue &val) |
| std::optional< ContentCapabilityManifest > | parse_content_capability_manifest (std::string_view json, std::string *error=nullptr) |
| | Parse the plugin-side content capability manifest embedded in a built plugin/app bundle.
|
| std::optional< ContentCapabilityManifest > | load_content_capability_manifest (const std::filesystem::path &path, std::string *error=nullptr) |
| | Load and parse a plugin content capability manifest from disk.
|
| std::string | content_capability_manifest_to_json (const ContentCapabilityManifest &manifest) |
| | Serialize a capability manifest for embedding in plugin bundle resources.
|
| constexpr ModulationRate | modulation_rate_for (ParamRate rate) noexcept |
| constexpr bool | modulation_scopes_compatible (ModulationScope source, ModulationScope target) noexcept |
| ModulationLaneValidation | validate_modulation_lane (const ModulationLane &lane) noexcept |
| std::string | param_display_text (const ParamInfo &info, float value) |
| | Display text for value in info's own domain.
|
| bool | param_parse_display_text (const ParamInfo &info, const std::string &text, float &out_value) |
| | Parse display text back into info's own domain.
|
| choc::value::Value | param_metadata_to_value (const ParamInfo &info) |
| | A parameter's STATIC shape — everything that does not move when the value does.
|
| choc::value::Value | param_snapshot_to_value (const StateStore &store, const ParamInfo &info) |
| | A parameter's LIVE snapshot, in the inspector's established wire shape.
|
| choc::value::Value | param_catalog_snapshot_to_value (const StateStore &store, const ParamInfo &info) |
| | The canonical Product A catalog + live-value shape.
|
| std::vector< ParamOrderingViolation > | diff_param_ordering (std::span< const ParamInfo > old_params, std::span< const ParamInfo > new_params) |
| | Diff two parameter descriptors (old vs new) and return every ordering / identity violation, in old-version index order.
|
| std::vector< ParamOrderingViolation > | diff_param_ordering (const StateStore &old_store, const StateStore &new_store) |
| | StateStore convenience overload.
|
| bool | param_ordering_stable (std::span< const ParamInfo > old_params, std::span< const ParamInfo > new_params) |
| | True iff new_params is an append-only, identity-preserving evolution of old_params (no re-order, re-ID, or removal of a shipped parameter).
|
| bool | param_ordering_stable (const StateStore &old_store, const StateStore &new_store) |
| | StateStore convenience overload.
|
| BaseOffsetRefusal | validate_base_offset (BaseOffsetValue value, float minimum, float maximum) noexcept |
| bool | is_discrete_param (const ParamInfo &info) |
| float | value_from_host_normalized (const ParamInfo &info, double normalized) |
| | The plain value a host means by a normalized write.
|
| double | host_normalized_from_value (const ParamInfo &info, float value) |
| | The normalized value to report to a host for value: the inverse of value_from_host_normalized(), in double precision for a linear range, so a value the host reads back (a default, an output parameter) maps to exactly the same plain value when the host writes it again.
|
| bool | is_boolean_param (const ParamInfo &info) |
| uint32_t | param_value_count (const ParamInfo &info) |
| float | constrain_param_value (const ParamInfo &info, float value) |
| std::optional< float > | param_value_for_label (const ParamInfo &info, std::string_view text) |
| bool | is_bypass_param (const ParamInfo &info) |
| | Decide whether info is a bypass control.
|
| bool | is_modulatable_param (const ParamInfo &info) |
| | Decide whether a host may apply a modulation offset to info.
|
| bool | is_hidden_param (const ParamInfo &info) |
| | Whether the host should omit this parameter from its generic parameter list and automation lanes.
|
| bool | is_read_only_param (const ParamInfo &info) |
| | Whether the host may read this parameter but must not write it.
|
| bool | is_automatable_param (const ParamInfo &info) |
| | Whether the host may record and play back automation for this parameter.
|
| template<typename It, typename Less> |
| void | stable_sort_in_place (It first, It last, Less less) |
| | Sorts [first, last) by less, keeping equal elements in their original order, without allocating.
|
| template<typename It, typename Key, typename Value, typename Count> |
| bool | stable_counting_sort (It first, It last, Key key, std::span< Value > scratch, std::span< Count > counts) |
| | Stable counting sort of [first, last) on a small non-negative integer key, O(n + counts.size()) and allocation-free, using caller-lent storage (typically sized once at prepare time).
|
| std::optional< uint32_t > | serialized_state_version (std::span< const uint8_t > source) |
| bool | operator== (const PropertyArrayValue &a, const PropertyArrayValue &b) |
| bool | operator!= (const PropertyArrayValue &a, const PropertyArrayValue &b) |
| bool | operator== (const PropertyObjectValue &a, const PropertyObjectValue &b) |
| bool | operator!= (const PropertyObjectValue &a, const PropertyObjectValue &b) |
| bool | operator== (const PropertyArray &a, const PropertyArray &b) |
| bool | operator!= (const PropertyArray &a, const PropertyArray &b) |
| bool | operator== (const PropertyObject &a, const PropertyObject &b) |
| bool | operator!= (const PropertyObject &a, const PropertyObject &b) |
| PropertyValue | make_property_array (std::vector< PropertyValue > values) |
| PropertyValue | make_property_array (std::initializer_list< PropertyValue > values) |
| PropertyValue | make_property_object (std::map< std::string, PropertyValue, std::less<> > values) |
| PropertyValue | make_property_object (std::initializer_list< PropertyObject::Member > values) |
| const PropertyArray * | get_property_array (const PropertyValue &value) |
| const PropertyObject * | get_property_object (const PropertyValue &value) |
| template<class Config> |
| std::optional< AppliedEditT< Config > > | apply_step_edit (SnapshotT< Config > &snapshot, const StepEditCommandT< Config > &cmd, EngineSequence &engine_seq) |
| | Reference reducer for the StepCell grid. Returns nullopt only for a no-op.
|
| template<class Config, class Reducer> |
| void | drain_and_apply (SequencerStateChannelT< Config > &channel, SnapshotT< Config > &snapshot, Epoch &epoch, EngineSequence &engine_seq, Reducer &&reduce) |
| | Drain the command FIFO and apply each command with reduce, publishing the echoes.
|
| template<class Config> |
| void | drain_and_apply (SequencerStateChannelT< Config > &channel, SnapshotT< Config > &snapshot, Epoch &epoch, EngineSequence &engine_seq) |
| | Convenience overload using the reference StepCell reducer.
|
SequencerStateChannel is the audio-safe transport for a plugin's structured NON-parameter state: the bulk, observable state a step sequencer / mod-matrix / pattern engine holds outside its automatable parameter set (e.g.
The audio-side edit logic for a SequencerStateChannel, lifted out of any one engine so a producer never hand-rolls the protocol.
a 12-lane x 32-step x 32-pattern grid, ~12k step records). Parameters keep flowing through StateStore / the host; this channel carries the rest.
It is a THIN, typed bundle of the three lock-free primitives, with the ownership split that keeps a large grid cheap to edit and cheap to render:
- UI -> audio: ordered edit commands SpscQueue<Command>
- audio -> UI: ordered applied echoes SpscQueue<AppliedEdit>
- audio -> UI: bulk/versioned state TripleBuffer<Snapshot>
- audio -> UI: high-rate playhead SeqLock<Playhead>
The authoritative writer (the "engine") OWNS the state; the UI never mutates shared state — it submits commands and replays the engine's applied echoes onto its own render copy, so both sides converge without either diffing the whole grid every frame. Each applied echo names the exact DirtyRegion it touched, so the UI invalidates only what changed. A full Snapshot is only published for initial load, preset / bulk replacement, and overflow recovery — never per cell edit (it is a large copy).
NEUTRAL PRODUCER CONTRACT: the authoritative writer is any single thread. It need NOT be a framework processor and this header includes nothing from the format or state-store layers — only runtime primitives. A non-framework engine can own the channel and drive it directly (see step_edit_reducer.hpp for the reference apply/drain logic and the docs page docs/reference/sequencer-state-channel.md for the full contract).
Because TripleBuffer is latest-value and coalesces intermediate writes, a Snapshot must NEVER be used as an incremental change descriptor: two cell edits published back-to-back would collapse to one snapshot and lose the first cell's dirty region. Incremental "what changed" flows only on the ordered AppliedEdit echo stream; the Snapshot is a coherent resync point.
This channel is pure transport: it invents no epochs or sequence numbers. The engine controls Snapshot::epoch and *_sequence values; the channel moves the bytes and exposes the resync-epoch signal + FIFO telemetry.
DIMENSIONS ARE COMPILE-TIME (SequencerConfig), by design: the Snapshot is a nested std::array and therefore trivially copyable, which is the property that lets TripleBuffer/SpscQueue publish it lock-free and allocation-free on the audio thread. Config dims are MAXIMUM CAPACITY; active extent is explicit in the Snapshot (PatternState::length, active_lane_count, active_pattern_count).
- apply_step_edit<Config>: the reference reducer. Mutates the authoritative Snapshot for one command and returns the exact AppliedEdit echo the UI replays (so the UI never diffs the grid or re-runs an engine algorithm). Defined for the reference StepCell; a custom cell type supplies its own reducer with the same signature.
- drain_and_apply<Config, Reducer>: drains the command FIFO, applies each command via the reducer, publishes each echo, and OWNS the overflow recovery — on a full applied-FIFO it republishes the authoritative Snapshot and raises the resync bar, in the order that avoids live-locking the UI.
NEUTRAL: this header includes only sequencer_state_channel.hpp (runtime primitives) — nothing from <pulp/format/...>. A non-Pulp engine can use it.