Vital
|
A multiband compressor module that splits the input signal into multiple bands, applies compression to each, and then recombines them. More...
#include <compressor_module.h>
Public Types | |
enum | { kAudio , kLowInputMeanSquared , kBandInputMeanSquared , kHighInputMeanSquared , kLowOutputMeanSquared , kBandOutputMeanSquared , kHighOutputMeanSquared , kNumOutputs } |
The outputs provided by the CompressorModule. More... | |
Public Member Functions | |
CompressorModule () | |
Constructs a CompressorModule, initializing outputs and internal variables. | |
virtual | ~CompressorModule () |
Destroys the CompressorModule and releases its resources. | |
virtual void | init () override |
Initializes the compressor module and sets up internal parameters and controls. | |
virtual void | setSampleRate (int sample_rate) override |
Sets the sample rate for the compressor to ensure time-based parameters (attack, release) are correct. | |
virtual void | processWithInput (const poly_float *audio_in, int num_samples) override |
Processes a block of samples through the compressor with the given input. | |
virtual void | enable (bool enable) override |
Enables or disables the compressor module. | |
virtual void | hardReset () override |
Performs a hard reset of the compressor, clearing buffers and resetting all states. | |
virtual Processor * | clone () const override |
Creates a clone of this CompressorModule with the same configuration. | |
![]() | |
SynthModule (int num_inputs, int num_outputs, bool control_rate=false) | |
Constructs a SynthModule with specified I/O and control rate. | |
virtual | ~SynthModule () |
Destructor. | |
control_map | getControls () |
Returns a map of all controls from this module and its submodules. | |
Output * | getModulationSource (std::string name) |
Retrieves a modulation source output by name. | |
const StatusOutput * | getStatusOutput (std::string name) const |
Retrieves a StatusOutput by name. | |
Processor * | getModulationDestination (std::string name, bool poly) |
Retrieves a modulation destination Processor by name and poly mode. | |
Processor * | getMonoModulationDestination (std::string name) |
Retrieves a mono modulation destination by name. | |
Processor * | getPolyModulationDestination (std::string name) |
Retrieves a poly modulation destination by name. | |
ValueSwitch * | getModulationSwitch (std::string name, bool poly) |
Retrieves a modulation switch by name and poly mode. | |
ValueSwitch * | getMonoModulationSwitch (std::string name) |
Retrieves a mono modulation switch by name. | |
ValueSwitch * | getPolyModulationSwitch (std::string name) |
Retrieves a poly modulation switch by name. | |
void | updateAllModulationSwitches () |
Updates all modulation switches based on whether their destinations have inputs. | |
output_map & | getModulationSources () |
Returns a reference to the map of modulation sources. | |
input_map & | getMonoModulationDestinations () |
Returns a reference to the map of mono modulation destinations. | |
input_map & | getPolyModulationDestinations () |
Returns a reference to the map of poly modulation destinations. | |
virtual output_map & | getMonoModulations () |
Returns a reference to the map of mono modulation readouts. | |
virtual output_map & | getPolyModulations () |
Returns a reference to the map of poly modulation readouts. | |
virtual void | correctToTime (double seconds) |
Allows correction of module state to a given time (if needed). | |
void | enableOwnedProcessors (bool enable) |
Enables or disables all owned processors. | |
void | addMonoProcessor (Processor *processor, bool own=true) |
Adds a mono processor to this module. | |
void | addIdleMonoProcessor (Processor *processor) |
Adds a mono processor that is considered idle (not part of main processing chain). | |
void | addSubmodule (SynthModule *module) |
Adds a submodule to this SynthModule. | |
![]() | |
ProcessorRouter (int num_inputs=0, int num_outputs=0, bool control_rate=false) | |
Constructs a ProcessorRouter with a specified number of inputs and outputs. | |
ProcessorRouter (const ProcessorRouter &original) | |
Copy constructor. Creates a new ProcessorRouter from an existing one. | |
virtual | ~ProcessorRouter () |
Destructor. | |
virtual void | process (int num_samples) override |
Processes audio through all Processors managed by this router. | |
virtual void | setOversampleAmount (int oversample) override |
Sets the oversampling amount for all Processors in this router. | |
virtual void | addProcessor (Processor *processor) |
Adds a Processor to be managed by this router. | |
virtual void | addProcessorRealTime (Processor *processor) |
Adds a Processor to the router in real-time (no memory allocations). | |
virtual void | addIdleProcessor (Processor *processor) |
Adds a Processor that should remain idle (not processed) in the router. | |
virtual void | removeProcessor (Processor *processor) |
Removes a Processor from this router. | |
void | connect (Processor *destination, const Output *source, int index) |
Connects a source Output to a destination Processor input by index. | |
void | disconnect (const Processor *destination, const Output *source) |
Disconnects a source Output from a destination Processor. | |
bool | isDownstream (const Processor *first, const Processor *second) const |
Checks if one Processor is downstream from another, i.e., if there's a path from the second to the first. | |
bool | areOrdered (const Processor *first, const Processor *second) const |
Checks if the order of two Processors is fixed in the router's processing sequence. | |
virtual bool | isPolyphonic (const Processor *processor) const |
Determines if a given Processor is polyphonic within this router. | |
virtual ProcessorRouter * | getMonoRouter () |
Gets the mono router that corresponds to this ProcessorRouter. | |
virtual ProcessorRouter * | getPolyRouter () |
Gets the polyphonic router that corresponds to this ProcessorRouter. | |
virtual void | resetFeedbacks (poly_mask reset_mask) |
Resets all Feedback nodes within this router using a reset mask. | |
![]() | |
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 | reset (poly_mask reset_mask) |
Called to reset the Processor's per-voice state (e.g., on note-on). | |
bool | initialized () |
Returns whether this Processor has been initialized. | |
force_inline bool | enabled () const |
Checks if this Processor is enabled. | |
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. | |
Protected Attributes | |
MultibandCompressor * | compressor_ |
The internal multiband compressor processor. | |
![]() | |
std::shared_ptr< ModuleData > | data_ |
Shared data storage for this SynthModule. | |
![]() | |
std::shared_ptr< CircularQueue< Processor * > > | global_order_ |
Global processing order reference. | |
std::shared_ptr< CircularQueue< Processor * > > | global_reorder_ |
Temporary storage for reorder operations. | |
CircularQueue< Processor * > | local_order_ |
Local ordering of Processors. | |
std::map< const Processor *, std::pair< int, std::unique_ptr< Processor > > > | processors_ |
Map of global to local Processors. | |
std::map< const Processor *, std::unique_ptr< Processor > > | idle_processors_ |
Idle Processors that are not active in the graph. | |
std::shared_ptr< std::vector< const Feedback * > > | global_feedback_order_ |
Global order of Feedback nodes. | |
std::vector< Feedback * > | local_feedback_order_ |
Local copies of Feedback nodes. | |
std::map< const Processor *, std::pair< int, std::unique_ptr< Feedback > > > | feedback_processors_ |
Map of global to local Feedback processors. | |
std::shared_ptr< int > | global_changes_ |
Global change counter. | |
int | local_changes_ |
Local change counter to track synchronization with global changes. | |
std::shared_ptr< CircularQueue< const Processor * > > | dependencies_ |
Queue for dependencies calculations. | |
std::shared_ptr< CircularQueue< const Processor * > > | dependencies_visited_ |
Queue of visited processors for dependencies calc. | |
std::shared_ptr< CircularQueue< const Processor * > > | dependency_inputs_ |
Queue of processors to check inputs for dependencies. | |
![]() | |
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. | |
Additional Inherited Members | |
![]() | |
Value * | createBaseControl (std::string name, bool audio_rate=false, bool smooth_value=false) |
Creates a simple control processor for a given parameter name. | |
Output * | createBaseModControl (std::string name, bool audio_rate=false, bool smooth_value=false, Output *internal_modulation=nullptr) |
Creates a base mod control, which is a control combined with a modulation input. | |
Output * | createMonoModControl (std::string name, bool audio_rate=false, bool smooth_value=false, Output *internal_modulation=nullptr) |
Creates a monophonic mod control, including applying parameter scaling. | |
Output * | createPolyModControl (std::string name, bool audio_rate=false, bool smooth_value=false, Output *internal_modulation=nullptr, Input *reset=nullptr) |
Creates a polyphonic mod control, including applying parameter scaling. | |
Output * | createTempoSyncSwitch (std::string name, Processor *frequency, const Output *beats_per_second, bool poly, Input *midi=nullptr) |
Creates a tempo sync switch that toggles between tempo-based frequency and free-running frequency. | |
void | createStatusOutput (std::string name, Output *source) |
Creates a status output associated with a given Output. | |
![]() | |
virtual void | addFeedback (Feedback *feedback) |
Adds a Feedback node to handle a feedback loop introduced by a connection. | |
virtual void | removeFeedback (Feedback *feedback) |
Removes a previously added Feedback node. | |
void | reorder (Processor *processor) |
Reorders the internal processing sequence to account for a Processor's dependencies. | |
virtual void | updateAllProcessors () |
Updates all processors to match the global order. Called when changes occur. | |
force_inline bool | shouldUpdate () |
Checks if local changes need to be synchronized with global changes. | |
virtual void | createAddedProcessors () |
Creates any processors that were added at the global level but not yet replicated locally. | |
virtual void | deleteRemovedProcessors () |
Deletes any processors that were removed at the global level but not yet removed locally. | |
const Processor * | getContext (const Processor *processor) const |
Gets the processor context within this router for a global Processor reference. | |
void | getDependencies (const Processor *processor) const |
Populates the internal dependencies structure for a given Processor. | |
Processor * | getLocalProcessor (const Processor *global_processor) |
Retrieves the local instance of a globally defined Processor. | |
![]() | |
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_. | |
![]() | |
static const Output | null_source_ |
A null (dummy) source used for unconnected inputs. | |
A multiband compressor module that splits the input signal into multiple bands, applies compression to each, and then recombines them.
The CompressorModule uses a MultibandCompressor to process the incoming audio signal. It provides controls for attack, release, thresholds, ratios, gains, and mix, as well as the ability to enable or disable specific frequency bands. The output includes mean squared levels for input and output of each band for analysis or display.
anonymous enum |
The outputs provided by the CompressorModule.
Enumerator | |
---|---|
kAudio | |
kLowInputMeanSquared | |
kBandInputMeanSquared | |
kHighInputMeanSquared | |
kLowOutputMeanSquared | |
kBandOutputMeanSquared | |
kHighOutputMeanSquared | |
kNumOutputs |
vital::CompressorModule::CompressorModule | ( | ) |
Constructs a CompressorModule, initializing outputs and internal variables.
|
virtual |
Destroys the CompressorModule and releases its resources.
|
inlineoverridevirtual |
Creates a clone of this CompressorModule with the same configuration.
Reimplemented from vital::SynthModule.
|
overridevirtual |
Enables or disables the compressor module.
When disabled, it resets internal states to ensure a clean start when re-enabled.
enable | True to enable, false to disable. |
Enables or disables the compressor. When disabled, it resets the internal state.
Reimplemented from vital::SynthModule.
|
overridevirtual |
Performs a hard reset of the compressor, clearing buffers and resetting all states.
Performs a hard reset on the compressor, clearing all internal buffers and states.
Reimplemented from vital::Processor.
|
overridevirtual |
Initializes the compressor module and sets up internal parameters and controls.
This creates the internal MultibandCompressor and links various parameters from the modulation system.
Initializes the multiband compressor and connects its outputs and parameters.
This sets up the internal MultibandCompressor, registers it as a processor, and creates modulation controls for attack, release, gains, thresholds, ratios, and mix. It then plugs these controls into the compressor's parameters.
Reimplemented from vital::ProcessorRouter.
|
overridevirtual |
Processes a block of samples through the compressor with the given input.
audio_in | Pointer to the input audio buffer. |
num_samples | The number of samples in the buffer. |
Processes the given input audio through the multiband compressor.
The method first updates internal parameters by calling SynthModule::process(), then passes the input samples to the compressor for processing.
Reimplemented from vital::Processor.
|
overridevirtual |
Sets the sample rate for the compressor to ensure time-based parameters (attack, release) are correct.
sample_rate | The new sample rate in Hz. |
Updates the sample rate of the compressor and notifies the MultibandCompressor so time-based parameters (attack, release) remain correct.
Reimplemented from vital::ProcessorRouter.
|
protected |
The internal multiband compressor processor.