Vital
Loading...
Searching...
No Matches
vital::IirHalfbandDecimator Class Reference

An IIR-based half-band decimator for downsampling audio by a factor of 2. More...

#include <iir_halfband_decimator.h>

Inheritance diagram for vital::IirHalfbandDecimator:
vital::Processor

Public Types

enum  { kAudio , kNumInputs }
 

Public Member Functions

 IirHalfbandDecimator ()
 Constructs an IirHalfbandDecimator and initializes its memory.
 
virtual ~IirHalfbandDecimator ()
 Virtual destructor.
 
virtual Processorclone () const override
 Cloning is not supported for this processor.
 
virtual void process (int num_samples) override
 Processes audio data by decimating it (halving the sample rate).
 
void reset (poly_mask reset_mask) override
 Resets the filter states (delay lines) for the specified voices.
 
force_inline void setSharpCutoff (bool sharp_cutoff)
 Enables or disables the sharper 25-tap cutoff mode.
 
- Public Member Functions inherited from vital::Processor
 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 ProcessorRouterrouter () const
 Returns the ProcessorRouter that currently owns this Processor.
 
ProcessorRoutergetTopLevelRouter () 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 OutputregisterOutput (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 OutputregisterOutput (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 Inputinput (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 InputownedInput (unsigned int index=0) const
 Retrieves an owned Input pointer at a given index.
 
force_inline Outputoutput (unsigned int index=0) const
 Retrieves the Output pointer at a given index.
 
force_inline OutputownedOutput (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 kNumTaps9 = 2
 Number of taps in the lighter (9-tap) filter mode.
 
static constexpr int kNumTaps25 = 6
 Number of taps in the sharper (25-tap) filter mode.
 
static poly_float kTaps9 [kNumTaps9]
 Coefficients for the 9-tap IIR half-band filter, stored as pairs of poly_float.
 
static poly_float kTaps25 [kNumTaps25]
 Coefficients for the 25-tap IIR half-band filter, stored as pairs of poly_float.
 

Additional Inherited Members

- Protected Member Functions inherited from vital::Processor
OutputaddOutput (int oversample=1)
 Creates and registers a new Output. Handles control rate vs. audio rate.
 
InputaddInput ()
 Creates and registers a new Input, initially connected to null_source_.
 
- Protected Attributes inherited from vital::Processor
std::shared_ptr< ProcessorStatestate_
 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.
 
ProcessorRouterrouter_
 The ProcessorRouter that manages this Processor.
 
- Static Protected Attributes inherited from vital::Processor
static const Output null_source_
 A null (dummy) source used for unconnected inputs.
 

Detailed Description

An IIR-based half-band decimator for downsampling audio by a factor of 2.

This decimator uses an IIR half-band filter approach where each pair of input samples is combined into a single output sample. The filter can operate in two modes:

  • A faster, lighter mode using 9 taps.
  • A sharper cutoff mode using 25 taps.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
kAudio 

Main audio input for decimation.

kNumInputs 

Total number of inputs for this processor.

Constructor & Destructor Documentation

◆ IirHalfbandDecimator()

vital::IirHalfbandDecimator::IirHalfbandDecimator ( )

Constructs an IirHalfbandDecimator and initializes its memory.

Constructor for IirHalfbandDecimator, defaults to the 9-tap (lighter) filter mode.

◆ ~IirHalfbandDecimator()

virtual vital::IirHalfbandDecimator::~IirHalfbandDecimator ( )
inlinevirtual

Virtual destructor.

Member Function Documentation

◆ clone()

virtual Processor * vital::IirHalfbandDecimator::clone ( ) const
inlineoverridevirtual

Cloning is not supported for this processor.

Returns
Returns nullptr, with an assertion failure.

Implements vital::Processor.

◆ process()

void vital::IirHalfbandDecimator::process ( int num_samples)
overridevirtual

Processes audio data by decimating it (halving the sample rate).

Processes the audio block, decimating by a factor of 2.

Parameters
num_samplesThe number of output samples to process (input must have 2 * num_samples).
num_samplesNumber of output samples. The input buffer must have 2 * num_samples samples.

Applies an IIR half-band filter with either 9 or 25 taps, depending on sharp_cutoff_. The result is written to the output buffer, halving the sample rate of the incoming signal.

Implements vital::Processor.

◆ reset()

void vital::IirHalfbandDecimator::reset ( poly_mask reset_mask)
overridevirtual

Resets the filter states (delay lines) for the specified voices.

Resets the decimator's internal memory for the specified voices.

Parameters
reset_maskA bitmask specifying which voices to reset.
reset_maskA bitmask specifying which voices to reset (unused here).

Clears all delay line states to 0, ensuring no leftover data affects the next block.

Reimplemented from vital::Processor.

◆ setSharpCutoff()

force_inline void vital::IirHalfbandDecimator::setSharpCutoff ( bool sharp_cutoff)
inline

Enables or disables the sharper 25-tap cutoff mode.

Parameters
sharp_cutoffIf true, use 25 taps; if false, use 9 taps.

Member Data Documentation

◆ kNumTaps25

int vital::IirHalfbandDecimator::kNumTaps25 = 6
staticconstexpr

Number of taps in the sharper (25-tap) filter mode.

◆ kNumTaps9

int vital::IirHalfbandDecimator::kNumTaps9 = 2
staticconstexpr

Number of taps in the lighter (9-tap) filter mode.

◆ kTaps25

poly_float vital::IirHalfbandDecimator::kTaps25
static
Initial value:
= {
{ 0.093022421467960f, 0.024388383731296f },
{ 0.312318050871736f, 0.194029987625265f },
{ 0.548379093159427f, 0.433855675727187f },
{ 0.737198546150414f, 0.650124972769370f },
{ 0.872234992057129f, 0.810418671775866f },
{ 0.975497791832324f, 0.925979700943193f }
}

Coefficients for the 25-tap IIR half-band filter, stored as pairs of poly_float.

Coefficients for the 25-tap IIR half-band filter, stored in poly_float pairs.

Each pair contains coefficients for two parallel paths (or for two lanes in poly_float).

◆ kTaps9

poly_float vital::IirHalfbandDecimator::kTaps9
static
Initial value:
= {
{ 0.167135116548925f, 0.0413554705262319f },
{ 0.742130012538075f, 0.3878932830211427f },
}

Coefficients for the 9-tap IIR half-band filter, stored as pairs of poly_float.

Coefficients for the 9-tap IIR half-band filter, stored in poly_float pairs.

Each pair contains coefficients for two parallel paths (or for two lanes in poly_float).


The documentation for this class was generated from the following files: