16 for (
int i = 0; i < num_samples; ++i)
30 for (
int i = 0; i < num_samples; ++i)
44 for (
int i = 0; i < num_samples; ++i)
58 for (
int i = 0; i < num_samples; ++i)
59 dest[i] = source[i] * scale_;
71 for (
int i = 0; i < num_samples; ++i) {
73 dest[i] = value * value;
89 for (
int i = 0; i < num_samples; ++i)
90 dest[i] = source_left[i] + source_right[i];
105 for (
int i = 0; i < num_samples; ++i)
106 dest[i] = source_left[i] - source_right[i];
121 for (
int i = 0; i < num_samples; ++i)
122 dest[i] = source_left[i] * source_right[i];
151 for (
int i = 0; i < num_samples; ++i) {
152 current_multiply += delta_multiply;
153 audio_out[i] = audio_in[i] * current_multiply;
188 fraction_ = fractional[0];
190 poly_float delta_fraction = (fraction_ - current_fraction) * (1.0f / num_samples);
192 for (
int i = 0; i < num_samples; ++i) {
193 current_fraction += delta_fraction;
199 for (
int i = 0; i < num_samples; ++i)
209 static constexpr float kMaxOffset = 1.0f;
223 for (
int i = 0; i < num_samples; ++i) {
239 for (
int i = 0; i <
inputs_->size(); ++i)
244 int num_inputs =
static_cast<int>(
inputs_->size());
249 for (
int i = 0; i < num_inputs; ++i)
256 for (
int i = 0; i < num_inputs; ++i) {
259 for (
int s = 0; s < num_samples; ++s)
260 dest[s] += source[s];
274 int num_inputs =
static_cast<int>(
inputs_->size());
277 poly_float current_control_value = control_value_;
278 control_value_ = 0.0f;
287 poly_float delta_control_value = (control_value_ - current_control_value) * (1.0f / num_samples);
289 for (
int s = 0; s < num_samples; ++s) {
290 current_control_value += delta_control_value;
291 dest[s] = current_control_value;
300 for (
int s = 0; s < num_samples; ++s) {
301 dest[s] += source[s];
321 for (
int i = 0; i < num_samples; ++i)
360 for (
int i = 0; i < num_samples; ++i) {
361 current_cos_mult += delta_cos;
362 current_sin_mult += delta_sin;
365 dest[i] = source[i] * current_cos_mult + swap * current_sin_mult;
390 for (
int i = 0; i < num_samples; ++i) {
391 current_cos_mult += delta_cos;
392 current_sin_mult += delta_sin;
394 dest[i] = source[i] * current_cos_mult + swap * current_sin_mult;
403 static const poly_float dotted_ratio = 2.0f / 3.0f;
404 static const poly_float triplet_ratio = 3.0f / 2.0f;
411 for (
int i = 0; i < poly_float::kSize; ++i)
415 tempo_value *= beats_per_second;
424 poly_float tempo_adjusted = triplet_mult * dotted_mult * tempo_value;
void process(int num_samples) override
Processes two input buffers and writes their sum to the output.
Definition operators.cpp:81
@ 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
@ kTopLeft
Definition operators.h:454
void process(int num_samples) override
Processes the corner values, interpolating horizontally and then vertically.
Definition operators.cpp:208
void process(int num_samples) override
Processes the input buffer, clamping each sample between min_ and max_.
Definition operators.cpp:10
void process(int num_samples) override
Processes two input buffers and interpolates them by a fractional control input.
Definition operators.cpp:176
@ kReset
Definition operators.h:425
@ kTo
Definition operators.h:423
@ kFrom
Definition operators.h:422
@ kFractional
Definition operators.h:424
void process(int num_samples) override
Processes the input buffer, storing the inverse of each sample.
Definition operators.cpp:38
void process(int num_samples) override
Processes each sample, multiplying by the scale factor.
Definition operators.cpp:52
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
@ kNumStaticInputs
Definition operators.h:260
@ kReset
Definition operators.h:259
void process(int num_samples) override
Processes two inputs, storing the product of each sample pair.
Definition operators.cpp:113
void process(int num_samples) override
Processes the input buffer, negating each sample.
Definition operators.cpp:24
force_inline Input * input(unsigned int index=0) const
Retrieves the Input pointer at a given index.
Definition processor.h:587
force_inline bool isControlRate() const
Checks if this Processor is running at control rate (buffer_size == 1).
Definition processor.h:342
bool inputMatchesBufferSize(int input=0)
Checks whether the buffer size of a particular input matches the size needed by this Processor.
Definition processor.cpp:42
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_valu...
Definition processor.h:360
static const Output null_source_
A null (dummy) source used for unconnected inputs.
Definition processor.h:665
std::shared_ptr< std::vector< Input * > > inputs_
All inputs, owned or external.
Definition processor.h:660
force_inline Output * output(unsigned int index=0) const
Retrieves the Output pointer at a given index.
Definition processor.h:616
void process(int num_samples) override
Processes the input buffer, outputting a constant value (first sample) for the entire block.
Definition operators.cpp:313
virtual void process(int num_samples) override
Processes the audio input, multiplying by a smoothed control-rate value.
Definition operators.cpp:129
@ kControlRate
Definition operators.h:346
@ kReset
Definition operators.h:347
@ kAudioRate
Definition operators.h:345
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
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
static constexpr int kDb
Definition operators.h:390
void process(int num_samples) override
Processes the input buffer, squaring each sample.
Definition operators.cpp:66
poly_float cos_mult_
Definition operators.h:566
@ kMode
Definition operators.h:517
@ kEncodingValue
Definition operators.h:516
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
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
void process(int num_samples) override
Processes two inputs, storing the result of left - right.
Definition operators.cpp:97
@ kTempoIndex
Definition operators.h:593
@ kSync
Definition operators.h:595
@ kKeytrackTune
Definition operators.h:598
@ kKeytrackTranspose
Definition operators.h:597
@ kFrequency
Definition operators.h:592
@ kMidi
Definition operators.h:596
@ kBeatsPerSecond
Definition operators.h:594
@ kTripletMode
Definition operators.h:586
@ kFrequencyMode
Definition operators.h:583
@ kKeytrack
Definition operators.h:587
@ kDottedMode
Definition operators.h:585
void process(int num_samples) override
Reads sync mode and other parameters, producing a final frequency.
Definition operators.cpp:402
void process(int num_samples) override
Sums all input channels for each sample and writes the result to the output.
Definition operators.cpp:236
#define VITAL_ASSERT(x)
Definition common.h:11
constexpr vital::mono_float kSyncedFrequencyRatios[kNumSyncedFrequencyRatios]
Predefined list of frequency ratios for synced parameters (from 1/128th to 16x speed).
Definition synth_constants.h:221
constexpr int kNumSyncedFrequencyRatios
Number of frequency ratios used when syncing parameters (e.g., LFO speed) to tempo.
Definition synth_constants.h:218
force_inline mono_float dbToMagnitude(mono_float decibels)
Converts decibels (dB) to magnitude (linear).
Definition futils.h:217
force_inline poly_float cos(poly_float value)
Computes the cosine of each element (in radians).
Definition poly_utils.h:164
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 void zeroBuffer(mono_float *buffer, int size)
Zeros a mono buffer (standard array).
Definition poly_utils.h:570
force_inline bool equal(poly_float left, poly_float right)
Checks if two poly_floats are equal lane-by-lane. Returns true if all lanes match.
Definition poly_utils.h:341
force_inline poly_float maskLoad(poly_float zero_value, poly_float one_value, poly_mask reset_mask)
Selects between two values (zero_value or one_value) based on a mask in each lane.
Definition poly_utils.h:351
force_inline poly_float midiNoteToFrequency(poly_float value)
Converts a MIDI note to a frequency (vectorized).
Definition poly_utils.h:123
force_inline poly_int toInt(poly_float floats)
Casts a poly_float to poly_int by truncation.
Definition poly_utils.h:748
force_inline poly_float sin(poly_float value)
Computes the sine of each element (in radians).
Definition poly_utils.h:159
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 swapStereo(poly_float value)
Swaps the left and right channels of a stereo poly_float.
Definition poly_utils.h:411
Contains classes and functions used within the Vital synthesizer framework.
constexpr mono_float kPi
Pi constant.
Definition common.h:36
float mono_float
Definition common.h:33
poly_float * buffer
Pointer to the output buffer.
Definition processor.h:110
poly_float trigger_value
Trigger values for voices.
Definition processor.h:116
Represents a vector of floating-point values using SIMD instructions.
Definition poly_values.h:600
static force_inline mask_simd_type vector_call equal(simd_type one, simd_type two)
Compares two SIMD float registers for equality, element-wise.
Definition poly_values.h:954
static force_inline poly_mask vector_call lessThanOrEqual(poly_float one, poly_float two)
Definition poly_values.h:1108
force_inline void vector_call set(size_t index, float new_value) noexcept
Sets a specific element in the SIMD register.
Definition poly_values.h:1182
Represents a vector of integer values using SIMD instructions.
Definition poly_values.h:56