130 double sample_rate,
int max_block_size);
135 void prepare(
double sample_rate,
int block_size);
153 int num_frames)
const;
166 store_.set_value(
id, value);
167 tick_pending_ =
true;
196 if (!processor_)
return;
197 if (!tick_pending_ && !processor_->non_realtime_tick_pending())
return;
198 tick_pending_ =
false;
199 processor_->on_non_realtime_tick();
206 return param_epoch_.load(std::memory_order_relaxed);
223 return processor_ ? processor_->latency_samples() : 0;
226 bool ready()
const {
return processor_ !=
nullptr; }
229 static constexpr std::size_t kMidiEventCapacity = 256;
230 static constexpr std::size_t kSysexCapacity = 16;
231 static constexpr std::size_t kSysexPayloadCapacity = 512;
238 std::unique_ptr<Processor> processor_;
240 std::atomic<uint32_t> param_epoch_{0};
243 std::vector<float> output_planar_;
244 std::vector<float*> output_ptrs_;
250 bool tick_pending_ =
false;
252 int num_channels_ = 2;
253 int block_size_ = 128;
273 void prepare(
double sample_rate,
int block_size);
292 double position_samples,
int tsig_num,
int tsig_den)
noexcept;
303 void process(
const float*
const* inputs,
float*
const* outputs,
304 int num_channels,
int num_frames);
378 std::unique_ptr<Processor> processor_;
383 std::atomic<uint32_t> param_epoch_{0};
393 static constexpr std::size_t kMidiEventCapacity = 256;
394 static constexpr std::size_t kSysexCapacity = 16;
395 static constexpr std::size_t kSysexPayloadCapacity = 512;
405 std::vector<uint8_t> midi_out_scratch_;
406 std::size_t midi_out_bytes_ = 0;
408 double sample_rate_ = 48000.0;
409 int num_channels_ = 2;
410 int block_size_ = 128;
414 bool reset_pending_ =
false;
419 bool tick_pending_ =
false;
420 void service_non_realtime();
426 WamTransport transport_;
464 void prepare(
double sample_rate,
int block_size);
475 double position_samples,
int tsig_num,
int tsig_den)
noexcept;
481 void process(
const float*
const* inputs,
float*
const* outputs,
482 int num_channels,
int num_frames);
520 std::vector<std::unique_ptr<WamStage>> stages_;
529 std::vector<uint8_t> midi_out_scratch_;
530 std::size_t midi_out_bytes_ = 0;
532 static constexpr std::size_t kMidiEventCapacity = 256;
533 static constexpr std::size_t kSysexCapacity = 16;
534 static constexpr std::size_t kSysexPayloadCapacity = 512;
536 double sample_rate_ = 48000.0;
537 int num_channels_ = 2;
538 int block_size_ = 128;
539 bool reset_pending_ =
false;
Non-owning view over multi-channel audio sample data.
Definition buffer.hpp:30
Collection of timestamped MIDI events within a single audio buffer period.
Definition buffer.hpp:31
RAII handle for a registered parameter-change listener.
Definition listener_token.hpp:47
Centralized parameter storage with lock-free value access.
Definition store.hpp:164
uint32_t ParamID
Unique parameter identifier, stable across plugin versions.
Definition parameter.hpp:55
Process context — passed every audio callback with transport state.
Definition process_context.hpp:89