105 Voder

synthformantvocalspeechemulationfilterusb-hostmidi

The Voder was the first machine that could talk, demonstrated at the 1939 New York World's Fair and invented by Homer Dudley at Bell Labs. It had no vocabulary and no text input: it made two raw sounds, a buzz and a hiss, and a trained operator shaped them into speech in real time using ten finger keys, a wrist bar and a foot pedal. Operators trained for months.

This card is that instrument with eight bandpass filters instead of ten, played from its own panel or from a Music Thing 8mu over USB MIDI Host. It is not a vocoder and not a text-to-speech engine - nothing analyses an input signal and nothing knows what a word is. What comes out is whatever your hands put in.

Turning the card on gives BABBLE, where each knob drives several things at once so it talks from a single gate with nothing else attached. Main sweeps the vowel and the pitch together, X sets how fast and bright the syllables are, and Y runs from a rounded hum to a breathy whisper. Switch up for a second page that shapes the voice itself rather than what it is saying: size, animation and consonants. The momentary switch is a gate - hold it and the card sounds for as long as you hold it, with nothing patched at all. Hold it for two seconds and it starts talking by itself in phrases, with pauses long enough to read as breaths.

Holding the switch down at power-on gives the deliberate mode instead, one knob to one parameter, where the vowel is a point in a three-dimensional space: how open the mouth is, whether the tongue is forward or back, and how far the lips are rounded. Every vowel lives somewhere in that cube, with diphthongs on the way between.

With an 8mu the two vowel axes are on faders 1 and 8, the outermost pair, so the hand spans the device; rounding is the left-right lift of the controller. Fader 3 is breath, fader 4 pitch, fader 5 brightness, fader 7 volume, and faders 2 and 6 shape the plosive. Tilting front to back swings the volume either side of the fader, so a phrase can be swelled and ducked without letting go of anything.

Every CV input adds to its control rather than replacing it, so a random voltage wanders the sound around wherever the knobs are parked and nothing goes dead when a cable goes in. CV In 2 sweeps the vowel cube diagonally, which is the input to patch a sample-and-hold into. Audio In 1 sums with the internal sources rather than replacing them, so the card can speak over whatever is patched in, both shaped by the same vowel.

Technical: eight 2-pole IIR bandpass sections at 250, 450, 700, 1000, 1400, 1900, 2600 and 3800 Hz, Q=4, entirely fixed point with Q15 coefficients. The buzz is a polyBLEP-corrected sawtooth. Core 0 runs the 48 kHz audio interrupt at 192 MHz; Core 1 owns the TinyUSB host stack and nothing else, and never parses inside a USB callback. All code is copied to RAM to keep flash-cache jitter out of the audio path. The whole engine is 32-bit integer arithmetic - measured at 60% of the per-sample budget on hardware, where the 64-bit version it replaced was at 100%.

Panel

Workshop Computer panelVOWEL SWEEPCHATTERCHARACTERExciterVolumePitchFormantClickGateOutOutEnergyVowelVoicedFrozen

Controls

Main knob

VOWEL SWEEP
BABBLE page 1. Walks the vowel diagonally across the cube while raising the pitch with it - one knob for a whole spoken gesture. In the deliberate mode this is OPENNESS, the cube's first axis: how far the jaw is open (F1).

X knob

CHATTER
Syllable rate and brightness together, 2 to 20 Hz. Faster and brighter are the two things that make speech sound hurried. In the deliberate mode this is FRONT, the cube's second axis: where the tongue sits (F2).

Y knob

CHARACTER
Breath against rounding - a rounded hum at one end, a breathy whisper at the other. In the deliberate mode this is BREATH alone, a ratio rather than a level: it changes how breathy the voice is, not how loud.

Switch

Page 2: In BABBLE, who is saying it - voice size, animation, consonants. In the deliberate mode, pitch, brightness and rounding. Between the two pages the panel reaches every parameter the 8mu can.

Page 1: In BABBLE, what is said - vowel sweep, chatter rate, character. In the deliberate mode, openness, front and breath.

Gate / auto-chatter: Spring-loaded. Holding it sounds the card for as long as it is held - the panel's copy of Pulse In 2, so the card can be played from the panel alone with nothing patched. It sustains rather than chatters, because a finger on a button is one continuous intent where a gate from a sequencer is a stream of events. In BABBLE, holding it for two seconds engages auto-chatter, where the card talks by itself in phrases until the switch is tapped again; the LEDs fill left to right du…

Inputs & Outputs

Inputs

Outputs

Inputs

Audio 1

Exciter
External audio, summed with the internal buzz and noise rather than replacing them - so the card can speak over whatever is patched in, both shaped by the same vowel.

Audio 2

Volume
Bipolar CV over the output level, swelling and ducking around the base level rather than replacing it - an envelope here articulates a phrase without controlling absolute level.

CV 1

Pitch
1V/oct control of the buzz oscillator's F0.

CV 2

Formant
Bipolar CV that sweeps the vowel cube along its diagonal, opening the mouth as the tongue moves back. One random voltage here walks through recognisably different vowels.

Pulse 1

Click
Fires a plosive burst on the rising edge, retriggering, so a fast gate stream stutters it.

Pulse 2

Gate
Glottal gate. Opens fully up to about 200 Hz and above that becomes amplitude modulation rather than clicking.

Outputs

Audio 1

Out
Mono Voder output.

Audio 2

Out
The same mono output, duplicated for convenience.

CV 1

Energy
Formant energy envelope, smoothed to roughly 5 ms - follows how much the filter bank is passing rather than the audio itself.

CV 2

Vowel
The openness axis of the vowel cube as a control voltage, 0-5 V from closed to open. In BABBLE and auto-chatter it wanders on its own, so it is a modulation source musically related to what is being heard rather than an unrelated LFO.

Pulse 1

Voiced
High while the buzz dominates the noise.

Pulse 2

Frozen
High while formant freeze is latched.

LEDs

LED 1

Bands 1-2
Energy in the 250 and 450 Hz bands. LEDs 0 to 3 are the formant display, one per pair of bands, so the vowel being made is visible as a shape rather than a level. At boot these show a chase across all six while the switch settles, then even LEDs for BABBLE and odd for the deliberate mode - nothing is shown until the switch has been read once, after the full boot window, so the mode is never guessed at. Holding the switch down in the deliberate mode turns LEDs 0-3 into a silence diagnostic: exci…

LED 2

Bands 3-4
Energy in the 700 and 1000 Hz bands.

LED 3

Bands 5-6
Energy in the 1400 and 1900 Hz bands.

LED 4

Bands 7-8
Energy in the 2600 and 3800 Hz bands.

LED 5

8mu
Lit while a USB MIDI controller is mounted.

LED 6

Voiced
Bright while voiced, dim while unvoiced. Pulses with each syllable while auto-chatter is running, so the panel shows the card is talking by itself rather than merely left switched on. All six LEDs go to an even half brightness while the formants are frozen, and dimmer still while muted - a flat glow is unlike every other display on the card, so a frozen or muted card cannot be mistaken for a broken one.

README

Voder

A voice you play with your hands.

A program card for the Music Thing Modular Workshop System Computer, based on the Voder — the filter and formant based voice-synthesis machine demonstrated at the 1939 New York World's Fair, invented by Homer Dudley at Bell Labs.

Play it from the panel, or from a Music Thing 8mu over USB MIDI Host.

What it does

  • Two excitation sources. A bandlimited buzz at F0 for voiced sounds, white noise for sibilants.
  • Eight fixed bandpass filters at 250, 450, 700, 1000, 1400, 1900, 2600 and 3800 Hz.
  • Plosive bursts for the stop consonants the original had dedicated keys for.
  • A vowel cube you steer with two or three controls.

Two modes

How to get it What it is Boot LEDs
MAIN BOOT Just turn the card on BABBLE — every knob drives several things at once, so it talks from a single gate with nothing else attached even (0, 2, 4)
ALT BOOT Hold the switch down at power-on Deliberate — one knob, one parameter odd (1, 3, 5)

MAIN BOOT — BABBLE

Page 1 — what is said (switch middle or down)

Knob Controls
Main Vowel diagonal and pitch — one sweep walks through vowels, rising as it goes
X Chatter rate and brightness — clockwise is faster and brighter
Y Breath against rounding — a rounded hum at one end, a breathy whisper at the other

Page 2 — who is saying it (switch up)

Knob Controls
Main Voice size — pitch, brightness and vowel placement together, from a small bright voice to a large dark one
X Animation — how much the voice wanders between syllables
Y Consonants — how many syllables get a plosive, and how loud

Set a voice on page 2, then play it on page 1.

Talking

Hold a gate on either pulse input and it chatters, 2 Hz to 20 Hz across Knob X. Each syllable is voiced for three quarters of its period, which is roughly what connected speech does — the silences in speech are the stop closures, not gaps between notes.

The momentary switch is a gate

Hold the switch down and the card sounds for as long as you hold it — it is the panel's copy of Pulse In 2, so the card can be played from the panel alone with nothing in the jacks. It sustains rather than chatters: a gate from a sequencer is a stream of events and should chatter, but a finger on a button is one continuous intent. Button 2 on the 8mu behaves the same way, for the same reason.

It used to fire a single plosive click on the press and then go quiet for the rest of the hold. Consonants have not been lost with the change — Pulse In 1 still triggers clicks in every mode, the 8mu's button 3 still does, and BABBLE draws its own.

Auto-chatter

Hold the momentary switch for two seconds and it starts talking by itself, no gate needed. The LEDs fill as a progress bar while you hold, and the card sounds throughout the hold — the arming gesture is an audible held note that hands over to the chatter, rather than two seconds of silence ending in a surprise. Tap the switch to stop.

It generates phrases rather than an even stream. Some syllables get a consonant, most do not. LED 5 pulses with each syllable.


ALT BOOT

Hold the switch down while powering on to reach this mode.

Switch Knob 1 (Main) Knob 2 (X) Knob 3 (Y)
Middle / Down Openness Front Breath
Up Pitch Brightness Rounding

Between the two pages the panel reaches every parameter the 8mu can, so the card is fully playable on its own.

Unplug the 8mu and the knobs take over again. Each control follows the controller only while it is connected and has actually been moved — so an idle 8mu never seizes a knob under your hand, and pulling the cable mid-session hands everything straight back to the panel.


With an 8mu

Plug it into the front USB-C jack. Nothing to configure — the card reads the 8mu's factory mapping.

8mu control Factory message Effect
Fader 1 CC 34 Openness — close ↔ open (vowel F1)
Fader 8 CC 41 Front — back ↔ front (vowel F2)
Fader 2 CC 35 Click decay — short hit → steady tone
Fader 3 CC 36 Breath — buzz ↔ noise
Fader 4 CC 37 Pitch — F0, 50–500 Hz
Fader 5 CC 38 Brightness — spectral tilt
Fader 6 CC 39 Click level
Fader 7 CC 40 Volume — base level
Lift back / front CC 43 / 42 Volume — back swells, front ducks (deliberate mode only)
Lift left / right CC 44 / 45 Rounding — the third vowel axis
Button 1 Note 36 (C2) Mute while held
Button 2 Note 48 (C3) Gate — sustains the voice while held, and adds breath - the main PERFORMANCE button in Main boot mode
Button 3 Note 60 (C4) Plosive burst
Button 4 Note 72 (C5) Freeze the formants while held, and adds breath

Button 2 is a gate. Holding it opens the voice and keeps it open, so the card can be played from the 8mu alone with nothing in the jacks. Unlike a gate patched into Pulse In 2 - a finger on a button is one sustained syllable.

Button 4 freezes while held, and every LED goes to half brightness while it does. Freeze stops openness, front, rounding and the vowel morph all at once, so a frozen card looks exactly like a broken one; the flat even glow is unlike any other display on the card and says which it is. Button 1's mute dims all six further still.

Buttons 2 and 4 also add breath — about a seventh of the range each, on top of wherever the breath fader is parked. Both buttons already did something and neither used its held state for anything else, so the gesture is free: press one over a voiced sound and it goes breathy without losing the pitch. It is an addition, not a setting, so it layers on the fader rather than replacing it.

The vowel cube

Three axes, and they are the three things a mouth actually does:

              ROUND = 0 (spread)          ROUND = full
      CLOSE    OO ---------- EE            OOr -------- EEr
                |            |              |            |
      OPEN     AH ---------- EH            AHr -------- EHr
              back        front           back        front

Openness is how far the jaw opens (F1). Front is where the tongue sits (F2). Rounding is lip protrusion — it lowers F2 hard and F1 a little, which is why it is a genuinely separate direction. OH lives on the rounded face and is unreachable without it.

The vowel axes are on faders 1 and 8, the outermost pair, so the two controls you play constantly span the hand.

Volume

8mu Fader 7 sets the base level, and lifting the back or front of the controller swings a full scale either side of it. Put the fader halfway and you have a full swell above and a full duck below.

The accelerometer reports lift gestures — zero when level — so a controller lying flat sits exactly where the fader says. The response is squared, so a quarter lift costs only 0.6 dB: holding it roughly level is fine.

In main boot mode the tilt does not touch the volume at all — fader 7 alone sets it. The assumption in the main mode is that you want sound, and a card that can be silenced by holding the controller at the wrong angle is working against its player.


Jacks

Jack Function
Audio In 1 External exciter — summed with the internal buzz and noise
Audio In 2 Volume CV — swells and ducks around the base level
CV In 1 Pitch, 1V/oct
CV In 2 Formant CV, bipolar — sweeps the vowel cube diagonally
Pulse In 1 Click trigger
Pulse In 2 Glottal gate
Audio Out 1 / 2 Mono output, same signal on both
CV Out 1 Formant energy envelope
CV Out 2 Vowel position — the openness axis, 0–5 V
Pulse Out 1 High while voiced
Pulse Out 2 High while frozen

Feeding it random voltages

Every CV adds to its control rather than replacing it, so a random voltage wanders the sound around wherever the knobs are parked.

CV In 2 is the one to reach for first. It moves openness up as front moves down, sweeping the cube along its diagonal, which crosses the middle where the distinct vowels live. A sample-and-hold here works well.

Gates chatter without clicking. Pulse In 2 opens fully up to about 200 Hz and above that becomes amplitude modulation rather than clicks.

A good first patch: slow random into CV In , a clock divided a few ways into both pulse inputs, and an envelope into Audio In 2.

Audio In 1 sums, it does not replace. Patch a drum loop in and it goes through the same eight bands the card is speaking with — so you can talk over it. It comes in level with the internal sources, so set the balance at the source.


Breath is a ratio

Breath changes how breathy the voice is.

The plosive

The click is a short bandpassed burst, roughly 600–2800 Hz.

Building

cmake -B build -G Ninja
cmake --build build

Drag build/tract8.uf2 onto the Pico in bootloader mode. A released binary is committed at UF2/tract8.uf2.

Twelve host-side test scripts live in tools/ and need numpy; run them individually. docs/BRINGUP.md is the hardware checklist, and names the fault each section guards against.

Credits

  • Homer Dudley and Bell Labs, for the Voder, 1939.
  • rppicomidi — the usb_midi_host driver, MIT, vendored unmodified.
  • Chris Johnson — the ComputerCard library and its midi_host example.
  • Tom Whitwell / Music Thing Modular — the Workshop System and the 8mu.

License

MIT. See LICENSE, which records the vendored components and their terms.

Verify your download

Confirm the file you downloaded really is that new firmware.

macOS / Linux (Terminal)

shasum -a 256 firmware.uf2

Linux also has sha256sum firmware.uf2.

Windows (PowerShell)

Get-FileHash firmware.uf2 -Algorithm SHA256

Compare the result to the SHA256 on the website — it should match exactly.