Find the voice for what you’re building.

Describe a character, or show us a picture of it. Listen to voices that could fit, keep the one you choose, and speak with it from your code.

Studio

Find a voice by listening.

Example session

“A robot that helps visitors explore a museum.”

Three directions to listen toDirector’s suggestions

Conversational companionWarm and quick, and asks visitors questions back.

Measured storytellerUnhurried, for the longer story behind an exhibit.

Clear guideCrisp on names, dates and the way to the next room.

API

Speak with your saved voices from code.

POST/v1/audio/speech

{
  "input": "Welcome to the museum.",
  "voice": "3f9ac2e01b7d",
  "model": "clone",
  "response_format": "mp3"
}

Returns the audio as one file, as a chunked stream with "stream": true, or over a WebSocket.

First audio in 48 msMedian with one stream, 70 ms at the 95th percentile. Measured on 2026-11-10 on our RTX PRO 6000 Blackwell server. A measurement, not a promise.

Start with whatever you have.

A picture is enough. A loose direction works, and so does a precise brief. Each ends the same way: voices you can hear side by side, and one you can save.

No voice idea

A photo of the robot, and “helps visitors explore a museum.”

You get contrasting directions to listen to, each with a reason to try it.

A loose direction

“Friendly and competent, without sounding like a cartoon.”

Your words are kept as written. Different readings of them come back side by side.

A precise brief

“Adult English voice, conversational pacing, clear place names.”

Voices come back within your brief, without a conversation first.

  1. DescribeA brief, a picture, or a few lines about the character.
  2. ListenDirections come back as voices you can play, not as adjectives.
  3. Compare on your linesEvery voice reads the same test lines. Listen blind if you want an unbiased choice.
  4. Save for reuseThe voice gets an ID your API keys can speak with.

The voice you choose is an API voice.

A voice saved in the studio gets a stable ID. Speak with it over HTTP, as a stream, or over a WebSocket, from your server or your agent.

Start with the API quickstart or see the agent guide and OpenAPI JSON.

  • One request, or a streamHTTP for whole files and chunked streams; WebSocket for audio as it’s made.
  • Formats for where it playspcm, pcm_16000, pcm_8000, wav, mulaw, opus, mp3. Mu-law is for telephony.
  • Keys scoped to the jobLimit a key to speech, to certain voices, to a number of concurrent streams and to a monthly character budget.
  • Voices by descriptionDesign voices from a description through the API, refine one with feedback in plain words, and save the one you want.
Request examples

curl

curl https://api.voice.a2nada.com/v1/audio/speech \
  -H "Authorization: Bearer $VOICELAB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input": "Welcome to the museum. What would you like to see first?",
       "voice": "3f9ac2e01b7d", "model": "clone", "response_format": "mp3"}' \
  -o welcome.mp3

Python

import os, httpx

r = httpx.post(
    "https://api.voice.a2nada.com/v1/audio/speech",
    headers={"Authorization": f"Bearer {os.environ['VOICELAB_API_KEY']}"},
    json={"input": "Welcome to the museum. What would you like to see first?",
          "voice": "3f9ac2e01b7d", "model": "clone", "response_format": "mp3"},
)
r.raise_for_status()
open("welcome.mp3", "wb").write(r.content)

WebSocket (Node.js)

// Audio arrives in chunks as it is made: 16-bit, 24 kHz mono PCM.
const ws = new WebSocket("wss://api.voice.a2nada.com/v1/audio/speech/stream");
ws.binaryType = "arraybuffer";
const chunks = [];
ws.onopen = () => ws.send(JSON.stringify({
  api_key: process.env.VOICELAB_API_KEY,  // server side only, never in a browser
  input: "Welcome to the museum. What would you like to see first?",
  voice: "3f9ac2e01b7d", model: "clone", response_format: "pcm",
}));
ws.onmessage = (e) => {
  if (typeof e.data !== "string") chunks.push(e.data);
  else console.log(JSON.parse(e.data));  // {"done": true, "first_audio_ms": ...} or an error
};

Output formats

response_formatContent typeSample rate
pcmaudio/pcm24,000 Hz
pcm_16000audio/pcm16,000 Hz
pcm_8000audio/pcm8,000 Hz
wavaudio/wav24,000 Hz
mulawaudio/basic8,000 Hz
opusaudio/ogg; codecs=opus24,000 Hz
mp3audio/mpeg24,000 Hz

Time to first audio, measured

Streams at onceMedian95th percentile
148 ms70 ms
1674 ms108 ms
3289 ms130 ms

Measured on 2026-11-10 on one RTX PRO 6000 Blackwell server (g7e.2xlarge on AWS), from a client in the same region through the load balancer, TLS and firewall, with lines of about 70 characters. These are measurements on our hardware, not promises; your network adds to them.

For things that talk.

Software and hardware that speak to people, and the creative people who decide how they sound.

Robots

Desk companions, guides and kiosks that speak to people in the room.

Assistants

Support and planning agents where the voice is the product’s manner.

Games

Characters auditioned across the lines they will actually say.

Telephony

Phone agents that need mu-law and a voice that stays clear on a call.

Writers and sound designers cast in the studio. Engineers ship the same voice through the API, by its ID.

Where your data goes.

Speech, voice design and saved voices run on our own GPU servers. The table lists every feature and who processes it, generated from the service’s configuration.

FeatureProcessed by
SpeechAPI and studioOur GPU serversQwen/Qwen3-TTS-12Hz-1.7B-Base
Voice designAPI and studioOur GPU serversQwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign
Saved voicesAPI and studioOur GPU serversQwen/Qwen3-TTS-12Hz-1.7B-Base
The Director (casting assistant)StudioOpenAIgpt-6.1-sol
Web pages the Director opensStudioThe website it opens
Listening reportsStudioGoogle (Gemini API)gemini-3.5-flash-lite
Rewriting a voice descriptionAPIOpenAIgpt-6.1-sol
Speech text and audio stay with us.
They aren’t sent to any third party, and the model servers don’t write request text or audio to their logs.
The studio keeps your work until you delete it.
Sessions, generated audio and saved voices are stored so you can come back to them.
3 features use outside AI providers.
The Director (casting assistant): OpenAI. Listening reports: Google (Gemini API). Rewriting a voice description: OpenAI. The data handling page lists what each one receives.

Read the full data handling

Join the waitlist.

The beta is invite-only. Leave your details to ask for an invitation.

The waitlist isn’t open.

Sign-ups haven’t started, so there is no form here to fill in, and this site collects nothing.