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

FlagTypeDefaultMeaning
--trackerpyin | crepe | rmvpe | swiftf0pyinPitch tracker
--hoptime10msTime between frames
--rangetext60Hz..1.2kHzPitch 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

CodeMeaning
0Success
1Processing failed
2Usage or parameter error
3Input missing or unreadable
4Unsupported format or codec
5Model not cached and downloads disabled
6Model download or verification failed
8Cancelled
10Network error
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.

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"}}