ferraus analyze pitch
Pitch curve as JSON or CSV
Synopsis
ferraus analyze pitch <input> [options] [-o <output>]
What it does
Frame-by-frame fundamental frequency (Hz, 0 when unvoiced), voicing confidence, voiced flag and RMS, plus segmented notes and a summary. Prints JSON in the result by default; with -o file.csv writes CSV, with -o file.json writes the JSON there.
Examples
Pitch curve and notes as JSON
ferraus analyze pitch vocal.wav --json
Write a 5 ms pitch curve as CSV
ferraus analyze pitch hum.wav --hop 5ms --range 80Hz..800Hz -o curve.csv
Track a bass line with a low range and save the JSON
ferraus analyze pitch bass.wav --range E1..G3 -o bass_pitch.json
Options
| Flag | Type | Default | Meaning |
|---|---|---|---|
--tracker | pyin | crepe | rmvpe | swiftf0 | pyin | Pitch tracker |
--hop | time | 10ms | Time between frames |
--range | text | 60Hz..1.2kHz | Pitch range searched, low..high (Hz, kHz or note names) |
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 |
| 5 | Model not cached and downloads disabled |
| 6 | Model download or verification failed |
| 8 | Cancelled |
| 10 | Network error |
| 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.
For models
- MCP tool:
ferraus_analyze_pitch - Schema:
ferraus schema analyze pitch - Pipeline:
{ op: analyze pitch, args: { ... } }(flag names with_instead of-) - fx stage: no
{"command": "analyze pitch", "defaults": {"tracker": "pyin", "hop": "10ms", "range": "60Hz..1.2kHz"}}