Vital
|
A FIR half-band decimator for downsampling audio by a factor of 2. More...
#include <fir_halfband_decimator.h>
Public Types | |
enum | { kAudio , kNumInputs } |
Public Member Functions | |
FirHalfbandDecimator () | |
Constructs a FirHalfbandDecimator and initializes taps. | |
virtual | ~FirHalfbandDecimator () |
Virtual destructor. | |
virtual Processor * | clone () const override |
Clones (deep copies) this decimator. | |
void | saveMemory (int num_samples) |
Saves the last few samples of audio to memory, preparing for the next processing block. | |
virtual void | process (int num_samples) override |
Processes the input audio by decimating it, producing half the number of output samples. | |
![]() | |
Processor (int num_inputs, int num_outputs, bool control_rate=false, int max_oversample=1) | |
Constructs a Processor with a given number of inputs/outputs and oversampling. | |
virtual | ~Processor () |
Virtual destructor. | |
virtual bool | hasState () const |
Indicates whether this Processor requires per-voice state. | |
virtual void | processWithInput (const poly_float *audio_in, int num_samples) |
An optional processing function taking explicit input buffer. Fallback is an assertion failure (not supported). | |
virtual void | init () |
Called after constructor, used for any additional initialization. Subclasses can override. Sets the initialized flag. | |
virtual void | hardReset () |
Called to perform a "hard" reset for all voices. | |
bool | initialized () |
Returns whether this Processor has been initialized. | |
virtual void | setSampleRate (int sample_rate) |
Updates the sample rate of this Processor (scaled by oversampling). | |
virtual void | setOversampleAmount (int oversample) |
Sets the oversampling amount and updates the effective sample rate. | |
force_inline bool | enabled () const |
Checks if this Processor is enabled. | |
virtual void | enable (bool enable) |
Enables or disables this Processor. | |
force_inline int | getSampleRate () const |
Retrieves the current (effective) sample rate. | |
force_inline int | getOversampleAmount () const |
Retrieves the current oversampling factor. | |
force_inline bool | isControlRate () const |
Checks if this Processor is running at control rate (buffer_size == 1). | |
virtual void | setControlRate (bool control_rate) |
Sets whether this Processor runs at control rate. | |
force_inline poly_mask | getResetMask (int input_index) const |
Retrieves a mask indicating which voices triggered a note-on event. Compares the input's trigger_value to kVoiceOn. | |
force_inline void | clearOutputBufferForReset (poly_mask reset_mask, int input_index, int output_index) const |
Clears output samples for voices that are about to be reset, based on the trigger offset. | |
bool | inputMatchesBufferSize (int input=0) |
Checks whether the buffer size of a particular input matches the size needed by this Processor. | |
bool | checkInputAndOutputSize (int num_samples) |
Checks if all inputs and outputs have buffers big enough for num_samples . | |
virtual bool | isPolyphonic () const |
Checks if this Processor is polyphonic by querying its ProcessorRouter. | |
void | plug (const Output *source) |
Connects an external Output to this Processor's first input. | |
void | plug (const Output *source, unsigned int input_index) |
Connects an external Output to a specified input index. | |
void | plug (const Processor *source) |
Connects the first output of a Processor to this Processor's first input. | |
void | plug (const Processor *source, unsigned int input_index) |
Connects the first output of a Processor to a specified input index. | |
void | plugNext (const Output *source) |
Connects an external Output to the first available (unplugged) input. | |
void | plugNext (const Processor *source) |
Connects the first output of a Processor to the first available (unplugged) input. | |
void | useInput (Input *input) |
Uses an existing Input object as this Processor's first input. | |
void | useInput (Input *input, int index) |
Uses an existing Input object at a specified input index. | |
void | useOutput (Output *output) |
Uses an existing Output object as this Processor's first output. | |
void | useOutput (Output *output, int index) |
Uses an existing Output object at a specified output index. | |
int | connectedInputs () |
Counts how many inputs are connected to a real source (not null_source_). | |
virtual void | unplugIndex (unsigned int input_index) |
Removes the connection at a specified input index, if any. | |
virtual void | unplug (const Output *source) |
Removes a connection to a given Output from all inputs. | |
virtual void | unplug (const Processor *source) |
Removes connections to all outputs from a given Processor. | |
virtual void | numInputsChanged () |
Called when the number of inputs changes (e.g., new connections). Subclasses may override for dynamic behavior. | |
force_inline void | router (ProcessorRouter *router) |
Sets the ProcessorRouter that owns or manages this Processor. | |
force_inline ProcessorRouter * | router () const |
Returns the ProcessorRouter that currently owns this Processor. | |
ProcessorRouter * | getTopLevelRouter () const |
Gets the topmost (root) ProcessorRouter by traversing parent routers. | |
virtual void | registerInput (Input *input, int index) |
Registers a new input, appending it to the input list. | |
virtual Output * | registerOutput (Output *output, int index) |
Registers a new Output in the output list at a specified index. | |
virtual void | registerInput (Input *input) |
Registers a new Input by appending it to the end of the input list. | |
virtual Output * | registerOutput (Output *output) |
Registers a new Output by appending it to the end of the output list. | |
force_inline int | numInputs () const |
Returns the total number of Input pointers (owned or otherwise). | |
force_inline int | numOutputs () const |
Returns the total number of Output pointers (owned or otherwise). | |
force_inline int | numOwnedInputs () const |
Returns how many Input objects this Processor owns. | |
force_inline int | numOwnedOutputs () const |
Returns how many Output objects this Processor owns. | |
force_inline Input * | input (unsigned int index=0) const |
Retrieves the Input pointer at a given index. | |
force_inline bool | isInputSourcePolyphonic (int index=0) |
Checks if the input source at a given index is polyphonic. | |
force_inline Input * | ownedInput (unsigned int index=0) const |
Retrieves an owned Input pointer at a given index. | |
force_inline Output * | output (unsigned int index=0) const |
Retrieves the Output pointer at a given index. | |
force_inline Output * | ownedOutput (unsigned int index=0) const |
Retrieves an owned Output pointer at a given index. | |
void | setPluggingStart (int start) |
Sets the position at which plugNext starts searching for an open input. | |
Static Public Attributes | |
static constexpr int | kNumTaps = 32 |
Number of FIR taps in the filter. | |
Additional Inherited Members | |
![]() | |
Output * | addOutput (int oversample=1) |
Creates and registers a new Output. Handles control rate vs. audio rate. | |
Input * | addInput () |
Creates and registers a new Input, initially connected to null_source_. | |
![]() | |
std::shared_ptr< ProcessorState > | state_ |
Shared state (sample rate, oversample, etc.) | |
int | plugging_start_ |
The index at which plugNext starts searching for an unplugged input. | |
std::vector< std::shared_ptr< Input > > | owned_inputs_ |
Inputs owned by this Processor. | |
std::vector< std::shared_ptr< Output > > | owned_outputs_ |
Outputs owned by this Processor. | |
std::shared_ptr< std::vector< Input * > > | inputs_ |
All inputs, owned or external. | |
std::shared_ptr< std::vector< Output * > > | outputs_ |
All outputs, owned or external. | |
ProcessorRouter * | router_ |
The ProcessorRouter that manages this Processor. | |
![]() | |
static const Output | null_source_ |
A null (dummy) source used for unconnected inputs. | |
A FIR half-band decimator for downsampling audio by a factor of 2.
This decimator uses a half-band FIR filter to combine every pair of input samples into a single output sample, reducing the sample rate by half.
anonymous enum |
vital::FirHalfbandDecimator::FirHalfbandDecimator | ( | ) |
Constructs a FirHalfbandDecimator and initializes taps.
Constructs the FirHalfbandDecimator, setting up FIR coefficients and resetting memory.
Sets up the filter coefficients and resets the internal memory.
The static array coefficients
stores the full 32 taps. Half (kNumTaps/2) are packed into each element of taps_
as a poly_float, allowing pairwise processing in the decimation loop.
|
inlinevirtual |
Virtual destructor.
|
inlineoverridevirtual |
Clones (deep copies) this decimator.
Implements vital::Processor.
|
overridevirtual |
Processes the input audio by decimating it, producing half the number of output samples.
Processes the audio by decimating it (reducing sample rate by half) using a half-band FIR filter.
num_samples | The number of output samples to produce. (The input must be 2 * num_samples in length.) |
num_samples | The number of output samples to produce. The input must have 2 * num_samples samples. |
For each output sample, the filter sums products of input samples and filter coefficients, then uses the utils::sumSplitAudio()
function to sum the two lanes of the poly_float result.
Implements vital::Processor.
void vital::FirHalfbandDecimator::saveMemory | ( | int | num_samples | ) |
Saves the last few samples of audio to memory, preparing for the next processing block.
Saves samples from the tail of the current processing block to memory, so the filter can continue seamlessly.
num_samples | The number of samples that were processed in this block (i.e., half the input buffer size). |
This function stores samples that will be needed by subsequent processing blocks.
num_samples | The number of output samples processed in this block (the input is 2 * num_samples). |
This function copies the last few input samples into the memory_
array to be used as the first samples in the next block's processing. This prevents discontinuities at block boundaries.
|
staticconstexpr |
Number of FIR taps in the filter.