Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
generated_event_source.hpp File Reference

Bounded handoff for event batches produced ahead of the audio playhead. More...

#include <pulp/audio/rt_safety_contract.hpp>
#include <pulp/midi/ump.hpp>
#include <pulp/playback/clip_launch.hpp>
#include <pulp/runtime/seqlock.hpp>
#include <pulp/timebase/tick.hpp>
#include <array>
#include <atomic>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <span>
#include <vector>

Go to the source code of this file.

Classes

struct  pulp::playback::GeneratedEventSpan
 A half-open span on the transport's non-looping clock. More...
struct  pulp::playback::GeneratedEvent
 One value-owned generated event. More...
struct  pulp::playback::GeneratedEventDegradationLadder
struct  pulp::playback::GeneratedEventSourceConfig
struct  pulp::playback::GeneratedEventStageResult
struct  pulp::playback::GeneratedEventCommitResult
struct  pulp::playback::GeneratedEventPullResult
class  pulp::playback::GeneratedEventSource
struct  pulp::playback::GeneratedEventSource::Stats

Namespaces

namespace  pulp
namespace  pulp::runtime
namespace  pulp::playback

Typedefs

using pulp::playback::GeneratedEventCommitGeneration = std::uint64_t
using pulp::playback::GeneratedEventRevision = std::uint64_t

Enumerations

enum class  pulp::playback::GeneratedEventDegradation : std::uint8_t { pulp::playback::None , pulp::playback::RepeatLastCommitted , pulp::playback::UseSkeleton , pulp::playback::Silence }
enum class  pulp::playback::GeneratedEventStageCode : std::uint8_t {
  pulp::playback::Staged , pulp::playback::Revised , pulp::playback::NotPrepared , pulp::playback::EpochNotStarted ,
  pulp::playback::WrongEpoch , pulp::playback::InvalidSpan , pulp::playback::NotQuantized , pulp::playback::InvalidRevision ,
  pulp::playback::StaleRevision , pulp::playback::FrozenSpan , pulp::playback::OutOfOrder , pulp::playback::OverlappingSpan ,
  pulp::playback::InvalidEvent , pulp::playback::EventCapacityExceeded , pulp::playback::StagingCapacityExceeded
}
enum class  pulp::playback::GeneratedEventCommitCode : std::uint8_t {
  pulp::playback::Committed , pulp::playback::NotPrepared , pulp::playback::EpochNotStarted , pulp::playback::WrongEpoch ,
  pulp::playback::InvalidBoundary , pulp::playback::InvalidGeneration , pulp::playback::StaleGeneration , pulp::playback::CommitRingFull
}
enum class  pulp::playback::GeneratedEventPullCode : std::uint8_t { pulp::playback::Ready , pulp::playback::Starved , pulp::playback::OutputOverflow , pulp::playback::InvalidRequest }

Detailed Description

Bounded handoff for event batches produced ahead of the audio playhead.

The producer may revise private staged batches until a quantized commit freezes their span. Commit copies complete batches into a separate SPSC ring, so the audio consumer never observes or races a revision. Missing batches advance as event silence, accumulate exact tick lag, and request an active-note flush so a lost note-off cannot become a stuck note.

Thread model:

  • prepare()/release() — quiescent control thread; allocates.
  • stage()/commit_through() — one producer thread.
  • pull() — one audio thread; allocation-free, lock-free and wait-free.
  • record_deadline_*()/stats() — producer/control telemetry.