Modulation Effects¶
Pulp's modulation effects use distinct mechanisms rather than one overloaded modulated-delay class. This keeps their latency, phase, stereo, and coloration contracts visible.
| Family | Header | Main types |
|---|---|---|
| Staged phasing and vibrato | <pulp/signal/phaser_stages.hpp>, <pulp/signal/vibrato.hpp> |
PhaserStages, PhaseVibrato, UniVibe, DelayVibrato |
| Chorus and flanging | <pulp/signal/chorus_family.hpp>, <pulp/signal/flanger.hpp> |
ChorusEnsemble, Flanger |
| Frequency translation | <pulp/signal/frequency_shifter_ssb.hpp> |
SsbFrequencyShifter |
| Rotary and scanner | <pulp/signal/leslie_rotary.hpp>, <pulp/signal/scanner_vibrato.hpp> |
LeslieRotary, ScannerVibrato |
Stereo chorus example¶
#include <pulp/signal/chorus_family.hpp>
pulp::signal::ChorusEnsemble chorus;
chorus.prepare(sample_rate);
chorus.set_voicing(pulp::signal::ChorusEnsemble::Voicing::dimension_d);
chorus.set_rate_hz(0.35f);
chorus.set_depth(0.6f);
chorus.set_stereo_width(1.0f);
chorus.set_mix(0.5f);
chorus.process(left, right, num_frames);
Mechanism and latency¶
PhaserStages,PhaseVibrato, andUniVibeare all-pass/filter mechanisms; they do not acquire the bulk delay of a delay-line vibrato.DelayVibrato,ChorusEnsemble, andFlangerown delay history. Calldiscard_history()for constant-time hostile-input recovery andreset()for an ordinary deterministic restart.SsbFrequencyShiftertranslates every partial by a fixed number of hertz; it is not a pitch shifter. Feedback delay is part of its sound and its reported state.LeslieRotarymodels independently accelerating horn and drum paths plus microphone geometry and reflections. Speed changes are targets, not phase resets.ScannerVibratoscans a delay line and exposes the realized depth and peak pitch ratio for visualization or bounds checks.
Do not infer latency from effect category. Query each instance's
latency_samples() after preparation and parameter setup. The
complete advanced DSP API
lists every mode, control, processing overload, and observable.