Under the hood

How rusty-amp works

Your guitar runs through a full signal chain — pedals, amp, cabinet, and a stereo effects rack — sample by sample. Here's every stage.

The short version

8× oversampled drive

The amp's distortion stages run at 8× oversampling (linear-phase polyphase-FIR) for smooth, alias-free high-gain saturation.

🎚️

Real FMV tone stack

The tube amps use a passive FMV tone stack — interacting controls and inherent mid scoop — plus modelled power-amp ↔ speaker interaction.

📐

IR convolution cabs

Cabinets are rendered by multi-mic impulse-response convolution via a partitioned-FFT engine, for three-dimensional depth.

Full signal chain

Every block below is processed per sample. Bracketed stages are [bypassable] — remove or bypass them and they drop out of the path entirely.

GuitarMono in
Dry signal from your high-impedance instrument input.
Noise GateBypassable
Envelope follower → gain ramp (smooth open/close to avoid clicks).
WhammyBypassable
Two-tap crossfaded varispeed delay line → ±12-semitone transpose → wet tone LP, blended with dry.
Auto-WahBypassable
Envelope follower (fast attack / slow release) → sweeps a resonant TPT state-variable bandpass (~300 Hz–3 kHz) → dry/wet blend · FREQ base position · SENS auto-sweep · Q resonance.
CompressorBypassable
Peak-follower detector → hard-knee gain computer (2:1–10:1) → smoothed gain + auto makeup.
FuzzBig Muff styleBypassable
DC block → 70 Hz HP → [4× OS: two cascaded asymmetric soft-clip stages] → DC block → 700 Hz mid scoop → variable tone LP.
TS-808 Tube ScreamerBypassable
DC block → 340 Hz HP → 720 Hz mid-peak → [4× OS: asymmetric diode soft-clip] → output coupling cap (DC block) → variable tone LP.
DS-1 DistortionBypassable
DC block → 80 Hz HP → 800 Hz mid-emphasis → [4× OS: pre-clip HP → near-symmetric cubic diode clip] → post-clip HP → tilt tone → 6.5 kHz post-clip LP.
ML-2 Metal CoreBypassable
DC block → 90 Hz HP → fixed 650 Hz mid-scoop → [8× OS: pre-clip HP → two cascaded soft-clip stages] → post-clip HP → active Low/High shelves (±15 dB) → 7 kHz post-clip LP.
Pre-amp EQBypassable
Low shelf (100 Hz) → Mid peak (650 Hz) → High shelf (3 kHz) — each ±12 dB · shapes what the amp clips.
AmpSwitchable live
8× oversampled nonlinear stages (linear-phase polyphase-FIR anti-alias) + dynamic grid-bias “bloom” for touch sensitivity.
JCM800 — dual 12AX7 atan soft-clip + grid-blocking → passive FMV tone stack → tube sag with 100 Hz supply ripple (ghost notes) → speaker-load bloom → dynamic NFB presence
Mesa DR — triple gain stage (atan → atan → exponential) + grid-blocking → passive FMV tone stack → silicon sag with 120 Hz supply ripple → speaker-load bloom → dynamic NFB presence
Randall — FET → BJT → rail-clip → active tone stack → stiff solid-state power section → static speaker load
CabinetMono → StereoSwitchable live
Nonlinear speaker drive (excursion-driven motor droop · cone breakup · thermal power compression · Doppler FM growl — calibrated to engage at real amp levels) → neighbour-cone interference from real 4×12 geometry → dust-cap & grille echoes (2–8 kHz presence/air comb) → blended multi-mic impulse-response convolution of a 4×12 — close SM57 dynamic + R121 ribbon + room mic, each a ~93 ms voiced-EQ skeleton + dense reflection tail + cone-resonance ring + mid/breakup scatter texture; mono-solid close blend + decorrelated room pair → solid centre with natural width · mic-position shelf.
Parametric EQStereoBypassable
Low shelf (120 Hz) → Mid peak (800 Hz, Q 1.5) → High shelf (5 kHz) — each ±15 dB.
FlangerStereoBypassable
LFO-swept short delay (~0.5–5 ms) mixed with the dry signal — moving comb notches · RATE 0.05–5 Hz · DEPTH · FEEDBACK 0–90% · dry/wet MIX · L/R read a quarter-cycle apart for stereo drift.
ChorusStereoBypassable
LFO-swept long delay (~8–20 ms), no feedback, mixed with the dry signal — lush pitch-shimmer, not a comb sweep · RATE 0.05–5 Hz · DEPTH · dry/wet MIX · L/R read half a cycle apart for stereo width.
PhaserStereoBypassable
4-stage LFO-swept all-pass cascade summed with the dry signal — sweeping notches in the dry+wet sum · RATE 0.05–5 Hz · DEPTH (~200 Hz–1.6 kHz) · FEEDBACK 0–90% resonance · dry/wet MIX · L/R read a quarter-cycle apart for stereo width.
DelayBypassable
Stereo ping-pong — repeats bounce L↔R · TIME 0–500 ms · FEEDBACK 0–85% · dry/wet MIX.
Stereo ReverbBypassable
Dual decorrelated Freeverb cores (8 parallel combs → 4 series allpasses each) → dry/wet mix.
Master bus
Mid/side stereo widener (mono centre preserved).
OutputStereo L / R
Per-channel output soft limiter → stereo (L, R).

For the per-knob behaviour of each pedal, see Pedals & effects.

The amp stages

All three amps share an 8× oversampled nonlinear core with a linear-phase polyphase-FIR anti-alias filter, plus a dynamic grid-bias "bloom" that makes the gain respond to how hard you play. Beyond that, each model diverges:

Model Character Tone stack Rectifier / power Gain stages
Marshall JCM800 Punchy, dynamic, touch-sensitive Passive FMV (Marshall values) Tube sag (5 ms / 150 ms) + 100 Hz supply ripple + dynamic speaker-load bloom 2 × 12AX7 atan soft-clip
Mesa Dual Rectifier Compressed, aggressive, modern Passive FMV (Fender values) Silicon sag (0.5 ms / 80 ms) + 120 Hz supply ripple + dynamic speaker-load bloom 3-stage: atan → atan → exponential
Randall Warhead Tight, crushing, solid-state Active, independent bands + fixed +3 dB presence No sag — stiff solid-state rails + static speaker resonance FET (x/√(1+x²)) → BJT (tanh) → rail-clip

The passive FMV tone stack is a single RC network where bass, mid, and treble interact and the mids inherently scoop — exactly like a real amp — followed by a power-amp ↔ speaker interaction model: the speaker's impedance resonance blooms the low end dynamically as the supply sags under hard playing. The Randall keeps an active, independent-band stack and a small static speaker resonance, true to its stiff solid-state design. See Amps & cabinets for the per-knob breakdown.

Three further pieces of tube-amp physics live in the two tube models:

Cabinet convolution

Each cabinet is rendered by impulse-response convolution rather than a plain EQ. The built-in IRs are synthesized in-code (nothing to ship or download — though you can also load your own .wav IR): the model's voiced EQ provides the magnitude skeleton, then early reflections (comb filtering), a dense 6–21 ms cabinet/room reflection tail, and speaker modal resonances add the time-domain depth of a real miked cab. The cone "thump" ring is deliberately short — measured reference captures are gated tight, and a long synthetic ring reads as boxy mud rather than depth. Every cab's tonal balance, body-over-pocket tilt, spectral texture, echo density and stereo image are measured against real commercial captures (God's Cab, Softube) with examples/cab_analysis.rs, so a regression on any of those axes shows up as numbers, not vibes.

Each IR runs ~93 ms (~4500 taps at 48 kHz) — long enough for the reflection tail to fully develop. On top of the hand-authored modes, two seeded scatter clusters per channel add small, irregularly-placed high-Q resonances: one across the cone-breakup band, and one through the 0.55–2.3 kHz mids, where real captures carry a couple of dB of fine reflection ripple that hand-authored taps alone can't reproduce (without it the mids read as statistically "airbrushed"). The close-mic textures are shared between left and right: real close captures are effectively mono (L/R correlation 1.0), and detuned per-side textures measure as phasey width that smears the centre image. Only the scatter seeds differ per channel — like a real speaker pair, whose breakup patterns never match — while the room-mic pair stays genuinely decorrelated, for a solid centre with natural width.

The convolution engine

The convolution is computed with a partitioned-FFT (uniformly-partitioned overlap-save) engine rather than a direct tap-by-tap loop. At ~4500 taps per channel this is the single heaviest DSP stage, and the frequency-domain approach cuts its cost several-fold while producing the exact same linear convolution — so the tone is unchanged. The only trade-off is a fixed ~2.7 ms of latency (128 samples at 48 kHz), shared equally by both channels so the stereo image stays aligned.

Three mics, one blend

Each cabinet is captured by three mics — a close SM57 dynamic, a close R121 ribbon, and a room mic — each with its own voicing and reflection texture (the room mic carries extra pre-delay and denser late reflections for air). The Blend and Room knobs mix these captures. Because convolution is linear, the blend is just a weighted sum of the three IRs, recombined into the live convolver only when a knob moves — so any mic mix costs exactly two convolutions per sample, no more.

The Mic knob applies a high-shelf filter (±6 dB at 5 kHz) per channel after convolution, modelling the tonal difference between an on-axis and off-axis close-mic placement. See cabinet models for the per-cab voicing.

Neighbour cones and the last drop of iron

A close mic on one cone of a 4×12 also hears the three neighbouring cones — the same signal arriving late and dull (heard far off-axis, where a 12" cone beams its top end away). rusty-amp derives these arrivals from the actual box geometry: 12" drivers on a ~28 cm pitch with the mic capsule ~10 cm from the near cone ("an inch from the grille" plus the grille standoff and the cone's recess) put the two adjacent cones ~0.6 ms late and the diagonal one ~0.9 ms late, each lowpassed above ~2.2 kHz and 13–23 dB down. Each neighbour is an extended source — a 12" cone, not a point — so its arrival is smeared across a short cluster of sub-taps: the comb ripples the body by a couple of dB, like the echo scans of real 4×12 captures, instead of carving a deep notch through the 0.5–1 kHz body the way a single point tap measures.

An octave higher, the last acoustic surfaces between the cone and the capsule add their own dust-cap & grille echoes. The metal front grille sits a couple of cm proud of the cone, so treble radiated forward reflects off it and back to the mic — a ~0.13 ms round-trip echo that combs the presence band (peak ~3.9 kHz, null ~7.8 kHz). Long wavelengths simply diffract past the perforations, so the reflected copy is highpassed and only the top is combed — the metallic sheen a close capture picks up off the grille (the effect God's Cab's grill captures lean on). A second, much shorter reflection — ~45 µs off the rigid central dust cap, which sits proud of the surrounding cone and beams the extreme top from nearer the capsule — ripples only the very top. Both are power-normalised so they add 2–8 kHz comb structure, not level, and their depth is kept gentle: measured against the reference captures, a hotter grille bounce starts carving the 1.6–2.6 kHz octave real IRs hold. Finally, a genuinely tiny mic/transformer saturation (the SM57's output iron, the ribbon's step-up transformer) squeezes the hottest peaks by a fraction of a dB — the last, subtlest nonlinearity in the capture chain.

← Back
Tools