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
| Flag | Type | Default | Meaning |
|---|---|---|---|
--carrier | text | saw | Audio file, or saw, square, pulse, noise or plugin:<name> (an installed instrument plugin playing --midi, --follow, or --note) |
--note | frequency | C3 | Oscillator pitch when not following or playing MIDI |
--follow | flag | — | Oscillator follows the modulator's detected pitch |
--midi | path | — | MIDI file whose notes play the oscillator carrier (polyphonic) |
--bands | integer | 24 | Number of bands Range: 8..64. |
--range | text | 80Hz..8kHz | Frequency range of the bands (log spaced) |
--attack | time | 5ms | Band envelope attack |
--release | time | 30ms | Band envelope release |
--formant-shift | cents|semitones | 0 | Shift the vocal formants in semitones (+ brighter/smaller, - darker/bigger) |
--unvoiced | noise | off | noise | Re-synthesize sibilants from noise |
--mode | classic | spectral | classic | Filter-bank or STFT vocoder |
--mix | percent | 100% | 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
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Processing failed |
| 2 | Usage or parameter error |
| 3 | Input missing or unreadable |
| 4 | Unsupported format or codec |
| 7 | Plugin crashed, timed out, or was not found |
| 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.
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%"}}