59 bool valid() const noexcept {
return buffer_ !=
nullptr && snapshot_.valid; }
68 std::uint64_t hold_id) noexcept;
72 std::uint64_t hold_id_ = 0;
83 std::uint64_t max_bytes = 0);
90 return frames_discarded_while_held_.load(std::memory_order_relaxed);
113 BufferView<
float> destination) const noexcept;
116 BufferView<
float> destination) const noexcept;
123 BufferView<
float> destination) const noexcept;
124 [[deprecated(
"Use materialize_quiescent(); this path requires paused/external synchronization")]]
127 BufferView<
float> destination) const noexcept;
130 std::uint64_t frames,
137 std::uint64_t total_written = 0;
138 std::uint64_t write_pos = 0;
139 std::uint64_t generation = 0;
142 void clear_unprepared() noexcept;
143 void advance_generation() noexcept;
144 std::uint64_t next_hold_id() noexcept;
146 std::uint64_t hold_id) noexcept;
148 template<typename SampleType>
149 void append_impl(
BufferView<SampleType> source,
std::uint64_t frames) noexcept;
152 CursorState
state) const noexcept;
153 float* channel_storage(
std::uint32_t channel) noexcept;
154 const
float* channel_storage(
std::uint32_t channel) const noexcept;
156 std::vector<
float> storage_;
157 std::uint32_t num_channels_ = 0;
158 std::uint64_t capacity_frames_ = 0;
159 std::uint64_t write_pos_ = 0;
160 std::uint64_t total_written_ = 0;
161 std::uint64_t generation_ = 1;
163 std::uint64_t active_hold_id_ = 0;
164 std::uint64_t next_hold_id_ = 1;
165 std::atomic<
std::uint64_t> frames_discarded_while_held_{0};
166 std::atomic_bool hold_active_{
false};
167 runtime::SeqLock<CursorState> state_;
Non-owning view over multi-channel audio sample data.
Definition buffer.hpp:30
Definition rolling_audio_capture_buffer.hpp:75
bool hold_active() const noexcept
friend class RollingAudioCaptureHold
Definition rolling_audio_capture_buffer.hpp:134
std::uint64_t allocated_bytes() const noexcept
RollingAudioCaptureSnapshot snapshot_last(std::uint64_t frames) const noexcept
std::uint64_t capacity_frames() const noexcept
Definition rolling_audio_capture_buffer.hpp:87
void append(BufferView< const float > source, std::uint64_t frames) noexcept
void append(BufferView< float > source, std::uint64_t frames) noexcept
static std::uint64_t estimate_bytes(std::uint32_t num_channels, std::uint64_t frames, std::uint64_t bytes_per_sample=sizeof(float)) noexcept
RollingAudioCaptureMaterializeResult materialize_quiescent(const RollingAudioCaptureSnapshot &snapshot, BufferView< float > destination) const noexcept
RollingAudioCaptureMaterializeResult materialize(const RollingAudioCaptureSnapshot &snapshot, BufferView< float > destination) const noexcept
RollingAudioCapturePrepareResult prepare_seconds(std::uint32_t num_channels, double sample_rate, double seconds, std::uint64_t max_bytes=0)
std::uint32_t num_channels() const noexcept
Definition rolling_audio_capture_buffer.hpp:86
RollingAudioCaptureSnapshot begin_hold_last(std::uint64_t frames) noexcept
RollingAudioCaptureBuffer()=default
RollingAudioCaptureMaterializeResult materialize_held(const RollingAudioCaptureHold &hold, BufferView< float > destination) const noexcept
RollingAudioCaptureHold hold_last(std::uint64_t frames) noexcept
std::uint64_t frames_discarded_while_held() const noexcept
Definition rolling_audio_capture_buffer.hpp:89
bool prepare(const RollingAudioCaptureBufferConfig &config)
~RollingAudioCaptureHold() noexcept
RollingAudioCaptureHold(const RollingAudioCaptureHold &)=delete
bool valid() const noexcept
Definition rolling_audio_capture_buffer.hpp:59
RollingAudioCaptureHold()=default
RollingAudioCaptureHold(RollingAudioCaptureHold &&other) noexcept
RollingAudioCaptureHold & operator=(RollingAudioCaptureHold &&other) noexcept
const RollingAudioCaptureSnapshot & snapshot() const noexcept
Definition rolling_audio_capture_buffer.hpp:60
friend class RollingAudioCaptureBuffer
Definition rolling_audio_capture_buffer.hpp:64
RollingAudioCaptureHold & operator=(const RollingAudioCaptureHold &)=delete
Definition analyzer_provider.hpp:12
RollingAudioCaptureMaterializeStatus
Definition rolling_audio_capture_buffer.hpp:37
@ Overwritten
Definition rolling_audio_capture_buffer.hpp:40
@ DestinationTooSmall
Definition rolling_audio_capture_buffer.hpp:41
@ InvalidSnapshot
Definition rolling_audio_capture_buffer.hpp:39
@ Ok
Definition loop_types.hpp:34
constexpr std::size_t bytes_per_sample(SampleFormat format) noexcept
Bytes per sample for format. Returns 0 for unknown values.
Definition sample_converter.hpp:61
SequencerStateChannel is the audio-safe transport for a plugin's structured NON-parameter state: the ...
Definition audio_device_manager.hpp:48
Lock-free sequence-lock for coherent multi-field snapshots.
Definition rolling_audio_capture_buffer.hpp:14
std::uint32_t num_channels
Definition rolling_audio_capture_buffer.hpp:15
std::uint64_t max_frames
Definition rolling_audio_capture_buffer.hpp:16
std::uint64_t bytes_per_sample
Definition rolling_audio_capture_buffer.hpp:17
Definition rolling_audio_capture_buffer.hpp:44
std::uint64_t frames_copied
Definition rolling_audio_capture_buffer.hpp:47
RollingAudioCaptureMaterializeStatus status
Definition rolling_audio_capture_buffer.hpp:45
Definition rolling_audio_capture_buffer.hpp:20
std::uint64_t allocated_bytes
Definition rolling_audio_capture_buffer.hpp:24
std::uint64_t requested_frames
Definition rolling_audio_capture_buffer.hpp:22
std::uint64_t allocated_frames
Definition rolling_audio_capture_buffer.hpp:23
bool ok
Definition rolling_audio_capture_buffer.hpp:21
Definition rolling_audio_capture_buffer.hpp:27
std::uint64_t start_frame
Definition rolling_audio_capture_buffer.hpp:32
std::uint64_t capacity_frames
Definition rolling_audio_capture_buffer.hpp:31
std::uint64_t generation
Definition rolling_audio_capture_buffer.hpp:29
std::uint64_t end_frame
Definition rolling_audio_capture_buffer.hpp:34
bool valid
Definition rolling_audio_capture_buffer.hpp:28
std::uint64_t frame_count
Definition rolling_audio_capture_buffer.hpp:33
std::uint32_t num_channels
Definition rolling_audio_capture_buffer.hpp:30