Modulation

How fluentSynth modulation works — LFOs, the Chaosillator, motion recording, the audio-reactive follower, and the routing matrix.

Modulation is what makes a synth sound alive: instead of every knob sitting still while a note plays, invisible hands keep turning them for you. fluentSynth gives each Synthesizer a small set of sources (things that generate movement) and a routing matrix that aims them at destinations (things that can move).

The idea in one line

source (a moving signal) → route (depth · invert) → destination (a synth parameter)

Every source continuously outputs a control signal between −1 and +1. A route picks one source, one destination, and a depth knob deciding how far the destination swings. INV flips the direction — the same LFO that opens the filter can duck the volume instead. Any source can feed any number of routes, so one slow LFO can breathe the filter and drift the pan at once.

Sources

LFO

The classic low-frequency oscillator. Six shapes — sin, tri, saw, ramp, sqr, and s&h (sample-and-hold, a new random value each cycle) — with a free-running rate knob up to 20 Hz. Flip SYNC and the rate becomes a beat division of the track tempo (1/1 a bar down to 1/16), so wobbles stay locked to the groove even when you change the BPM mid-jam.

Chaosillator

The signature source. One order → chaos knob morphs its output from a clean periodic wave into deterministic chaos: under the hood it sweeps a logistic map through its period-doubling cascade and, past halfway, blends in the Lorenz attractor's orbit. At 0 it behaves like a polite LFO; at 100 it never repeats itself. The little scope next to the knob draws the live trajectory from the same equations the audio runs — what you see is literally what you hear.

Motion — draw to record

A performance recorder. Press and draw on the pad; when you release, the gesture loops forever as modulation. One drawing gives you two sources — mtn x and mtn y — so the horizontal and vertical parts of your gesture can drive different destinations (say, x into cutoff and y into resonance). The loop plays back over the same duration you drew it; the rate knob speeds it up or slows it down, and clear removes the motion sources again.

Audio in — envelope follower

The synth listens. Switch the toggle to live and fluentSynth opens your mic or line-in (asking for permission first) and tracks how loud it is — that loudness curve becomes a source. Route it to amp and the synth pumps in time with whatever you play into it, sidechain-style; route it to cutoff and your voice opens the filter. Each follower has its own attack / release (how fast it reacts up and down) and gain knobs. No input available? It simply idles at zero — nothing breaks.

Destinations

DestinationWhat moves
osc1 / osc2 pitchOscillator pitch, up to ±1 octave at full depth. Small depths = vibrato.
osc1 / osc2 detuneFine pitch (±1 semitone) — subtle drift and chorus-like shimmer.
cutoffThe low-pass filter's cutoff, swept musically in cents (±4 octaves at full depth) — the classic filter wobble/breathe.
resonanceFilter Q — motion at the resonant peak.
ampLoudness (tremolo). Rides its own gain stage, never fighting the ADSR.
panStereo position of the whole synth — auto-pan.
wave morphCrossfades between oscillator 1 and 2 — the timbre itself moves. Set the two oscillators to different waves and sweep between them.
<source> rateThe rate of another source — see "Modulating a modulator" below.

Pitch, detune, amp and wave-morph are applied to every note as it starts and released when it ends; cutoff, resonance and pan live on the synth itself, so they move even while a note is holding.

Modulating a modulator

The destination list also contains one entry per existing source — lfo 2 rate, chs 1 rate, mtn x rate, flw 1 rate and so on. Choosing one aims this route at another source's rate rather than at a synth parameter, so a slow LFO can speed up and slow down a faster one. The result is modulation that accelerates and decelerates instead of running at a fixed speed.

There is no separate target picker — destination and target are chosen in the same dropdown.

For rate destinations the depth knob is relative to the target's own rate setting: at full depth the target sweeps roughly 0 to 2× the rate its knob is set to, and INV flips the direction.

Note: The dropdown only ever offers targets that cannot form a loop. A source can never target itself, and any source that could already feed back round to this route's source is left out of the list — so the available … rate options change as you add routes.

Three ways to start

  1. Pick a Movement preset. The preset menu's Movement section (Ocean Pad, Wobble Bass, Chaos Bloom, Shimmer Keys) ships sound and routing in one click — a moving patch with zero setup.
  2. Press "+ add vibrato route". On an empty panel this creates one LFO aimed at osc1 pitch — grab the rate and depth knobs and you're modulating.
  3. Draw on the motion pad, or flip audio in to live. Both create their sources automatically; then aim them in the ROUTES section.

Everything here is part of the track document: sources, routes, depths, even your recorded gestures (stored as a compact 128-point curve). They save with the track, come back on reload, and sync live to collaborators — someone else can turn your LFO's rate while you play. Older tracks without modulation are untouched.

Under the hood, briefly

All sources are one AudioWorklet processor running on the audio thread, so modulation is sample-accurate and never stutters when the UI is busy. Signals flow through per-route gain nodes straight into Web Audio parameters — the filter is modulated in cents (even musical steps) rather than raw Hz, loudness modulation gets a dedicated tremolo stage so it can't fight the envelope, and per-note wiring is disconnected the moment a note dies. The full architecture is recorded in ADR-011.