ferraus match-eq
Match the long-term spectrum of a reference
Synopsis
ferraus match-eq <input> [options] [-o <output>]
What it does
Measures the long-term average spectrum of the input and of --reference, smooths both (--smoothing, fractional octaves), and applies the difference as a linear-phase FIR. Only the spectral shape is matched (the broadband level difference is removed), boosts and cuts are capped at ±12 dB, and regions with no energy in either file are left alone. Useful for agents matching takes recorded on different days or microphones.
This command is also an fx stage and a pipeline op: ferraus fx in.wav -o out.wav --fx "match-eq:key=value".
Examples
Make take 2 sound like take 1
ferraus match-eq take2.wav --reference take1.wav -o take2_matched.wav
Gentle, broad matching
ferraus match-eq mix.wav --reference ref.wav --amount 50% --smoothing 1oct -o mix_m.wav
Match a pickup line recorded on another day, following finer detail
ferraus match-eq pickup.wav --reference session.wav --smoothing 1/6oct -o pickup_matched.wav
Move a demo 70% of the way toward a reference track's tonal balance
ferraus match-eq demo.wav --reference commercial.wav --amount 70% -o demo_ref.wav
Options
| Flag | Type | Default | Meaning |
|---|---|---|---|
--reference | path | — | Audio file whose tonal balance to match Required. |
--amount | percent | 100% | How much of the measured correction to apply |
--smoothing | text | 1/3oct | Spectral smoothing width in octaves (1/3oct, 1/6oct, 1oct) |
--mix | percent | 100% | Dry/wet balance: 0% returns the input unchanged, 100% is fully processed |
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. - Percentages accept
80%or the fraction0.8; a bare80means 80x, not 80%.
For models
- MCP tool:
ferraus_match_eq - Schema:
ferraus schema match-eq - Pipeline:
{ op: match-eq, args: { ... } }(flag names with_instead of-) - fx stage: yes
{"command": "match-eq", "defaults": {"amount": "100%", "smoothing": "1/3oct", "mix": "100%"}}