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
| Flag | Type | Default | Meaning |
|---|---|---|---|
--change-penalty | number | 0.5 | Smoothing: higher values change chord less often |
--min-duration | time | 250ms | Shortest chord segment kept |
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. - 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"}}