Live experiment · runs in your browser

The model is the voice.

No text-to-speech. No neural audio. A language model writes a phonetic score — and a deterministic synthesizer performs it, like a player piano for speech. Deliberately robotic, rendered at telephone quality, in milliseconds, on your device.

Play it yourself

Pick a phrase or edit the score directly. Everything renders in your browser the moment you press perform — no server, no model, no audio files. What you hear has been squeezed through the same 8 kHz G.711 μ-law codec a real phone call uses.

The canonical score from the merged demo script.
Caption — what the score claims to say
ARPABET score — what actually gets performed
OW1 vowel + stress digitEH1! phrase focus| word gap~150 pause in ms
Pitch128 Hz
Tempo0.82×
Volume82%

Chat with the voice

Talk to it and it answers out loud — for free. Tap the mic and speak, or type; the model only writes the words, and this page pronounces them itself with the CMU dictionary, so even a small free model sounds exactly as clear as a frontier one. Run the brain on your own GPU(no key, no cloud, one download), or paste a free-tier key and the browser calls that provider directly. This page still has no server; keys and audio go nowhere else. The mic uses your browser's built-in recognition — which may run on your device or at your browser vendor's servers, so the panel below tells you which, for your browser — or, with a Groq key, Groq's free Whisper. After each spoken reply the mic opens again — keep talking, or stay silent to hang up.

Weights download once from the model CDN and cache in your browser. After that: free, offline-capable, no key.
Nothing yet. Ask it something — “what are you?” is a good opener.

Let your own AI write the score

The chat above automates exactly this — here is the bare metal, no key needed. Copy the prompt below into ChatGPT, Claude, or any LLM. It will answer with a JSON tool call — paste that back here and hear your model speak through the instrument.

Prompt for your model
You can speak out loud through a tool called perform_voice. Reply with ONLY a JSON object of tool arguments — no prose, no code fences.

Arguments:
- "caption": the words you intend to say (display only, max 300 chars)
- "score": General American ARPABET phones separated by spaces. Every vowel ends with a lexical stress digit 0, 1, or 2 (example: HH AH0 L OW1). You may append ! to ONE phrase-focused vowel (example: EH1!). Put | between words. Use ~N for an intentional pause of N milliseconds, 20-1000 (example: ~150 after a sentence).
- "base_pitch_hz": number, 70-260
- "tempo": number, 0.65-1.6 (1 is neutral; around 0.8 is slower and clearer)
- "volume": number, 0.1-1
- "intonation": "statement", "question", or "continuation"

Allowed phones: AA AE AH AO AW AY EH ER EY IH IY OW OY UH UW B CH D DH F G HH JH K L M N NG P R S SH T TH V W Y Z ZH

The renderer is a deterministic robotic telephone voice, so favor short, clearly separated words and tempo near 0.8. Keep the whole utterance under 10 seconds.

Now say something short and interesting.
Paste your model's reply

How it works

Voice AI normally means a neural model generating audio. This experiment asks how far the opposite extreme goes: give the language model exactly one tool, perform_voice, and make everything downstream boring, deterministic signal processing.

01 · SCORE

The model writes phonetics — or just words

One tool call carries an ARPABET score: phones with stress digits (HH AH0 L OW1), one optional ! phrase focus, | word gaps, and ~ms pauses — plus bounded pitch, tempo, volume, and intonation. In chat mode the model can also reply in plain words, and this page compiles them to a score with the CMU pronouncing dictionary, on your device — so pronunciation accuracy never depends on the model.

02 · SYNTHESIS

Oscillators, not weights

A deterministic renderer turns each phone into sound: moving formant targets for vowels, band-passed noise for fricatives, closure-burst-aspiration for stops, continuous voicing phase across connected phones. Same score in, same waveform out. Every time.

03 · TELEPHONE

8 kHz μ-law, like a real call

The output is filtered to the telephone band, sampled at 8 kHz, and round-tripped through the G.711 μ-law codec in 20 ms frames — the exact format a Twilio Media Stream consumes. What you hear here is what a caller would hear.

04 · NO CLOUD

Zero inference of ours

This page ships the synthesizer and the pronouncing dictionary as static files that run in your browser. No server of ours, no telemetry. The chat brain is yours too: a small model that downloads once and runs on your own GPU, or your own key sent straight from your browser to the provider you chose. The only neural network involved is the one you bring.

Honest results, including the failures

The bar is blind intelligibility: a listener who never saw the caption writes down the words after the audio has passed through the telephone codec. Knowing the words first makes everything sound clear — so only blind listens count.

The procedural voice you can play above closed its iteration loop judged roughly as intelligible as a classic formant baseline — charmingly robotic, genuinely hard blind. That motivated a sibling renderer in the same experiment: same score contract, but the audio comes from short recorded diphone excerpts selected deterministically from the CMU ARCTIC corpus. Its blind-listening log so far:

Phrase (hidden from listener)First blind listen
Move the small lamp right“move, feet, small, land, write”
Bring the clean book backonly “clean back” survived
Bring green box back home“the green box back home”
Leave red box near tabletranscribed exactly, first listen — after fixing contaminated word-edge audio

One clean pass is not the finish line. The acceptance gate is 20 random words plus five phrases at 80% blind recognition before either voice goes anywhere near a phone call — and the recorded voice additionally waits on a voice-talent provenance review, which is why this page only performs the fully synthetic instrument.