ferraus analyze chords

Chord sequence with times and confidence (best-effort)

Quality tier: best-effort. Results are reported with a quality or confidence estimate.

Synopsis

ferraus analyze chords <input> [options] [-o <output>]

What it does

Peak-picked chroma matched against harmonic-aware templates for major, minor, 7, maj7, m7, dim, sus4, and sus2 chords, with a bass-note cue for slash chords and Viterbi smoothing. Best-effort: reliable on clear harmonic material, approximate on dense mixes.

Examples

Chord labels such as C, Am7, G/B with times

ferraus analyze chords song.wav --json

Fewer, steadier chord changes on a strummed part

ferraus analyze chords guitar.wav --change-penalty 1.5 --json

Drop chord segments shorter than half a second and save the result

ferraus analyze chords piano.wav --min-duration 500ms --json > chords.json

Options

FlagTypeDefaultMeaning
--change-penaltynumber0.5Smoothing: higher values change chord less often
--min-durationtime250msShortest chord segment kept

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.
  • Beat-based times (4b, 1/4) need a tempo: pass --bpm or write 4b@120.
  • Treating best-effort output as final: check the reported quality/confidence in --json.

For models

  • MCP tool: ferraus_analyze_chords
  • Schema: ferraus schema analyze chords
  • Pipeline: { op: analyze chords, args: { ... } } (flag names with _ instead of -)
  • fx stage: no
{"command": "analyze chords", "defaults": {"change_penalty": "0.5", "min_duration": "250ms"}}