25template<
typename SampleType,
typename... Processors>
31 template<std::
size_t Index>
32 auto&
get() {
return std::get<Index>(processors_); }
34 template<std::
size_t Index>
35 const auto&
get()
const {
return std::get<Index>(processors_); }
39 return process_impl(input, std::index_sequence_for<Processors...>{});
43 void process(SampleType* data,
int num_samples) {
44 for (
int i = 0;
i < num_samples; ++
i) {
51 reset_impl(std::index_sequence_for<Processors...>{});
55 static constexpr std::size_t
size() {
return sizeof...(Processors); }
58 std::tuple<Processors...> processors_;
60 template<std::size_t... Is>
61 SampleType process_impl(SampleType input, std::index_sequence<Is...>) {
62 SampleType value = input;
63 ((value = std::get<Is>(processors_).process(value)), ...);
67 template<std::
size_t I>
69 if constexpr (
requires { std::get<I>(processors_).reset(); }) {
70 std::get<I>(processors_).reset();
74 template<std::size_t... Is>
75 void reset_impl(std::index_sequence<Is...>) {
76 (reset_one<Is>(), ...);
80template<
typename... Processors>
83template<
typename... Processors>
Chain multiple DSP processors in series.
Definition processor_chain.hpp:26
auto & get()
Access a processor by index.
Definition processor_chain.hpp:32
ProcessorChainT()=default
void process(SampleType *data, int num_samples)
Process a buffer in-place through the entire chain.
Definition processor_chain.hpp:43
static constexpr std::size_t size()
Number of processors in the chain.
Definition processor_chain.hpp:55
const auto & get() const
Definition processor_chain.hpp:35
void reset()
Reset all processors in the chain.
Definition processor_chain.hpp:50
SampleType process(SampleType input)
Process a single sample through the entire chain.
Definition processor_chain.hpp:38
Definition additive_bank.hpp:218
ProcessorChainT< float, Processors... > ProcessorChain
Definition processor_chain.hpp:81
ProcessorChainT< double, Processors... > ProcessorChain64
Definition processor_chain.hpp:84
@ i
Definition formant_filter_bank.hpp:20