sfFDN
Loading...
Searching...
No Matches
filterbank.h
1// Copyright (C) 2025 Alexandre St-Onge
2// SPDX-License-Identifier: MIT
3#pragma once
4
5#include "audio_processor.h"
6#include "filter.h"
7
8#include <cstddef>
9#include <cstdint>
10#include <memory>
11#include <vector>
12
13namespace sfFDN
14{
19{
20 public:
23
25 void Clear() override;
26
31 void AddFilter(std::unique_ptr<AudioProcessor> filter);
32
39 void Process(const AudioBuffer& input, AudioBuffer& output) noexcept SFFDN_NONBLOCKING override;
40
45 uint32_t InputChannelCount() const noexcept SFFDN_NONBLOCKING override;
46
51 uint32_t OutputChannelCount() const noexcept SFFDN_NONBLOCKING override;
52
56 std::unique_ptr<AudioProcessor> Clone() const override;
57
58 private:
59 std::vector<std::unique_ptr<AudioProcessor>> filters_;
60};
61
69{
70 public:
73
74 IIRFilterBank(const IIRFilterBank&) = delete;
75 IIRFilterBank& operator=(const IIRFilterBank&) = delete;
76
79 IIRFilterBank(IIRFilterBank&& other) noexcept;
84
85 ~IIRFilterBank() override;
86
88 void Clear() override;
89
95 void SetFilter(std::span<const FilterCoefficients> coeffs, uint32_t channel_count);
96
103 void Process(const AudioBuffer& input, AudioBuffer& output) noexcept SFFDN_NONBLOCKING override;
104
109 uint32_t InputChannelCount() const noexcept SFFDN_NONBLOCKING override;
110
115 uint32_t OutputChannelCount() const noexcept SFFDN_NONBLOCKING override;
116
120 std::unique_ptr<AudioProcessor> Clone() const override;
121
122 private:
123 class IIRFilterBankImpl;
124 std::unique_ptr<IIRFilterBankImpl> impl_;
125
126 std::vector<FilterCoefficients> coeffs_;
127};
128
129} // namespace sfFDN
A class representing an audio buffer with multiple channels of non-interleaved audio data.
Definition audio_buffer.h:20
Base class for audio processors.
Definition audio_processor.h:24
Implements a bank of filters.
Definition filterbank.h:19
void Clear() override
Clears the filter bank.
uint32_t OutputChannelCount() const noexcept SFFDN_NONBLOCKING override
Returns the number of output channels produced by this processor.
void AddFilter(std::unique_ptr< AudioProcessor > filter)
Adds a filter to the filter bank.
uint32_t InputChannelCount() const noexcept SFFDN_NONBLOCKING override
Returns the number of input channels supported by this processor.
FilterBank()
Constructs an empty filter bank.
std::unique_ptr< AudioProcessor > Clone() const override
Creates a copy of the filter bank.
void Process(const AudioBuffer &input, AudioBuffer &output) noexcept SFFDN_NONBLOCKING override
Processes a block of input samples through the filter bank.
Implements a bank of IIR filters.
Definition filterbank.h:69
IIRFilterBank & operator=(IIRFilterBank &&other) noexcept
Move assignment operator for the IIR filter bank.
uint32_t InputChannelCount() const noexcept SFFDN_NONBLOCKING override
Returns the number of input channels supported by this processor.
void SetFilter(std::span< const FilterCoefficients > coeffs, uint32_t channel_count)
Sets the biquad coefficients for each stage.
IIRFilterBank()
Constructs an empty IIR filter bank.
IIRFilterBank(IIRFilterBank &&other) noexcept
Move constructor for the IIR filter bank.
void Clear() override
Clears the internal state of the processor.
void Process(const AudioBuffer &input, AudioBuffer &output) noexcept SFFDN_NONBLOCKING override
Processes a block of input samples through the filter bank.
Coefficients for a digital IIR filter.
Definition types.h:257