23 std::unique_ptr<render::GpuCompute>)
noexcept;
69 std::vector<std::vector<float>> irs);
78 uint32_t n)
noexcept override;
100 uint32_t
num_ir()
const {
return num_ir_; }
107 const std::vector<float>&
pan_l()
const {
return pan_l_; }
108 const std::vector<float>&
pan_r()
const {
return pan_r_; }
115 void set_flow(
float depth,
float spread = 1.0f) noexcept {
116 flow_depth_.store(depth < 0.f ? 0.f : depth > 1.f ? 1.f : depth,
117 std::memory_order_relaxed);
118 flow_spread_.store(spread < 0.f ? 0.f : spread > 1.f ? 1.f : spread,
119 std::memory_order_relaxed);
131 std::unique_ptr<render::GpuCompute>)
noexcept;
132 bool prepare_on(std::unique_ptr<render::GpuCompute> gpu);
135 uint32_t sample_rate_;
136 std::vector<std::vector<float>> irs_;
137 uint32_t num_ir_ = 0;
138 uint32_t fft_size_ = 0;
140 std::unique_ptr<render::GpuCompute> gpu_;
143 std::vector<float> pan_l_;
144 std::vector<float> pan_r_;
147 std::vector<float> in_pad_;
148 std::vector<float> out_lr_;
149 std::vector<float> carry_l_;
150 std::vector<float> carry_r_;
155 std::atomic<float> flow_depth_{0.0f};
156 std::atomic<float> flow_spread_{1.0f};
157 std::vector<float> base_theta_;
158 std::vector<float> pan_l_live_;
159 std::vector<float> pan_r_live_;
160 float pan_norm_ = 1.0f;
161 std::uint64_t block_counter_ = 0;
163 bool prepared_ =
false;
168 std::atomic<std::uint64_t> blocks_seen_{0};
169 std::atomic<std::uint64_t> loss_block_{UINT64_MAX};
Non-owning view over multi-channel audio sample data.
Definition buffer.hpp:30
A unit of audio work the transport schedules onto a non-real-time worker.
Definition gpu_audio_node.hpp:92
Massive multi-IR ("multi-room") convolution: convolves one mono input against MANY distinct impulse r...
Definition gpu_multi_convolver.hpp:63
uint32_t fft_size() const
Definition gpu_multi_convolver.hpp:101
bool fenced() const noexcept
True before preparation or once the device was lost.
std::string backend() const
The live compute backend ("Metal"/"D3D12"/"Vulkan"), or "" if CPU-only.
GpuMultiConvolver(uint32_t block_size, uint32_t sample_rate, std::vector< std::vector< float > > irs)
irs is the bank of impulse responses (each a mono IR).
const std::vector< float > & pan_r() const
Definition gpu_multi_convolver.hpp:108
bool convolve_stereo(const float *mono_in, float *out_l, float *out_r, uint32_t n)
Convolve one mono input block against all rooms and write the panned stereo result (out_l / out_r,...
bool device_lost() const noexcept
True once the prepared device reports loss.
void set_flow(float depth, float spread=1.0f) noexcept
Flow: 0 = static field (bit-for-bit the pan_l()/pan_r() layout); >0 makes each room's pan drift per b...
Definition gpu_multi_convolver.hpp:115
bool gpu_available() const
True if the GPU compute device initialized and the multi-IR plan built.
Definition gpu_multi_convolver.hpp:81
void process_block(const audio::BufferView< const float > &input, audio::BufferView< float > &output, uint32_t n) override
Non-RT worker context. Process exactly one block (n == block_size).
GpuAudioNodeDescriptor descriptor() const override
GpuAudioStatus status_snapshot() const noexcept override
Allocation-free lifecycle projection, safe from a host or UI thread while a transport runs this node ...
uint32_t num_ir() const
Definition gpu_multi_convolver.hpp:100
const std::vector< float > & pan_l() const
Per-room constant-power pan gains (linear), available after prepare().
Definition gpu_multi_convolver.hpp:107
bool prepare() override
Non-RT. Allocate/compile/upload static data here.
void process_cpu_fallback(const audio::BufferView< const float > &input, audio::BufferView< float > &output, uint32_t n) noexcept override
RT-safe fallback.
~GpuMultiConvolver() override
GpuAudioRecoveryReason recovery_reason() const noexcept
First latched recovery cause, or None. Same snapshot as status_snapshot().
Definition gpu_audio_node.hpp:78
bool prepare_gpu_multi_convolver_with(GpuMultiConvolver &, std::unique_ptr< render::GpuCompute >) noexcept
Definition flow_pans.hpp:19
GpuAudioRecoveryReason
First latched reason that a node entered recovery.
Definition gpu_audio_status.hpp:40
Declared, fixed scheduling properties of a GPU audio node.
Definition gpu_audio_node.hpp:44
Versioned, allocation-free status shared by native hosts and UI adapters.
Definition gpu_audio_status.hpp:80