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

FlagTypeDefaultMeaning
--referencepath—Audio file whose tonal balance to match Required.
--amountpercent100%How much of the measured correction to apply
--smoothingtext1/3octSpectral smoothing width in octaves (1/3oct, 1/6oct, 1oct)
--mixpercent100%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

CodeMeaning
0Success
1Processing failed
2Usage or parameter error
3Input missing or unreadable
4Unsupported format or codec
8Cancelled
70Internal error (bug)

Common mistakes

  • Forgetting that outputs are never overwritten: pass --overwrite or a new -o path when re-running.
  • Percentages accept 80% or the fraction 0.8; a bare 80 means 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%"}}