24 Operator(
int num_inputs,
int num_outputs,
bool control_rate =
false)
25 :
Processor(num_inputs, num_outputs, control_rate) {
26 externally_enabled_ =
true;
65 externally_enabled_ =
enable;
73 virtual bool hasState()
const override {
return false; }
81 bool externally_enabled_;
83 JUCE_LEAK_DETECTOR(Operator)
98 :
Operator(1, 1), min_(min), max_(max) { }
106 void process(
int num_samples)
override;
111 JUCE_LEAK_DETECTOR(
Clamp)
128 void process(
int num_samples)
override;
131 JUCE_LEAK_DETECTOR(
Negate)
150 void process(
int num_samples)
override;
174 void process(
int num_samples)
override;
195 void process(
int num_samples)
override;
198 JUCE_LEAK_DETECTOR(
Square)
215 void process(
int num_samples)
override;
218 JUCE_LEAK_DETECTOR(
Add)
244 void process(
int num_samples)
override;
280 void process(
int num_samples)
override;
286 virtual bool hasState()
const override {
return true; }
308 void process(
int num_samples)
override;
330 void process(
int num_samples)
override;
366 virtual void process(
int num_samples)
override;
407 void process(
int num_samples)
override;
437 void process(
int num_samples)
override;
478 void process(
int num_samples)
override;
500 void process(
int num_samples)
override;
545 void process(
int num_samples)
override;
615 void process(
int num_samples)
override;
639 :
Operator(1, 1, true), min_(min), max_(max) { }
653 JUCE_LEAK_DETECTOR(
Clamp)
712 JUCE_LEAK_DETECTOR(
Add)
779 JUCE_LEAK_DETECTOR(
Square)
797 JUCE_LEAK_DETECTOR(
Cube)
816 JUCE_LEAK_DETECTOR(
Quart)
826 :
Operator(1, 1, true), offset_(offset) { }
848 :
Operator(1, 1, true), offset_(offset) { }
860 JUCE_LEAK_DETECTOR(
Cubic)
870 :
Operator(1, 1, true), offset_(offset) { }
893 :
Operator(1, 1, true), offset_(offset) { }
905 JUCE_LEAK_DETECTOR(
Root)
921 :
Operator(1, 1, true), min_(min), max_(max), scale_(scale), offset_(offset) { }
954 int num_inputs =
static_cast<int>(
inputs_->size());
957 for (
int in = 0; in < num_inputs; ++in)
Adds two input buffers sample-by-sample.
Definition operators.h:205
Add()
Definition operators.h:207
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:209
void process(int num_samples) override
Processes two input buffers and writes their sum to the output.
Definition operators.cpp:81
Performs bilinear interpolation among four corners (top-left, top-right, bottom-left,...
Definition operators.h:451
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:470
static const int kPositionStart
Index of the first corner input for convenience.
Definition operators.h:466
BilinearInterpolate()
Definition operators.h:468
@ kTopRight
Definition operators.h:455
@ kYPosition
Definition operators.h:459
@ kBottomRight
Definition operators.h:457
@ kBottomLeft
Definition operators.h:456
@ kXPosition
Definition operators.h:458
@ kNumInputs
Definition operators.h:460
@ kTopLeft
Definition operators.h:454
void process(int num_samples) override
Processes the corner values, interpolating horizontally and then vertically.
Definition operators.cpp:208
Clamps each sample to a specified [min, max] range.
Definition operators.h:90
void process(int num_samples) override
Processes the input buffer, clamping each sample between min_ and max_.
Definition operators.cpp:10
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:100
Clamp(mono_float min=-1, mono_float max=1)
Constructs a Clamp operator with the given min and max range.
Definition operators.h:97
Interpolates between two input buffers (From, To) based on a fractional value [0.....
Definition operators.h:419
void process(int num_samples) override
Processes two input buffers and interpolates them by a fractional control input.
Definition operators.cpp:176
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:431
Interpolate()
Definition operators.h:429
@ kReset
Definition operators.h:425
@ kNumInputs
Definition operators.h:426
@ kTo
Definition operators.h:423
@ kFrom
Definition operators.h:422
@ kFractional
Definition operators.h:424
Computes 1 / x for each sample.
Definition operators.h:140
Inverse()
Definition operators.h:142
void process(int num_samples) override
Processes the input buffer, storing the inverse of each sample.
Definition operators.cpp:38
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:144
Multiplies each sample by a fixed scale factor.
Definition operators.h:160
LinearScale(mono_float scale=1.0f)
Constructs a LinearScale operator with an initial scale factor.
Definition operators.h:166
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:168
void process(int num_samples) override
Processes each sample, multiplying by the scale factor.
Definition operators.cpp:52
A special sum operator that can accumulate control-rate and audio-rate modulation signals.
Definition operators.h:256
ModulationSum(int num_inputs=0)
Constructs a ModulationSum with optional dynamic inputs, plus static inputs (kNumStaticInputs).
Definition operators.h:267
void process(int num_samples) override
Processes control-rate inputs by smoothing them over the block, and adds audio-rate inputs sample by ...
Definition operators.cpp:270
virtual bool hasState() const override
Indicates that this operator has a small amount of state (the smoothed control value).
Definition operators.h:286
@ kNumStaticInputs
Definition operators.h:260
@ kReset
Definition operators.h:259
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:272
Multiplies two input buffers sample-by-sample.
Definition operators.h:318
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:324
Multiply()
Definition operators.h:320
virtual ~Multiply()
Definition operators.h:322
void process(int num_samples) override
Processes two inputs, storing the product of each sample pair.
Definition operators.cpp:113
Negates each sample (multiplies by -1).
Definition operators.h:118
void process(int num_samples) override
Processes the input buffer, negating each sample.
Definition operators.cpp:24
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:122
Negate()
Definition operators.h:120
Base class for operator nodes that perform arithmetic or other transformations in the processing grap...
Definition operators.h:16
void numInputsChanged() override
Called when the number of inputs changes (e.g., dynamically connected or disconnected).
Definition operators.h:55
Operator(int num_inputs, int num_outputs, bool control_rate=false)
Constructs an Operator with a specified number of inputs/outputs and control-rate setting.
Definition operators.h:24
virtual bool hasState() const override
Indicates whether this operator has internal state that must be preserved or reset.
Definition operators.h:73
void enable(bool enable) override
Enables or disables the Operator, storing the external enable state.
Definition operators.h:64
void setEnabled()
Updates this operator’s enabled state based on connected inputs and external status.
Definition operators.h:41
force_inline bool hasEnoughInputs()
Checks if this Operator has at least one connected input.
Definition operators.h:34
Base class for all signal-processing units in Vital.
Definition processor.h:212
force_inline int numOutputs() const
Returns the total number of Output pointers (owned or otherwise).
Definition processor.h:564
virtual void numInputsChanged()
Called when the number of inputs changes (e.g., new connections). Subclasses may override for dynamic...
Definition processor.h:501
force_inline Input * input(unsigned int index=0) const
Retrieves the Input pointer at a given index.
Definition processor.h:587
force_inline int getSampleRate() const
Retrieves the current (effective) sample rate.
Definition processor.h:326
std::shared_ptr< std::vector< Input * > > inputs_
All inputs, owned or external.
Definition processor.h:660
int connectedInputs()
Counts how many inputs are connected to a real source (not null_source_).
Definition processor.cpp:149
virtual void process(int num_samples)=0
Main processing function. Called by the ProcessorRouter.
force_inline Output * output(unsigned int index=0) const
Retrieves the Output pointer at a given index.
Definition processor.h:616
void setPluggingStart(int start)
Sets the position at which plugNext starts searching for an open input.
Definition processor.h:635
virtual void enable(bool enable)
Enables or disables this Processor.
Definition processor.h:318
Grabs the first sample from the input, then repeats it for all samples in the output.
Definition operators.h:488
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:492
void process(int num_samples) override
Processes the input buffer, outputting a constant value (first sample) for the entire block.
Definition operators.cpp:313
SampleAndHoldBuffer()
Definition operators.h:490
Multiplies an audio-rate input by a smoothly changing control-rate parameter over one block.
Definition operators.h:342
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:354
virtual void process(int num_samples) override
Processes the audio input, multiplying by a smoothed control-rate value.
Definition operators.cpp:129
SmoothMultiply()
Definition operators.h:351
@ kControlRate
Definition operators.h:346
@ kReset
Definition operators.h:347
@ kAudioRate
Definition operators.h:345
@ kNumInputs
Definition operators.h:348
void processMultiply(int num_samples, poly_float multiply)
Internal function to perform the per-sample smoothing of the multiplier and multiplication.
Definition operators.cpp:138
poly_float multiply_
Definition operators.h:376
bool hasState() const override
Indicates that this operator has internal state (the last multiplier).
Definition operators.h:360
virtual ~SmoothMultiply()
Definition operators.h:352
A specialized SmoothMultiply that interprets the control-rate input in dB for volume adjustments.
Definition operators.h:388
static constexpr mono_float kDefaultMaxDb
Definition operators.h:392
static constexpr mono_float kMinDb
Definition operators.h:391
void process(int num_samples) override
Processes volume in dB, smoothing across one audio block before multiplying the audio input.
Definition operators.cpp:161
SmoothVolume(mono_float max_db=kDefaultMaxDb)
Constructs a SmoothVolume operator with a specified maximum dB level.
Definition operators.h:398
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:401
virtual ~SmoothVolume()
Definition operators.h:399
static constexpr int kDb
Definition operators.h:390
Squares each sample (sample * sample).
Definition operators.h:186
void process(int num_samples) override
Processes the input buffer, squaring each sample.
Definition operators.cpp:66
Square()
Definition operators.h:188
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:189
Encodes or decodes a stereo signal by rotating or centering the phase of the left and right channels.
Definition operators.h:512
poly_float cos_mult_
Definition operators.h:566
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:537
StereoEncoder(bool decoding=false)
Constructs a StereoEncoder. If decoding is true, the math is adjusted for decoding instead of encodin...
Definition operators.h:531
@ kMode
Definition operators.h:517
@ kAudio
Definition operators.h:515
@ kEncodingValue
Definition operators.h:516
@ kNumInputs
Definition operators.h:518
void processRotate(int num_samples)
Processes the stereo signal in rotate mode (phase rotation).
Definition operators.cpp:340
poly_float sin_mult_
Definition operators.h:567
@ kNumStereoModes
Definition operators.h:524
@ kRotate
Definition operators.h:523
@ kSpread
Definition operators.h:522
bool hasState() const override
Indicates that this operator has internal state (cos/sin multipliers) that may change over time.
Definition operators.h:551
mono_float decoding_mult_
Definition operators.h:568
void processCenter(int num_samples)
Processes the stereo signal in spread/center mode.
Definition operators.cpp:373
void process(int num_samples) override
Processes the stereo input, either applying rotation or a center/spread mix.
Definition operators.cpp:329
Subtracts the second input buffer from the first, sample-by-sample.
Definition operators.h:298
Subtract()
Definition operators.h:300
void process(int num_samples) override
Processes two inputs, storing the result of left - right.
Definition operators.cpp:97
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:302
Chooses a frequency based on tempo sync or direct frequency modes.
Definition operators.h:580
@ kTempoIndex
Definition operators.h:593
@ kSync
Definition operators.h:595
@ kKeytrackTune
Definition operators.h:598
@ kNumInputs
Definition operators.h:599
@ kKeytrackTranspose
Definition operators.h:597
@ kFrequency
Definition operators.h:592
@ kMidi
Definition operators.h:596
@ kBeatsPerSecond
Definition operators.h:594
TempoChooser()
Constructs a TempoChooser operating at control rate.
Definition operators.h:605
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:607
@ kTripletMode
Definition operators.h:586
@ kFrequencyMode
Definition operators.h:583
@ kTempoMode
Definition operators.h:584
@ kKeytrack
Definition operators.h:587
@ kDottedMode
Definition operators.h:585
@ kNumSyncModes
Definition operators.h:588
void process(int num_samples) override
Reads sync mode and other parameters, producing a final frequency.
Definition operators.cpp:402
Adds together an arbitrary number of inputs.
Definition operators.h:228
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:236
void process(int num_samples) override
Sums all input channels for each sample and writes the result to the output.
Definition operators.cpp:236
VariableAdd(int num_inputs=0)
Constructs a VariableAdd operator with a specified number of inputs.
Definition operators.h:234
Control-rate addition of two values.
Definition operators.h:700
Add()
Definition operators.h:702
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:705
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:707
Control-rate bilinear interpolation between four corner values.
Definition operators.h:1071
void process(int num_samples) override
Reads corner values and interpolation positions (X, Y), then performs bilinear interpolation.
Definition operators.h:1098
@ kTopRight
Definition operators.h:1075
@ kYPosition
Definition operators.h:1079
@ kBottomRight
Definition operators.h:1077
@ kNumInputs
Definition operators.h:1080
@ kBottomLeft
Definition operators.h:1076
@ kXPosition
Definition operators.h:1078
@ kTopLeft
Definition operators.h:1074
static const int kPositionStart
Index of the first corner input for convenience.
Definition operators.h:1086
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:1090
BilinearInterpolate()
Definition operators.h:1088
Control-rate clamping of a single value.
Definition operators.h:631
Clamp(mono_float min=-1, mono_float max=1)
Constructs a control-rate Clamp operator for single-value clamping.
Definition operators.h:638
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:641
void process(int num_samples) override
Processes one control sample, clamping it to [min_, max_].
Definition operators.h:647
Control-rate operator cubing a single value.
Definition operators.h:786
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:791
Cube()
Definition operators.h:788
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:789
Control-rate operator computing x^3 + offset.
Definition operators.h:845
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:850
Cubic(mono_float offset)
Definition operators.h:847
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:852
Raises scale_ to the power of the input value (clamped to [min_, max_]).
Definition operators.h:912
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:927
ExponentialScale(mono_float min, mono_float max, mono_float scale=1, mono_float offset=0.0f)
Definition operators.h:920
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:923
Converts a frequency to a normalized phase increment (freq / sample_rate).
Definition operators.h:971
FrequencyToPhase()
Definition operators.h:973
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:979
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:975
Converts a frequency to a period in samples (sample_rate / freq).
Definition operators.h:991
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:999
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:995
FrequencyToSamples()
Definition operators.h:993
Control-rate interpolation between two values based on a fraction.
Definition operators.h:740
@ kFrom
Definition operators.h:743
@ kNumInputs
Definition operators.h:746
@ kFractional
Definition operators.h:745
@ kTo
Definition operators.h:744
Interpolate()
Definition operators.h:749
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:751
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:753
Clamps a single control value to be at least min_.
Definition operators.h:660
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:664
LowerBound(mono_float min=0.0f)
Definition operators.h:662
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:666
Converts a dB value to a linear magnitude at control rate.
Definition operators.h:1031
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:1039
MagnitudeScale()
Definition operators.h:1033
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:1035
Converts a MIDI note (in semitones) to a frequency at control rate.
Definition operators.h:1051
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:1059
MidiScale()
Definition operators.h:1053
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:1055
Control-rate multiplication of two values.
Definition operators.h:719
virtual ~Multiply()
Definition operators.h:724
Multiply()
Definition operators.h:721
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:728
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:726
Control-rate operator computing x^2 + offset.
Definition operators.h:823
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:830
Quadratic(mono_float offset)
Definition operators.h:825
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:828
Control-rate operator raising a single value to the 4th power.
Definition operators.h:804
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:809
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:807
Quart()
Definition operators.h:806
Control-rate operator computing x^4 + offset.
Definition operators.h:867
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:874
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:872
Quartic(mono_float offset)
Definition operators.h:869
Control-rate operator computing sqrt(x) + offset.
Definition operators.h:890
Root(mono_float offset)
Definition operators.h:892
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:895
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:897
Control-rate operator squaring a single value.
Definition operators.h:768
Square()
Definition operators.h:770
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:771
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:773
Converts a time in seconds to a number of samples (time * sample_rate).
Definition operators.h:1011
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:1019
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:1015
TimeToSamples()
Definition operators.h:1013
Clamps a single control value to be at most max_.
Definition operators.h:680
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:684
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:686
UpperBound(mono_float max=0.0f)
Definition operators.h:682
Control-rate version of summing multiple inputs into one.
Definition operators.h:944
VariableAdd(int num_inputs=0)
Definition operators.h:946
virtual Processor * clone() const override
Clones this Processor for polyphonic expansion. Must be overridden by subclasses.
Definition operators.h:949
void process(int num_samples) override
Main processing function. Called by the ProcessorRouter.
Definition operators.h:953
#define force_inline
Definition common.h:23
Contains faster but less accurate versions of utility math functions, such as exponential,...
force_inline mono_float pow(mono_float base, mono_float exponent)
Definition futils.h:141
force_inline mono_float dbToMagnitude(mono_float decibels)
Converts decibels (dB) to magnitude (linear).
Definition futils.h:217
force_inline poly_float clamp(poly_float value, mono_float min, mono_float max)
Clamps each lane of a vector to [min, max].
Definition poly_utils.h:306
force_inline poly_float min(poly_float left, poly_float right)
Returns the minimum of two poly_floats lane-by-lane.
Definition poly_utils.h:334
force_inline poly_float max(poly_float left, poly_float right)
Returns the maximum of two poly_floats lane-by-lane.
Definition poly_utils.h:327
force_inline poly_float sqrt(poly_float value)
Computes the square root of each element in a poly_float.
Definition poly_utils.h:169
force_inline poly_float interpolate(poly_float from, poly_float to, mono_float t)
Performs a linear interpolation between two poly_floats using a scalar t in [0..1].
Definition poly_utils.h:182
force_inline poly_float midiCentsToFrequency(poly_float value)
Converts MIDI cents to frequency (vectorized).
Definition poly_utils.h:116
Contains classes and functions used within the Vital synthesizer framework.
float mono_float
Definition common.h:33
Declares the Processor class and related structures for handling audio processing in a polyphonic con...
void clearBuffer()
Zeros out the entire output buffer.
Definition processor.h:81
poly_float * buffer
Pointer to the output buffer.
Definition processor.h:110
Represents a vector of floating-point values using SIMD instructions.
Definition poly_values.h:600
Provides various utility functions, classes, and constants for audio, math, and general-purpose opera...