TOMiCUser Manual v0.6
Back to TOMiC
Get TOMiC
0%
Table of Contents
00User Manual v0.6
01Introduction & Architecture
02Synthesis Engine & Layer Morphing
03Noise Generators & Sampler
04Modulation Matrix
05Per-Channel FX Chain
06Step Sequencer & Song Mode
07Mixer, Master, AI & Artchemy
08Specifications & MIDI Chart
TOMiC Groovebox v0.6 • Rust & egui
Modulation Matrix

Chapter 04: Modulation Matrix

LFO, ModEnv, Marbles, Lorenz, Cellular, Tidal, Orbital, XY Pad, and Macro Knobs.

4.1 Modulation Architecture

The modulation system in TOMiC is one of the most comprehensive ever built into a drum synthesizer. Each layer (A and B) of every channel features up to 4 instances of each of the 3 base modulator types (LFO, ModEnv, Marbles), plus 4 instances each of 7 advanced modulator types (Markov, Lorenz, Cellular, Tidal, Orbital, Chladni, CvGranular) — 40 modulator instances per layer in total. Additionally, at the channel level (shared across A/B, not duplicated per layer), 4 HandMade/Record instances and 2 XY Pad instances are available. Only the first instance of each type is enabled by default; the rest are pre-allocated slots revealed with the "+ Add" button in the UI.

Each modulator features 15 routing destination slots (m1_dest..m15_dest with matching m1_amt..m15_amt), allowing a single LFO — or any other modulator — to drive up to 15 parameters simultaneously, each at its own depth. The XY Pad is a special case: its X and Y axes each get their own independent bank of 15 slots (mx1..mx15 / my1..my15), for 30 destinations per instance.

All modulators share one master destination list — the LfoTarget enum — which currently spans roughly 450 possible targets, covering virtually every sound-shaping and FX parameter in the synth, from oscillator pitch and filter cutoff to reverb send and even other modulators' own parameters (see 4.9).

Modulation Matrix and Modulators
Zoom HD

Modulation Matrix and Modulators

Figure 4.1: Modulation panel — LFOs, Modulation Envelopes (ModEnv), and destination matrix routings.

Patch-Cable Routing

Every modulator panel has a small output jack. Dragging from it produces an animated "patch cable" — release it over any modulatable knob to wire that modulator into the knob's first free routing slot at a default amount of 50%. Every eligible knob highlights with a colored ring while a cable is in flight, and dropping outside a valid target retracts the cable. This is in addition to (not a replacement for) manually picking a destination from the m1_dest..m15_dest dropdowns in the modulator's own panel.

4.2 LFO (Low Frequency Oscillator) — Up to 4 per Layer

LFO Parameters:

Waveform — 10 shapes, all evaluated through one shared shape function so the DSP, the live visualizer, and the knob modulation ring can never drift apart:
Sine: Smooth sinusoidal modulation
Triangle: Linear ramp up and down
Saw: Sawtooth ramp
Ramp Down: Falling ramp, the mirror of Saw
Square: Instant step switching between two values (duty cycle set by Pulse Width)
Trapezoid: Ramp up / plateau / ramp down / plateau — Pulse Width sets how much of the cycle is held flat, continuously morphing between a Triangle and a Square
Stepped: Rising staircase quantized to 2–16 steps, the step count taken from Pulse Width
Random: Random value jumps (Sample & Hold)
Drift: Sample & Hold with a smoothstep glide between successive random draws — the most "analog" flavor of randomness
Walk: Bounded random walk — each cycle steps by a random amount (sized by Pulse Width) and reflects off the ±1 rails instead of clamping, so it never gets stuck at an extreme
Rate: LFO frequency speed (0.1 Hz – 50 Hz)
Polarity: Bipolar (±), UniPlus (0 to +), UniMinus (0 to −)
Retrig Mode:
Retrig: Reset LFO phase on every trigger note
Free Run: Free-running LFO without trigger resets
Free Run + Reset: Free running with optional phase reset
One Shot: Runs exactly one cycle per note trigger, then freezes on the waveform's final value — turns any LFO shape into an arbitrary custom envelope
Sync Enabled / Sync Division: DAW tempo synchronization, from 1/32 note up to 8 bars, including triplet and dotted variants (1/32, 1/16, 1/8T, 1/8, 1/4T, 1/4, 1/2T, 1/2, 1/1, 2/1, 4/1, 8/1, plus dotted 1/32.–8/1.)
Depth: Master modulation amount for this LFO instance (0–100%), scaling all 15 of its routed destinations at once
Phase Offset: Rotates the waveform's starting point within its cycle (0–100%)
Pulse Width: Multi-purpose width control (10%–90%), its meaning following the selected waveform — duty cycle on Square, symmetry/skew on Sine/Triangle, plateau width on Trapezoid, step count on Stepped, and step size on Walk. Has no effect on Saw, Ramp Down, Random or Drift.
Curve: Bends the waveform's pacing between logarithmic (fast start), linear, and exponential (slow start, snappy finish), without changing its start value, end value, or period. Centered (0.0) reproduces every waveform's classic shape exactly as it sounded before this knob existed.
Rolling trace for random-family waveforms: since Random, Drift and Walk aren't functions of phase, the panel visualizer draws a rolling history of the engine's actual output for them instead of a single-cycle shape — letting all three read as genuinely distinct characters rather than a flat line.
Free Run behind the scenes: an LFO set to Free Run (or Free Run + Reset) keeps ticking even while the voice engine is idle between hits, as long as it is actually routed to something — so its output can keep evolving during silence rather than freezing at the last value. A modulator that isn't routed to any destination is skipped by the engine entirely (no CPU cost), whether or not it is "enabled."

Routing Slots:

Each LFO features 15 modulation routing slots. Each slot consists of:

Destination (m1_dest..m15_dest): Modulation target selected from the complete LfoTarget list
Amount (m1_amt..m15_amt): Modulation depth (−100% to +100%)

4.3 Mod Envelope (ModEnv) — Up to 4 per Layer

Modulation envelopes are single-shot ADSR generators designed for dynamic parameter shaping — separate from the oscillator/noise amplitude envelopes, which are dedicated volume-only controls.

Attack / Decay / Sustain / Release: Classic 4 envelope stages (Attack/Decay/Release each 0–10 s)
Hold: Time held at peak level between Attack and Decay (0–10 s)
Curve (EnvCurve): Envelope shape — Exp (exponential, default), Linear, or Log
Retrig Mode: Same shared Retrig / Free Run / Free Run + Reset modes as the LFO
Velocity Amount: How much note velocity scales the envelope's output (0–100%)
Depth: Master modulation amount, applied at the output stage across all 15 destinations
Polarity: Bipolar, UniPlus (default), or UniMinus
15 Routing Slots: Identical structure to the LFO routing matrix

4.4 Marbles — Stochastic CV Modulator (Up to 4 per Layer)

Inspired by the eurorack module Mutable Instruments Marbles, a random control voltage generator providing unique randomness controls:

Rate: Speed of generating new values (0.5 Hz – 32 Hz)
Bias: Center value skew (tendency up or down, 0–100%)
Spread: Random deviation range around the bias (0–100%)
Smoothing: Value jump smoothing (from sharp steps to smooth curves, 0–100%)
T Range: Time-range multiplier — Slow, Normal, or Fast — rescaling the Rate knob
Sync Enabled / Sync Division: Optional tempo sync, same division list as the LFO
Depth: Global modulation depth (0–100%)
Déjà-vu: Loop repeatability (0–100%) — at higher settings, the random value sequence begins to loop into predictable repeating patterns
Loop Length: Number of steps captured into the Déjà-vu loop (1–16)
Jitter: Micro-randomness layered back on top of a looped (Déjà-vu) pattern (0–100%)
Polarity: Bipolar, UniPlus, or UniMinus
Seed: Generator seed (0–255) — matching seeds generate identical random sequences
15 Routing Slots

4.5 Advanced Modulator Types (Up to 4 Instances per Layer Each)

In addition to the classic LFO/ModEnv/Marbles, TOMiC offers 7 advanced modulator algorithms, each with its own dedicated parameter set, Depth/Polarity output stage, a Seed for reproducible randomness, and the full 15-slot routing matrix.

4.5.1 Markov — Probabilistic State-Chain Modulator

Walks a chain of nodes with controllable randomness, from a strict step sequence to fully unpredictable jumps.

ParameterRangeDescription
Rate0.1–50 HzStep clock speed
Sync Enabled / Div—Optional tempo sync
Entropy0–100%0 = sequential walk (node 0→1→2→…), 100% = fully random jumps between nodes
Loop Lockon/offFreezes the last Loop Length generated steps into a repeating pattern
Loop Length1–8 stepsLength of the frozen loop when Loop Lock is engaged
Mutation0–100%Per-step probability of a random sign flip or one-node offset, keeping a locked loop from feeling perfectly static
Glide0–100%0 = quantised steps between nodes, 100% = smooth glide
Depth / Polarity / Seed—Standard output stage

4.5.2 Lorenz — Chaotic Attractor Modulator

A numerically-integrated Lorenz attractor, the classic 3D chaotic system, generating complex, never-exactly-repeating trajectories.

ParameterRangeDescription
Rate0.01–50Integration speed (not a musical clock — no tempo-sync concept)
Chaos (Rho)10–50Drives the system from stable/near-periodic toward full turbulence
Damping (Beta)0.5–5.0Energy decay rate of the system
Scale0–100%Output amplitude scaling
Smoothing0–100%Post-integration smoothing
OutputX / Y / ZWhich of the attractor's three axes is used as the modulation signal
Depth / Polarity / Seed—Standard output stage

4.5.3 Cellular — Cellular Automaton Modulator

Evolves a 1D row of cells generation by generation using a Wolfram elementary cellular-automaton rule, converting the pattern into a control signal.

ParameterRangeDescription
Rule0–255Wolfram rule number governing how each cell's next state is computed (e.g. Rule 30 = chaotic, Rule 90 = Sierpiński-like)
Rate0.1–50 HzGeneration-advance speed
Sync Enabled / Div—Optional tempo sync
Width4–32 cellsNumber of cells in the row
Mutation0–100%Probability of a random cell flip each generation, preventing the automaton from settling into total silence/stasis
Output ModeDensity / Center of Mass / Weighted SumDensity = fraction of live cells; Center of Mass = mean live-cell position regardless of count; Weighted Sum = position-biased sum (later cells count more)
Reset Patternon/offRe-seed the row on trigger
Depth / Polarity / Seed—Standard output stage

4.5.4 Tidal — Layered Tidal/Wave Modulator

Combines a slow, tempo-locked "tide" with a faster, free-running fractal "wave" riding on top of it — two motion layers in one modulator.

ParameterRangeDescription
Tide Period1/4/8/16/32/64 barsMacro tide cycle length — always tempo-relative
Roughness0.1–0.9Hurst exponent of the wave layer: low = jagged, high = smooth elastic drift
Octaves1–4Number of fractal noise octaves layered into the wave
Wave Rate0.05–4 HzBase speed of the wave layer — free-running, no tempo relationship
Tide Depth0–100%Contribution of the slow tide layer to the output
Wave Depth0–100%Contribution of the fast wave layer to the output
Depth / Polarity / Seed—Standard output stage

4.5.5 Orbital — Orbital-Mechanics Modulator

Simulates a body in a gravitational orbit, kicked by each note trigger; gravity, friction and the kick shape determine how the orbit evolves and decays.

ParameterRangeDescription
Gravity1–200Central pull strength
Friction0–2Orbital viscosity: 0 = eternal orbit, 2 = decays fast to center
Eccentricity0–100%Note-on kick blend: 0 = tangential (circular orbit), 100% = radial (elongating orbit)
Kick Strength0–100%Energy injected into the orbit on each trigger
OutputRadius / Angular Velocity / X / YWhich orbital quantity is used as the modulation signal
Depth / Polarity / Seed—Standard output stage

4.5.6 Chladni — Chladni-Plate Modulator

Models the interference pattern of a vibrating plate at a listening point, in the spirit of Chladni figures — two independent listening frequencies and a source count shape the resulting field.

ParameterRangeDescription
Freq A / Freq B0.02–2 HzListening-point frequencies on the plate's X and Y axes
Sources2–6Number of vibration sources contributing to the interference field
Damping0–3Radial damping: 0 = signal spans the full plate, 3 = concentrated at the center
Phase Offset0–100%Lissajous-style Y-phase offset, reshaping the traced curve
OutputField / X / YField = the interference amplitude at the listening point; X/Y = the raw listening-point coordinates
Depth / Polarity / Seed—Standard output stage (Seed jitters the source angles)

4.5.7 CvGranular — CV Granulator

A granular engine applied to control voltage instead of audio: it spawns short randomized "grains" of modulation rather than a continuous wave.

ParameterRangeDescription
Rate0.5–40 HzGrain spawn rate
Sync Enabled / Div—Optional tempo sync
Grain Length5–500 msDuration of each grain
Duration Jitter0–100%Randomizes grain length around the base Grain Length
Amplitude Jitter0–100%Randomizes each grain's peak level
Shape0–100%Attack/release balance of the grain envelope: 0 = percussive, 100% = slow
Depth / Polarity / Seed—Standard output stage

4.6 HandMade / Record — 4 Instances per Channel

The HandMade modulator (HandMadeParams) lets you either record a knob gesture in real time or hand-draw a custom modulation curve, then loop it back as a modulation source. It is defined at the channel level, shared across the A/B layers (not duplicated per layer).

Rate: Playback speed along the recorded/drawn curve, free-running (0.1–50 Hz)
Sync Enabled / Sync Division: Optional tempo sync, same division list as the LFO
The curve itself is a 512-point buffer captured either by recording a knob's real-time movement (up to 20 seconds of "Free" recording, auto-stopping about 0.6 s after you release the knob) or by drawing directly in the curve editor popup; only the portion you actually drew/recorded is looped, so short gestures loop tightly instead of playing through a long stretch of untouched silence
15 Routing Slots, identical in structure to the LFO

4.7 XY Pad — 2 Instances per Channel

The XY Pad modulator (XyPadParams) is a 2-dimensional touch/draw controller generating two independent modulation signals (X and Y) from one recorded or hand-drawn trajectory. It is also defined at the channel level, shared across A/B layers. It is capped at 2 instances rather than 4 because its editor widget is significantly larger on screen than a knob.

Rate / Sync Enabled / Sync Division: Same playback-speed controls as HandMade
Retrig: Resets the trajectory's phase to the start on every note trigger; without it, the trajectory free-runs continuously and each hit lands at an arbitrary point in the loop
Each axis has its own independent bank of 15 routing slots — mx1_dest..mx15_dest / mx1_amt..mx15_amt for X, my1_dest..my15_dest / my1_amt..my15_amt for Y — so one XY Pad instance can drive up to 30 destinations total

4.8 Macro Knobs

Per-Channel Macros — 7 per Channel

Seven Macro knobs (MacroParams) per channel give quick access to a curated combination of parameters under a single knob. Each Macro's raw value (0–100%) fans out through its own 15-slot routing matrix, and — unlike the plain modulators above — each of those 15 slots carries an extra per-slot Mode setting (Bipolar / UniPlus / UniMinus), so the same knob can push some destinations up and others down, or in both directions, simultaneously. Macro names are user-editable. A Macro's own value can itself be modulated by any other modulator (via the Macro1Value..Macro7Value targets — see 4.9), letting an LFO, envelope, or step lane drive the "super-knob" automatically.

Global Macros — 4 Global

Four Global Macro knobs (GlobalMacroParams) live at the plugin level, not per channel, and are shown on the transport bar next to the Limiter section. Their 15 routing slots work like the per-channel Macros (destination, amount, Bi/Uni+/Uni- mode) but each slot additionally carries its own target channel selector — so a single Global Macro slot can be aimed at any one of the 16 drum channels independently of the others, letting one knob sculpt a coordinated move across the whole kit. Global Macros are also the only modulation source that can reach the small set of master-bus-only targets (master compressor threshold/makeup gain, master limiter ceiling), since those live outside any per-channel patch.

4.9 The Complete Modulation Destination List (LfoTarget)

Every modulator — LFO, ModEnv, Marbles, all 7 advanced types, HandMade, XY Pad, and both Macro types — draws its destinations from one shared list, LfoTarget, which currently contains roughly 450 targets. The categories below (as they appear in the destination dropdown) group them by section:

CategoryExample destinations
GlobalLevel, Pan, Mix, Morph, OscLayerMix, NoiseLayerMix, FeedbackAmt, AccentAmount
DynamicsCompThresh/Ratio/Attack/Release, TransAttack/Sustain
Oscillator 1 / 2Pitch, OscPwm, OscSync, SubLevel, FmAmount/Ratio/Attack/Decay/Sustain, OscAttack/Decay, PitchCurve, PitchHold, PitchModAmt/Rate, ClusterSpread, HarmonicsSpace/Peak/Rolloff/Decay, BraidsTimbre/Color/Aux, BraidsWave, GranGrainSize/Pitch/Position/StereoWidth, ClDensity/Texture/Blend/Feedback/Reverb (and matching Osc2 variants)
Noise 1 / 2NoiseFilter/FilterQ, NoiseAttack/Decay, NoiseColor, NoiseCharacter, MetalTune/Feedback/Damp, SamplePitch/Start/Length (+ per-round-robin variants B/C/D), KarplusFreq/Decay/Damp, WireMix/Tune/Tension/Damping/Width/Body/BodyFreq, ClockedRate/Jitter, ClusterNoiseFreq/Spread, LfsrClock, GrainFreq/FmIndex/Size, FbankRate/Sweep (and matching Noise2 variants)
FilterFilter/FilterRes/FilterDrive/FilterModel/FilterCharacter, repeated across 8 independent filter slots (Filter…Filter8) for the oscillator path, and again across 8 slots each for the Noise 1 and Noise 2 filter paths
FXDistort, BitCrush/Mix/Dither, FreqShift/Mix, EqLow/Mid/High Gain+Freq, RingModFreq/Mix/Stereo, WidenerAmt, WavefoldAmt
DelayDelayTime, DelayFeedback, DelaySend, DelayTone, DelayDrive, DelayWidth, DelayWobble, DelayDuck, DelayTapSpread
ReverbReverbSize, ReverbDecay, ReverbDamp, ReverbPinch, ReverbSqueeze, ReverbSend, ReverbPreDelay
Phaser / ChorusPhaserRate/Depth/Feedback/Mix/Position; ChorusRate/Depth/Send/Feedback/Mix/Width
Spectral / ResonatorSpectralSend/Gate/Tilt/Morph/Smooth/Decay/Resonance; ResSend/Freq/Structure/Brightness/Damping/Position
Clouds FX / StutterCloudsPosition/GrainSize/Pitch/Density/Texture/Blend/StereoSpread/Feedback/Reverb; StutOffset/Chance/Gate/Pitch/FilterFreq/Width/Volume/Decay and more
Master (Global Macro only)MasterCompThresh, MasterCompMakeup, MasterLimitCeiling

Modulate-a-Modulator (Cross-Modulation)

Beyond synthesis and FX parameters, a dedicated block of targets — grouped under "MOD: LFO", "MOD: ENV", "MOD: MARBLES", "MOD: REC", "MOD: MKV", "MOD: LOR", "MOD: CEL", "MOD: TID", "MOD: ORB", "MOD: CHL", "MOD: GRA" and "MOD: MACRO" in the destination dropdown — points at another modulator's own parameter instead of a sound/FX field: an LFO can sweep Lorenz 2's Chaos amount, a Markov sequence can bend an LFO's Rate, or a modulator can even bend its own Rate (self-modulation is explicitly allowed and safe). Each family exposes its two most musically useful parameters this way (typically Rate/Speed plus one character knob, e.g. Lor1Rate/Lor1Rho, Mkv1Rate/Mkv1Entropy, Cel1Rate/Cel1Mut), plus every Macro's raw knob value (Macro1Value..Macro7Value).

These cross-modulation targets are resolved in a dedicated pass at the very start of each audio block, using the previous block's source values — this one-block delay is what makes feedback loops and self-modulation safe instead of causing runaway or undefined behavior.

Previous chapter03. Noise Generators & Sampler
Next chapter05. Per-Channel FX Chain