ferraus reverb
Add reverb (plate, room, hall, chamber, or an impulse response)
Synopsis
ferraus reverb <input> [options] [-o <output>]
What it does
Algorithmic reverb: a Dattorro plate for 'plate', and an 8-line feedback delay network with Hadamard mixing for 'room', 'chamber', and 'hall'. --decay is the time for the tail to fall 60 dB. With --ir <file> the input is convolved with an impulse response instead (partitioned FFT convolution; the IR's sample rate is matched automatically, its silent tail below --trim-ir is cut, and pre-delay defaults to 0 ms). The output keeps the input's length unless --tail adds room for the reverb to ring out.
This command is also an fx stage and a pipeline op: ferraus fx in.wav -o out.wav --fx "reverb:key=value".
Examples
Default plate at 25%
ferraus reverb vox.wav -o vox_verb.wav
Short room on a snare
ferraus reverb snare.wav --type room --decay 0.8s --mix 20% -o snare_room.wav
Long hall that rings out past the end
ferraus reverb pad.wav --type hall --decay 4s --tail 4s --mix 35% -o pad_hall.wav
Convolution with an impulse response
ferraus reverb vox.wav --ir church.wav --mix 30% --tail 3s -o vox_church.wav
Options
| Flag | Type | Default | Meaning |
|---|---|---|---|
--type | plate | room | hall | chamber | plate | Algorithm |
--size | percent | 50% | Room size (scales the delay network) |
--decay | time | 1.8s | Time for the tail to decay by 60 dB (RT60) |
--damping | percent | 50% | How much faster high frequencies die away |
--predelay | time | 20ms | Gap before the reverb starts (0ms default with --ir) |
--lowcut | frequency | 120Hz | High-pass on the reverb (keeps lows clean; 0Hz = off) |
--highcut | frequency | 8kHz | Low-pass on the reverb (0Hz = off) |
--width | percent | 100% | Stereo width of the reverb (0% mono, 200% extra wide) |
--mix | percent | 25% | Dry/wet: 0% returns the input, 100% is reverb only |
--ir | path | — | Impulse response file for convolution reverb |
--trim-ir | gain | -60dB | Cut the IR where it falls below this level relative to its peak |
--tail | time | 0s | Extra length appended so the reverb can ring out (0s keeps the input length) |
Global options
Every command also accepts the global options (-o, --json, --dry-run, --overwrite, --progress, ...). See Global options.
Exit codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Processing failed |
| 2 | Usage or parameter error |
| 3 | Input missing or unreadable |
| 4 | Unsupported format or codec |
| 8 | Cancelled |
| 70 | Internal error (bug) |
Common mistakes
- Forgetting that outputs are never overwritten: pass
--overwriteor a new-opath when re-running. - Beat-based times (
4b,1/4) need a tempo: pass--bpmor write4b@120. - Percentages accept
80%or the fraction0.8; a bare80means 80x, not 80%. - Gains need a unit when not in dB:
0.5xis a factor,-6and-6dBare decibels.
For models
- MCP tool:
ferraus_reverb - Schema:
ferraus schema reverb - Pipeline:
{ op: reverb, args: { ... } }(flag names with_instead of-) - fx stage: yes
{"command": "reverb", "defaults": {"type": "plate", "size": "50%", "decay": "1.8s", "damping": "50%", "predelay": "20ms", "lowcut": "120Hz", "highcut": "8kHz", "width": "100%", "mix": "25%", "trim_ir": "-60dB", "tail": "0s"}}