29template<
typename P,
typename SampleType =
float>
36 processors_.resize(
static_cast<std::size_t
>(std::max(0,
num_channels)));
37 for (
auto& p : processors_) {
38 p.set_sample_rate(sample_rate);
47 if (channels ==
nullptr ||
num_channels <= 0 || num_samples <= 0)
50 int count = std::min(
num_channels,
static_cast<int>(processors_.size()));
51 for (
int ch = 0; ch < count; ++ch) {
52 if (channels[ch] ==
nullptr)
55 process_buffer(processors_[ch], channels[ch], num_samples);
61 if (
buffer ==
nullptr || num_samples <= 0 ||
62 channel < 0 || channel >=
static_cast<int>(processors_.size()))
return;
64 process_buffer(processors_[
static_cast<std::size_t
>(channel)],
buffer, num_samples);
68 P&
operator[](
int channel) {
return processors_[
static_cast<size_t>(channel)]; }
69 const P&
operator[](
int channel)
const {
return processors_[
static_cast<size_t>(channel)]; }
72 template<
typename Func>
74 for (
auto& p : processors_)
80 for (
auto& p : processors_)
84 int num_channels()
const {
return static_cast<int>(processors_.size()); }
87 static void process_buffer(P& processor, SampleType*
buffer,
int num_samples) {
88 if constexpr (
requires { processor.process(
buffer, num_samples); }) {
89 processor.process(
buffer, num_samples);
91 for (
int i = 0;
i < num_samples; ++
i)
96 std::vector<P> processors_;
Duplicates a mono processor across N channels.
Definition processor_duplicator.hpp:30
void reset()
Reset all channel processors.
Definition processor_duplicator.hpp:79
void for_each(Func &&fn)
Set parameters on all channel processors.
Definition processor_duplicator.hpp:73
P & operator[](int channel)
Access individual channel processor (e.g., to set parameters).
Definition processor_duplicator.hpp:68
int num_channels() const
Definition processor_duplicator.hpp:84
void process(SampleType *const *channels, int num_channels, int num_samples)
Process a multi-channel buffer in-place channels: array of channel pointers num_channels: number of c...
Definition processor_duplicator.hpp:46
void prepare(int num_channels, SampleType sample_rate)
Prepare for processing with the given number of channels.
Definition processor_duplicator.hpp:35
void process_channel(SampleType *buffer, int channel, int num_samples)
Process a single channel.
Definition processor_duplicator.hpp:60
const P & operator[](int channel) const
Definition processor_duplicator.hpp:69
ProcessorDuplicatorT()=default
Definition additive_bank.hpp:218
@ buffer
A borrowed static buffer with a traversable playhead.
Definition granular.hpp:110
ProcessorDuplicatorT< P, double > ProcessorDuplicator64
Definition processor_duplicator.hpp:103
@ i
Definition formant_filter_bank.hpp:20
ProcessorDuplicatorT< P, float > ProcessorDuplicator
Definition processor_duplicator.hpp:100