ferraus vocoder

Vocoder: make a carrier speak or sing with the input's voice

Synopsis

ferraus vocoder <input> [options] [-o <output>]

What it does

The input is the modulator (usually a voice). --carrier is an audio file, or a built-in oscillator (saw, square, pulse, noise) at --note, following the voice's detected pitch (--follow), or playing a MIDI file (--midi part.mid). Bands are log-spaced over --range. With --unvoiced noise, sibilants (detected by their high-band energy ratio) are re-synthesized from a noise carrier so consonants stay intelligible. --mode classic is a filter-bank channel vocoder; --mode spectral is STFT cross-synthesis (smoother, suits high band counts). The output level matches the modulator.

This command is also an fx stage and a pipeline op: ferraus fx in.wav -o out.wav --fx "vocoder:key=value".

Examples

Classic robot voice on a C3 saw

ferraus vocoder vox.wav --carrier saw --note C3 -o robot.wav

Saw that follows the singer's pitch

ferraus vocoder vox.wav --carrier saw --follow -o sung.wav

Vocoded chords from a MIDI part

ferraus vocoder vox.wav --carrier square --midi chords.mid --bands 32 --mode spectral -o choir.wav

Make a pad talk, formants up 3 semitones

ferraus vocoder vox.wav --carrier synth_pad.wav --formant-shift +3 -o pad_talk.wav

Options

FlagTypeDefaultMeaning
--carriertextsawAudio file, or saw, square, pulse, noise or plugin:<name> (an installed instrument plugin playing --midi, --follow, or --note)
--notefrequencyC3Oscillator pitch when not following or playing MIDI
--followflag—Oscillator follows the modulator's detected pitch
--midipath—MIDI file whose notes play the oscillator carrier (polyphonic)
--bandsinteger24Number of bands Range: 8..64.
--rangetext80Hz..8kHzFrequency range of the bands (log spaced)
--attacktime5msBand envelope attack
--releasetime30msBand envelope release
--formant-shiftcents|semitones0Shift the vocal formants in semitones (+ brighter/smaller, - darker/bigger)
--unvoicednoise | offnoiseRe-synthesize sibilants from noise
--modeclassic | spectralclassicFilter-bank or STFT vocoder
--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
7Plugin crashed, timed out, or was not found
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.

For models

  • MCP tool: ferraus_vocoder
  • Schema: ferraus schema vocoder
  • Pipeline: { op: vocoder, args: { ... } } (flag names with _ instead of -)
  • fx stage: yes
{"command": "vocoder", "defaults": {"carrier": "saw", "note": "C3", "bands": "24", "range": "80Hz..8kHz", "attack": "5ms", "release": "30ms", "formant_shift": "0", "unvoiced": "noise", "mode": "classic", "mix": "100%"}}