Chapter 05: Per-Channel FX Chain
5.1 DSP FX Chain Overview
Every channel in TOMiC includes a dedicated stereo DSP effects processing chain. Signal originating from oscillators and noise generators flows sequentially through filters, distortion, dynamics, EQ, modulation FX, granular processing, and spatial effects.
Internally the chain runs as two stages: the main serial insert path — Ring Mod → Freq Shifter → Bitcrusher → Distortion (post-filter portion) → Wavefolder → 3-Band EQ → Phaser → Chorus → Stereo Widener → Compressor → Transient Shaper → Grain Cloud (pre-delay, default) → Delay → Reverb (TinCan) → Grain Cloud (post-delay, if Cld Post is enabled) → Stutter/Beat Repeat (always last) — followed by a second pass that adds Hall Reverb (replacing TinCan when selected), the Spectral Gate, and the Rings Resonator (Res FX).
An identical FX chain is available on the Master Bus (master_fx inside TomicParams), processing the summed stereo output before the master glue compressor and limiter. Two exceptions: the Click/Impulse Generator (5.4) is a per-voice trigger transient with no DSP behind it on the master bus (its tab is hidden in the Mixer's master inspector for this reason), and Sidechain Source is a per-channel-only routing concept — the master bus is the sum of all channels, so it has nothing external to key off. The master bus additionally carries its own glue compressor and digital limiter, described in 5.13, which have no per-channel equivalent.

Stereo FX Processing Chain
Figure 5.1: Per-channel FX processing chain.
5.2 Filter Chain (Up to 8 Slots)
TOMiC features a chain of up to 8 independent filters per layer (filter1..filter8). Slot 1 is enabled by default; click "+ Add" to activate additional slots. Filters can operate in Serial (output feeds the next input) or Parallel mode (filter reads original signal and adds its output to the bus).

Voice Filter and EQ
Figure 5.2: Filter model selection, routing mode, and 3-band parametric EQ.
Filter Models (FilterModel) — 12 Types:
Filter Modes (FilterMode) — 9 Modes:
Parameters per Filter Slot:
Filter, Filter2..Filter8)FilterRes, Filter2Res..Filter8Res)FilterDrive)FilterCharacter)Drive Type (Filter Input Saturation):
Filter drive incorporates 3 saturation algorithms:
5.3 Distortion & Wavefolding Section
Distortion — 8 Algorithms (DistortionAlgorithm):
Distortion features integrated 2× oversampling (HalfBand2x) to eliminate anti-aliasing artifacts. A per-channel Saturation Topology switch (PreFilter / PostFilter / DualStage / Parallel) decides where in the chain the Distort knob's saturation is applied relative to the filter chain — PreFilter shapes the raw osc/noise mix before filtering, PostFilter (the default) shapes the filtered signal here in the FX chain, DualStage splits the drive amount across both points, and Parallel blends a fully-driven wet copy under the Distort knob instead of overdriving the whole signal.
Wavefolder
Independent wavefolder module (wavefolder.rs), sine-based folding with its own internal 2× oversampling. Parameter: WavefoldAmt (modulation target: LfoTarget::WavefoldAmt).
Bitcrusher
Two-stage digital audio degradation — zero-order-hold sample-rate reduction (1×–50× decimation) followed by a mid-tread quantiser with optional TPDF dither — with three parameters:
LfoTarget::BitCrush)LfoTarget::BitCrushMix)LfoTarget::BitCrushDither)5.4 Click / Impulse Generator
A dedicated ultra-short transient module (click_gen.rs) that layers a 0.5–10 ms burst on top of the main voice to add attack "snap" independently of the oscillator body — useful for reinforcing a kick or snare beater/stick attack. It is a per-voice trigger effect, not a continuous insert: it fires once per note-on and has no DSP presence on the Master Bus (see 5.1).
ClickMode): Off (default) / Impulse (Dirac-like spike + tonal sine tail) / NoiseBurst (filtered white noise, stick-on-skin) / FmBurst (short FM chirp, metallic/digital attack) / Digital (square-wave burst, aggressive lo-fi)LfoTarget::ClickLevel)LfoTarget::ClickTune)LfoTarget::ClickDuration)5.5 Transient Shaper
Dedicated dynamics shaper for quick transient adjustment without setting up a full compressor. It runs after the compressor in the signal chain, so the shaped attack/sustain isn't squashed back down by gain reduction:
5.6 Per-Channel Compressor (with Sidechain)
Each channel features a full dynamics compressor:
A fixed, always-on safety stage (tanh soft-clip at ≈ -0.3 dBFS) follows the compressor whenever it is active, catching residual fast-attack overshoot the envelope follower can't fully suppress — there is no separate user control for it.
Sidechain Source
The compressor can use audio signal from another channel as a sidechain key (SidechainSource):
Note: even though TOMiC supports up to 16 drum channels (Chapter 1), the sidechain source list is capped at Ch1–Ch8 in the current parameter enum (SidechainSource in src/models/mod_basics.rs) — channels 9–16 cannot currently be selected as a sidechain key.
5.7 3-Band EQ (Shelf / Peak / Shelf)
Not a fully parametric 3-band EQ — it's a fixed-topology Low Shelf + Mid Peaking + High Shelf chain (each band a biquad with a fixed Q of 0.707), each band with independent frequency and gain:
EqLowGain, EqLowFreq)EqMidGain, EqMidFreq)EqHighGain, EqHighFreq)Each band bypasses itself automatically when its gain is within ±0.05 dB of 0, for zero added CPU cost when unused.
5.8 Modulation Effects
Ring Modulator
Amplitude-modulates the signal against an internal carrier oscillator with 5 selectable waveforms:
RingModWave): Sine (default, classic telephony ring mod) / Triangle / Square (max harmonic content, metallic) / Saw (asymmetric, formant-like) / Pulse (narrow 25% duty cycle, sparse/stutter-like)RingModFreq)RingModMix)RingModStereo)Frequency Shifter
Single-sideband frequency shifter operating in Hertz (Hz) — shifts frequencies linearly without preserving harmonic ratios:
FreqShift)FreqShiftMix)Phaser
Twelve-stage phaser (12 cascaded first-order allpass filters) with an exponential (log-domain) LFO sweep across a 100 Hz–8 kHz band, for rich, complex notch patterns:
PhaserRate, PhaserDepth, PhaserFeedback, PhaserMix)PhaserPosition)Chorus
2-4 voices (Chorus Voices) with selectable LFO shape (ChorusLfoShape: Sine / Triangle / Sample & Hold) and a Bass Mode toggle that restricts the chorus effect to the high-frequency band only, keeping low end mono/solid:
ChorusRate, ChorusDepth, ChorusSend, ChorusFeedback, ChorusMix, ChorusWidth)5.9 Spectral Processor (16-Band Gate / Tilt / Morph)
A 16-band resonant bandpass gate/blur processor (spectral.rs) — not FFT-based. The signal is split into 16 log-spaced resonant bandpass filters from 80 Hz to 16 kHz, each individually gated by its own envelope follower, then recombined:
SpectralSend)SpectralGate)SpectralTilt)SpectralMorph)SpectralSmooth)SpectralDecay)SpectralResonance)The L/R channels use a tiny fixed centre-frequency offset so decorrelated stereo tails result, instead of both channels gating in lockstep.
Processed after the delay/reverb stage, alongside the Rings Resonator (see 5.1's signal-flow note).
5.10 Rings Resonator FX (Res FX)
A modal resonator FX (rings_resonator.rs) inspired by Mutable Instruments Rings, used here in its "external audio excites a resonant mode bank" role — the channel's own dry signal (or an internally generated exciter) drives a bank of tuned resonant modes. It is an independent implementation built from the codebase's own Simper SVF bandpass bank and Hermite-interpolated delay line, not a port of Mutable's firmware.
RingsMode): Modal (default, harmonic → inharmonic/stretched mode ratios) / Sympathetic (unison → chord-like spread, string-sympathetic-resonance character) / String (dispersion-based, plucked/bowed string character)RingsExciter): Audio In (default — untouched passthrough of the channel's own dry signal) / Blow (Elements-style breath noise exciter) / Bow (Elements-style bowed-friction exciter); Blow/Bow replace the dry passthrough with internally generated, enveloped noiseResSend)ResFreq)ResStructure)ResBrightness)ResDamping)ResPosition)All three engines share the same 6 controls, so the knob layout never changes shape when the model is switched. Processed after the delay/reverb stage (see 5.1's signal-flow note), same as the Spectral Processor.
5.11 Spatial Effects
Delay — 3 Modes (DelayMode):
Delay Wobble)Delay Taps) with tap spread control (Delay Tap Spread)Shared controls: Time (1–5000 ms, or tempo-synced via Dly Sync + division), Feedback (0–0.95), Send, Tone, Drive, Width, Ping-Pong (Digital mode), Freeze (infinite repeats), and Duck — automatically ducks the delay's wet signal while the dry voice is playing (modulation target: DelayDuck).
Reverb — 2 Modes (ReverbMode):
Shared controls: Size, Decay (RT60 feedback), Damp (frequency-calibrated feedback-loop lowpass), Pinch (mode clustering: 0% = prime/dispersed metallic character, 100% = harmonic/tonal), Squeeze (diffusion density: low = spacious, high = dense gated cloud), Send, Pre-Delay (up to 150 ms), and Freeze (infinite sustain with input cutoff).
Stereo Widener
Haas-effect stereo widener (delays one channel by a small amount, up to ~50 ms buffer) applied after Chorus and before the Compressor in the signal chain:
WidenerAmt)5.12 Granular Grain Cloud Processor (CloudsProcessor clouds_fx)
A fifth instance of the CloudsProcessor operating as an insert effect in the channel FX chain (the other four are the OSC1/OSC2/NOISE1/NOISE2 granular oscillator sources). It granulates the full stereo audio stream — by default positioned just after the Transient Shaper and before Delay/Reverb, so the delay/reverb smear the grain cloud; enabling Cld Post instead runs it after Delay/Reverb, granulating the wet tail. Grains sustain beyond the note trigger for a granular-tail effect. Records mono (L+R sum) as the grain source while keeping the dry stereo pair intact for the Blend control.
Key parameters (all with LfoTarget::Clouds* modulation targets): Position, Grain Size (1–2000 ms), Pitch (0.25×–4×), Density, Texture, Blend (0 = fully dry — the gate that keeps a fresh channel silent until raised), Stereo Spread, Feedback, Reverb (internal grain reverb send), Freeze, and Density Sync (tempo-synced density via Cld Div).

Granular Grain Cloud Processor
Figure 5.3: Granular Grain Cloud Processor interface in the TOMiC FX chain.
5.13 Oversampling (HalfBand2x)
Integrated polyphase 2× IIR oversampling module (HalfBand2x). Automatically engaged inside the Distortion and Wavefolder modules — both of which generate high-order harmonics that would otherwise alias aggressively at the base sample rate.
Master-Bus-Only: Glue Compressor & Limiter
Beyond the Master FX chain described above (which mirrors the per-channel chain), the Master Bus carries two additional stages with no per-channel equivalent, applied after master_fx:
5.14 Stutter & Beat Repeat Glitch FX

Stutter & Beat Repeat Glitch FX
Figure 5.4: Stutter & Beat Repeat processor interface in the FX chain.
A dedicated real-time audio buffer slicer and beat repeater module (beat_repeat.rs), styled after Ableton's Beat Repeat with two extensions (per-slice reverse and a gate ratchet), available in per-channel FX chains and on the Master Bus. It always runs last in the signal chain, glitching the fully-processed insert signal.
LfoSyncDiv range from 1/32 note up to 8 bars, including straight, triplet, and dotted values. No Triplets snaps any triplet grid to its nearest straight neighbour (mirrors Ableton's "No Triplets" button).BeatRepeatMixMode):BeatRepeatVariationMode), paired with Variation Amount (how far the Grid length wanders when it rerolls):5.15 In-Process CLAP FX Hosting (Standalone Only)
In Standalone mode, TOMiC includes a built-in in-process CLAP effect host, allowing you to load third-party CLAP effect plugins on any of the 16 drum voices as well as on the Master bus.
ClapMod 1–8): Route any TOMiC internal LFO, ModEnv envelope, Marbles generator, or Macro control directly into host plugin parameters in real time.--clap-scan), protecting the main application from unstable third-party code..tomic session files and cleanly reset when loading new songs.load_clap_racks_offline).