|
Vital
|
Base class for all signal-processing units in Vital. More...
#include <processor.h>
Public Member Functions | |
| 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 Processor * | clone () const =0 |
| Clones this Processor for polyphonic expansion. Must be overridden by subclasses. | |
| virtual bool | hasState () const |
| Indicates whether this Processor requires per-voice state. | |
| virtual void | process (int num_samples)=0 |
Main processing function. Called by the ProcessorRouter. | |
| 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 | reset (poly_mask reset_mask) |
| Called to reset the Processor's per-voice state (e.g., on note-on). | |
| 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. | |
Protected Member Functions | |
| 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_. | |
Protected Attributes | |
| 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 Protected Attributes | |
| static const Output | null_source_ |
| A null (dummy) source used for unconnected inputs. | |
Base class for all signal-processing units in Vital.
A Processor can have multiple inputs and outputs, manages its own state, and can be plugged into other Processors or have other Processors plugged in. In typical use, a ProcessorRouter manages connections and calls process().
| 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.
Constructs a Processor with specified counts of inputs and outputs, control rate mode, and oversampling.
| num_inputs | How many input slots to allocate. |
| num_outputs | How many output slots to allocate. |
| control_rate | If true, the Processor runs at control rate (1 sample). |
| max_oversample | The maximum oversampling factor for its outputs. |
| num_inputs | Number of inputs to allocate. |
| num_outputs | Number of outputs to allocate. |
| control_rate | Whether the Processor is control rate (1 sample). |
| max_oversample | Maximum oversampling factor for its outputs. |
|
inlinevirtual |
Virtual destructor.
|
protected |
|
protected |
| bool vital::Processor::checkInputAndOutputSize | ( | int | num_samples | ) |
Checks if all inputs and outputs have buffers big enough for num_samples.
| num_samples | The requested number of samples to process. |
|
inline |
Clears output samples for voices that are about to be reset, based on the trigger offset.
| reset_mask | Mask of voices to reset. |
| input_index | Index of the input to read the trigger_offset from. |
| output_index | Index of the output buffer to clear. |
This is a specialized method for multi-voice switching or gating.
|
pure virtual |
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Implemented in vital::Add, vital::BilinearInterpolate, vital::ChorusModule, vital::Clamp, vital::CombFilter, vital::CombModule, vital::Compressor, vital::CompressorModule, vital::cr::Add, vital::cr::BilinearInterpolate, vital::cr::Clamp, vital::cr::Cube, vital::cr::Cubic, vital::cr::ExponentialScale, vital::cr::Feedback, vital::cr::FrequencyToPhase, vital::cr::FrequencyToSamples, vital::cr::Interpolate, vital::cr::LowerBound, vital::cr::MagnitudeScale, vital::cr::MidiScale, vital::cr::Multiply, vital::cr::Quadratic, vital::cr::Quart, vital::cr::Quartic, vital::cr::Root, vital::cr::SmoothValue, vital::cr::Square, vital::cr::TimeToSamples, vital::cr::UpperBound, vital::cr::Value, vital::cr::VariableAdd, vital::DcFilter, vital::Decimator, vital::Delay< MemoryType >, vital::DelayModule, vital::DigitalSvf, vital::DiodeFilter, vital::DirtyFilter, vital::Distortion, vital::DistortionModule, vital::EffectsModulationHandler, vital::Envelope, vital::EnvelopeModule, vital::EqualizerModule, vital::Feedback, vital::FilterModule, vital::FiltersModule, vital::FirHalfbandDecimator, vital::FlangerModule, vital::FormantFilter, vital::FormantManager, vital::FormantModule, vital::IirHalfbandDecimator, vital::Interpolate, vital::Inverse, vital::LadderFilter, vital::LegatoFilter, vital::LfoModule, vital::LinearScale, vital::LineMap, vital::LinkwitzRileyFilter, vital::ModulationConnectionProcessor, vital::ModulationSum, vital::MultibandCompressor, vital::Multiply, vital::Negate, vital::OscillatorModule, vital::PeakMeter, vital::Phaser, vital::PhaserFilter, vital::PhaserModule, vital::PortamentoSlope, vital::ProcessorRouter, vital::ProducersModule, vital::RandomLfo, vital::RandomLfoModule, vital::ReorderableEffectChain, vital::Reverb, vital::ReverbModule, vital::SallenKeyFilter, vital::SampleAndHoldBuffer, vital::SampleModule, vital::SampleSource, vital::SmoothMultiply, vital::SmoothValue, vital::SmoothVolume, vital::Square, vital::StereoEncoder, vital::Subtract, vital::SynthLfo, vital::SynthModule, vital::SynthOscillator, vital::SynthVoiceHandler, vital::TempoChooser, vital::TriggerRandom, vital::Upsampler, vital::Value, vital::ValueSwitch, vital::VariableAdd, vital::VocalTract, and vital::VoiceHandler.
| int vital::Processor::connectedInputs | ( | ) |
Counts how many inputs are connected to a real source (not null_source_).
|
inlinevirtual |
Enables or disables this Processor.
| enable | If true, sets the Processor to enabled; else disabled. |
Reimplemented in vital::ChorusModule, vital::CompressorModule, vital::DelayModule, vital::EqualizerModule, vital::FlangerModule, vital::Operator, vital::PhaserModule, vital::ReverbModule, and vital::SynthModule.
|
inline |
Checks if this Processor is enabled.
|
inline |
Retrieves the current oversampling factor.
|
inline |
Retrieves a mask indicating which voices triggered a note-on event. Compares the input's trigger_value to kVoiceOn.
| input_index | Which input index to check. |
|
inline |
Retrieves the current (effective) sample rate.
| ProcessorRouter * vital::Processor::getTopLevelRouter | ( | ) | const |
Gets the topmost (root) ProcessorRouter by traversing parent routers.
|
inlinevirtual |
Called to perform a "hard" reset for all voices.
Reimplemented in vital::CombFilter, vital::CombModule, vital::CompressorModule, vital::Delay< MemoryType >, vital::DelayModule, vital::DigitalSvf, vital::DiodeFilter, vital::DirtyFilter, vital::EqualizerModule, vital::FilterModule, vital::FlangerModule, vital::FormantFilter, vital::FormantManager, vital::FormantModule, vital::LadderFilter, vital::Phaser, vital::PhaserFilter, vital::PhaserModule, vital::ReorderableEffectChain, vital::Reverb, vital::ReverbModule, vital::SallenKeyFilter, and vital::VocalTract.
|
inlinevirtual |
Indicates whether this Processor requires per-voice state.
Reimplemented in vital::ModulationSum, vital::Operator, vital::SmoothMultiply, and vital::StereoEncoder.
|
inlinevirtual |
Called after constructor, used for any additional initialization. Subclasses can override. Sets the initialized flag.
Reimplemented in vital::ChorusModule, vital::CombModule, vital::CompressorModule, vital::Decimator, vital::DelayModule, vital::DistortionModule, vital::EffectsModulationHandler, vital::EnvelopeModule, vital::EqualizerModule, vital::FilterModule, vital::FiltersModule, vital::FlangerModule, vital::FormantFilter, vital::FormantManager, vital::FormantModule, vital::LfoModule, vital::ModulationConnectionProcessor, vital::OscillatorModule, vital::Phaser, vital::PhaserModule, vital::ProcessorRouter, vital::ProducersModule, vital::RandomLfoModule, vital::ReverbModule, vital::SampleModule, vital::SoundEngine, vital::SoundEngine, vital::SynthVoiceHandler, and vital::VoiceHandler.
|
inline |
Returns whether this Processor has been initialized.
|
inline |
| bool vital::Processor::inputMatchesBufferSize | ( | int | input = 0 | ) |
Checks whether the buffer size of a particular input matches the size needed by this Processor.
| input | The input index to check. |
|
inline |
Checks if this Processor is running at control rate (buffer_size == 1).
|
inline |
Checks if the input source at a given index is polyphonic.
| index | The input index. |
|
virtual |
Checks if this Processor is polyphonic by querying its ProcessorRouter.
|
inline |
Returns the total number of Input pointers (owned or otherwise).
|
inlinevirtual |
Called when the number of inputs changes (e.g., new connections). Subclasses may override for dynamic behavior.
Reimplemented in vital::Operator.
|
inline |
Returns the total number of Output pointers (owned or otherwise).
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
| void vital::Processor::plug | ( | const Output * | source | ) |
| void vital::Processor::plug | ( | const Output * | source, |
| unsigned int | input_index ) |
Connects an external Output to a specified input index.
| source | The output to connect. |
| input_index | Which input slot to connect to. |
| void vital::Processor::plug | ( | const Processor * | source | ) |
| void vital::Processor::plug | ( | const Processor * | source, |
| unsigned int | input_index ) |
| void vital::Processor::plugNext | ( | const Output * | source | ) |
Connects an external Output to the first available (unplugged) input.
| source | The output to connect. |
| void vital::Processor::plugNext | ( | const Processor * | source | ) |
|
pure virtual |
Main processing function. Called by the ProcessorRouter.
| num_samples | Number of samples to process. |
Implemented in vital::Add, vital::BilinearInterpolate, vital::Clamp, vital::CombFilter, vital::Compressor, vital::cr::Add, vital::cr::BilinearInterpolate, vital::cr::Clamp, vital::cr::Cube, vital::cr::Cubic, vital::cr::ExponentialScale, vital::cr::Feedback, vital::cr::FrequencyToPhase, vital::cr::FrequencyToSamples, vital::cr::Interpolate, vital::cr::LowerBound, vital::cr::MagnitudeScale, vital::cr::MidiScale, vital::cr::Multiply, vital::cr::Quadratic, vital::cr::Quart, vital::cr::Quartic, vital::cr::Root, vital::cr::SmoothValue, vital::cr::Square, vital::cr::TimeToSamples, vital::cr::UpperBound, vital::cr::Value, vital::cr::VariableAdd, vital::DcFilter, vital::Decimator, vital::Delay< MemoryType >, vital::DigitalSvf, vital::DiodeFilter, vital::DirtyFilter, vital::Distortion, vital::EffectsModulationHandler, vital::Envelope, vital::Feedback, vital::FilterModule, vital::FiltersModule, vital::FirHalfbandDecimator, vital::FormantModule, vital::IirHalfbandDecimator, vital::Interpolate, vital::Inverse, vital::LadderFilter, vital::LegatoFilter, vital::LinearScale, vital::LineMap, vital::LinkwitzRileyFilter, vital::ModulationConnectionProcessor, vital::ModulationSum, vital::MultibandCompressor, vital::Multiply, vital::Negate, vital::OscillatorModule, vital::PeakMeter, vital::Phaser, vital::PhaserFilter, vital::PortamentoSlope, vital::ProcessorRouter, vital::ProducersModule, vital::RandomLfo, vital::ReorderableEffectChain, vital::Reverb, vital::SallenKeyFilter, vital::SampleAndHoldBuffer, vital::SampleModule, vital::SampleSource, vital::SmoothMultiply, vital::SmoothValue, vital::SmoothVolume, vital::SoundEngine, vital::Square, vital::StereoEncoder, vital::Subtract, vital::SynthLfo, vital::SynthOscillator, vital::SynthVoiceHandler, vital::TempoChooser, vital::TriggerRandom, vital::Upsampler, vital::Value, vital::ValueSwitch, vital::VariableAdd, vital::VocalTract, and vital::VoiceHandler.
|
inlinevirtual |
An optional processing function taking explicit input buffer. Fallback is an assertion failure (not supported).
| audio_in | Pointer to input buffer. |
| num_samples | Number of samples to process. |
Reimplemented in vital::ChorusModule, vital::Compressor, vital::CompressorModule, vital::DcFilter, vital::Delay< MemoryType >, vital::DelayModule, vital::DigitalSvf, vital::Distortion, vital::DistortionModule, vital::EqualizerModule, vital::FilterFxModule, vital::FlangerModule, vital::LinkwitzRileyFilter, vital::MultibandCompressor, vital::Phaser, vital::PhaserFilter, vital::PhaserModule, vital::ReorderableEffectChain, vital::Reverb, vital::ReverbModule, vital::SallenKeyFilter, vital::SoundEngine, vital::Upsampler, and vital::VocalTract.
|
virtual |
|
virtual |
Registers a new input, appending it to the input list.
| input | The Input pointer. |
| index | Optional index to place the input at (overloaded). |
Registers a new Output by appending it to the end of the output list.
| output | The Output pointer. |
Reimplemented in vital::VoiceHandler.
Registers a new Output in the output list at a specified index.
| output | The Output pointer. |
| index | The index to place it at. |
Reimplemented in vital::VoiceHandler.
|
inlinevirtual |
Called to reset the Processor's per-voice state (e.g., on note-on).
| reset_mask | Mask of voices to reset. |
Reimplemented in vital::CombFilter, vital::CombModule, vital::Compressor, vital::cr::Feedback, vital::Decimator, vital::DigitalSvf, vital::DiodeFilter, vital::DirtyFilter, vital::FormantFilter, vital::FormantManager, vital::FormantModule, vital::IirHalfbandDecimator, vital::LadderFilter, vital::LinkwitzRileyFilter, vital::MultibandCompressor, vital::PhaserFilter, vital::SallenKeyFilter, vital::SynthOscillator, and vital::VocalTract.
|
inline |
Returns the ProcessorRouter that currently owns this Processor.
|
inline |
Sets the ProcessorRouter that owns or manages this Processor.
| router | A pointer to the ProcessorRouter. |
|
inlinevirtual |
Sets whether this Processor runs at control rate.
| control_rate | True to set control rate, false otherwise. |
Reimplemented in vital::EnvelopeModule, and vital::LfoModule.
|
inlinevirtual |
Sets the oversampling amount and updates the effective sample rate.
| oversample | The new oversampling factor. |
Reimplemented in vital::Decimator, vital::DelayModule, vital::FilterFxModule, vital::FiltersModule, vital::LinkwitzRileyFilter, vital::MultibandCompressor, vital::Phaser, vital::ProcessorRouter, vital::Reverb, vital::SynthOscillator, vital::Value, vital::ValueSwitch, and vital::VoiceHandler.
|
inline |
Sets the position at which plugNext starts searching for an open input.
| start | The new starting index for plugNext. |
|
inlinevirtual |
Updates the sample rate of this Processor (scaled by oversampling).
| sample_rate | The new base sample rate (pre-oversampling). |
Reimplemented in vital::CompressorModule, vital::DcFilter, vital::DelayModule, vital::DistortionModule, vital::EqualizerModule, vital::LinkwitzRileyFilter, vital::MultibandCompressor, vital::PhaserModule, vital::ProcessorRouter, vital::Reverb, vital::ReverbModule, and vital::VoiceHandler.
|
virtual |
Removes a connection to a given Output from all inputs.
| source | The output to unplug. |
|
virtual |
|
virtual |
Removes the connection at a specified input index, if any.
| input_index | The input slot index to unplug. |
| void vital::Processor::useInput | ( | Input * | input | ) |
| void vital::Processor::useInput | ( | Input * | input, |
| int | index ) |
| void vital::Processor::useOutput | ( | Output * | output | ) |
| void vital::Processor::useOutput | ( | Output * | output, |
| int | index ) |
|
protected |
All inputs, owned or external.
|
staticprotected |
A null (dummy) source used for unconnected inputs.
|
protected |
All outputs, owned or external.
|
protected |
Inputs owned by this Processor.
|
protected |
Outputs owned by this Processor.
|
protected |
The index at which plugNext starts searching for an unplugged input.
|
protected |
The ProcessorRouter that manages this Processor.
|
protected |
Shared state (sample rate, oversample, etc.)