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.
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:
- Ghost notes (supply ripple). A real B+ rail is rectified mains, so a ripple at twice the mains frequency (100 Hz for the UK-built JCM800, 120 Hz for the US-built Recto) rides on the supply and grows as hard playing loads it down. That ripple amplitude-modulates the power stage, putting faint sidebands ±100/120 Hz around every note — the subliminal "big amp working hard" texture. At idle it all but vanishes.
- Grid-blocking distortion. Beyond the gentle cathode-bias give, a truly slammed input (a boost into a cranked front end, a violent transient) drives grid current that charges the coupling cap near-instantly, choking the stage — the note's attack spits, then the charge bleeds off over the grid-leak RC (~30 ms) and the gain recovers into the note. Ordinary playing never touches it.
- Dynamic presence. Presence lives inside the power-amp negative-feedback loop, so it changes with drive: as the power stage saturates the loop loses authority, the knob's range shrinks, and the top end settles toward the amp's fixed open-loop lift — rather than sitting on a static shelf.
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.