R2Project. Plugins

VST3 & Audio Unit · macOS

VocalFilter

VocalFilter

Three-formant vocal-tract model · Effect

A new design on the DXi port template.

Download for macOS VocalFilter-1.0.1.0.pkg · 1.7 MB · Universal · signed & notarised

Version 1.0.1.0. Installs a VST3 and an Audio Unit, each selectable separately. Quit your DAW first — a running host holds the old copy open.
Release notes and checksum · Source

The VocalFilter plug-in window
The VocalFilter panel on the Aaaa preset, with the filter response drawing all three formants and their sum. A layout render generated from the editor's own constants, so it cannot drift from the code.

VocalFilter is a three-formant vocal-tract model as a VST3 and Audio Unit effect for macOS. Stereo in, stereo out. Feed it anything with harmonics and it puts a vowel on it.

New in 1.0.1.0

The maker is now “AE Cobley”, in both formats — it was “A. E. Cobley”. REAPER files an Audio Unit's presets under its name cut off at the first full stop, so every A. E. Cobley Audio Unit shared one REAPER preset list and showed the others' presets, which did nothing when chosen. The plug-in's identity codes are unchanged, so projects saved with earlier versions still open with VocalFilter in place. Hosts that list plug-ins by maker now show it under AE Cobley. Nothing in the sound changed.

After upgrading. Presets you saved in a host that files them by maker are in ~/Library/Audio/Presets/A. E. Cobley/VocalFilter — move them to ~/Library/Audio/Presets/AE Cobley/VocalFilter to see them again. In REAPER, Audio Unit presets you saved earlier stay in its old shared list; the VST3 is unaffected.

What it does

On each channel, three bandpass resonators in parallel, summed, mixed against the dry signal and trimmed:

Parallel rather than cascaded because a parallel bank lets each formant carry its own amplitude, which is the point of dialling a vowel by hand. F2 is summed inverted: three bandpasses added in phase cancel between the peaks and dig a null a real tract does not have.

The filters are RBJ constant-0 dB-peak bandpasses, so a formant's Level is its level and the Width control is not secretly a second gain.

The five vowels, in two voices

One button each, a Vowel parameter the host can automate, and a Voice switch between an adult male and an adult female tract.

Formant frequencies, bandwidths and levels for the five vowels in the adult-male voice. Frequencies and bandwidths in hertz, levels in decibels.
Vowel SoundF1F2F3 B1B2B3 A1A2A3
Aaaa/ɑ/ father7301090244080901200−3.3−26.8
Eeee/i/ beet27022903010501001400−8.0−2.3
Iiii/ɪ/ bit39019902550601001300−8.2−7.6
Oooo/o/ boat450900240060901200−7.4−30.0
Uuuu/u/ boot300870224050901200−10.2−30.0

Frequencies in hertz, levels in decibels. These are the classic adult-male means from Peterson & Barney (1952), so all five sit in one consistent voice. The exception is Oooo: the letter O names a diphthong, /oʊ/, which they did not measure, so that row carries the common /o/ set and is marked as such in the source.

The female table is their adult-female means — a shorter tract, so every formant higher: Aaaa becomes 850/1220/2810 and Eeee 310/2790/3310. Oooo is scaled from the male /o/ set by the mean male-to-female ratio of the three back vowels they did measure. Bandwidths sit mid-range of the measured adult spread, narrower at B1 for the close vowels.

Levels are derived, not chosen. A vocal tract is an all-pole filter, so formant amplitudes are a consequence of the frequencies rather than free parameters — which is why a cascade synthesiser needs no amplitude controls and a parallel one cannot do without them. Each pair is fitted against the all-pole cascade those formants imply.

Both voices share those levels, deliberately: a shorter tract moves where the resonances sit, not much how they are balanced. Refitting them for the female set puts one formant outside its parameter's range and gives /i/ no F2 peak at all.

Controls

Parameter ranges and defaults
F1 / F2 / F3 Freq200–1200, 500–3000, 1500–4000 Hz — defaults to the Aaaa patch
F1 / F2 / F3 Width20–400 Hz — defaults 80 / 90 / 120
F1 / F2 / F3 Level−40 … +12 dB — defaults 0 / −3.3 / −26.8
Dry / Wet0–100 % — default 100
Glide0–2000 ms — default 150
Output Trim−60 … 0 dB — default 0
VowelManual, Aaaa, Eeee, Iiii, Oooo, Uuuu — default Manual
VoiceMale, Female — default Male

Glide is how long a formant takes to reach a new value. It is a timed linear ramp, one length for all nine parameters, so however far each has to travel they all arrive on the same sample. 150 ms by default because that is roughly what a diphthong glide takes in speech. Zero is floored at 20 ms — an instant jump of F2 from 870 Hz to 2290 Hz is a click.

Vowel is a mode. While it is on a preset the DSP uses that vowel's values and the nine formant parameters are ignored; touching a slider on the panel captures the preset's values and switches back to Manual, so nothing jumps.

Voice picks which of the two tables a preset comes from. It is read by the processor the same way, so it works with the editor closed and under automation, and a voice change glides exactly as a vowel change does — it just moves F2 by at most 3.8 semitones against up to 16.8, so the same Glide time sounds far less dramatic.

The display

The display draws each formant's response — F1 yellow, F2 green, F3 blue — and the summed response in white, following the DSP in real time as it glides. The axis is fixed at 80 Hz to 8 kHz and +12 to −66 dB so two vowels can be compared; the floor is that low because three resonators summed with alternating polarity notch far deeper than any of them does alone.

Signal routing

The three parallel bandpasses, the inverted F2 sum, the dry path, and how the voice switch, vowel selector and glide reach the filters. — open the drawing full size.

Specification

Technical specification for VocalFilter
Formats VST3 (.vst3) and Audio Unit v2 (.component), built from one CMake project
KindEffect
Audio Unit identity aufx / VcFl / AECo — check it with auval -v aufx VcFl AECo
ArchitectureUniversal 2 — Apple Silicon and Intel
RequiresmacOS 10.13 or later
SigningDeveloper ID, notarised by Apple
Version1.0.1.0 (v1.0.1.0)
Installer VocalFilter-1.0.1.0.pkg, 1.7 MB
Installs to /Library/Audio/Plug-Ins/VST3/ and /Library/Audio/Plug-Ins/Components/, each selectable separately in the installer
Licence Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA-4.0)
Source github.com/acobley/VocalFilter-VSTi
Download for macOS VocalFilter-1.0.1.0.pkg · 1.7 MB · Universal · signed & notarised

Version 1.0.1.0. Installs a VST3 and an Audio Unit, each selectable separately. Quit your DAW first — a running host holds the old copy open.
Release notes and checksum · Source