nineninesix.ai

TTS latency benchmark: 50 ms to first audio

Nursultan Bakashov5 min read
Title card reading 50 ms to first audio, flat at any length, in the nineninesix.ai orange and charcoal palette
On this page

Four vendors, both transports, 240 measured calls, zero errors. Gepard returns first audio in 49 to 50 ms over WebSocket, about half the next fastest.

On 18 August 2026 we measured four text-to-speech vendors from a single AWS instance in us-west-1, over one continuous 498-second window, with no parallelism, no retries and nothing discarded.

The headline: Gepard 1.0 returns its first audio byte in 49 to 50 milliseconds over WebSocket, and that number does not move when the text gets longer.

We built Gepard, so treat this as a vendor benchmark and check it. The corpus, the client code, the raw logs and a SHA-256 manifest are published precisely so that you can.

Which TTS API has the lowest time to first audio?#

Median time to first audio byte over WebSocket, in milliseconds, across three text-length buckets:

Vendor short ~40 chars medium ~140 chars long ~360 chars
nineninesix gepard-1.0 49.4 50.1 49.9
cartesia sonic-3.5 102.2 94.5 122.6
elevenlabs eleven_flash_v2_5 175.2 185.1 186.5
gradium default 218.6 218.3 219.9

Grouped bar chart of time to first audio across three text lengths for four vendors, with nineninesix lowest in every group

That is 2.1x faster than Cartesia, the next quickest, 3.7x faster than ElevenLabs Flash and 4.4x faster than Gradium.

The p95 holds up, which matters more than the median for anything user-facing: 55.4, 52.4 and 69.8 ms across the three buckets. A tail that stays inside 70 ms is the difference between a voice agent that always feels immediate and one that feels immediate most of the time.

Why does the flat line matter more than the low one?#

Because a latency figure that changes with input length is a latency figure you cannot design around.

Look at the shape rather than the ranking:

Line chart of time to first audio against text length, showing the nineninesix line flat at 50 ms while other vendors rise

Gepard sits on 49-50 ms whether it is given 40 characters or 360. Cartesia moves from 94 to 123 ms depending on length. If your agent sometimes reads back a two-word confirmation and sometimes a full policy summary, a length-dependent vendor gives you a first-audio time that varies by a third between turns, and you have to budget for the worst case on every turn.

The reason is architectural. A model that buffers text before starting has to wait for more of it; a model that starts generating on the first tokens does not. Gepard is built to start speaking as text arrives, which is why the line is flat rather than merely low.

How fast is the complete response, not just the first byte?#

First audio is what makes a voice agent feel alive. Total delivery time is what determines whether the next turn can start.

Median end-to-end, WebSocket, in milliseconds:

Vendor short medium
nineninesix 143.9 307.9
elevenlabs 217.2 326.0
cartesia 345.6 876.8
gradium 1,044.3 2,722.0

Grouped bar chart of end-to-end delivery time on short and medium text for four vendors

On the long bucket the picture changes and we are going to say so: Gepard finishes in 674 ms and ElevenLabs Flash in 666 ms, which is a tie inside the noise. Cartesia takes 2,207 ms and Gradium 6,403 ms on the same text.

What exactly was measured?#

The method, in enough detail to argue with.

Corpus 30 English sentences from the voice-agent and telephony domain: order confirmations, card charges, refunds, plan terms, call transfers
Buckets 10 short (~40 chars), 10 medium (~140), 10 long (~360)
Total input 5,379 characters, sha256 be0e861e...276a53
Sample size n = 10 per vendor, per transport, per bucket
Calls 240 measured, 24 warmup
Errors 0
Audio format raw pcm_s16le, 22,050 Hz, mono, requested identically from every vendor
Spend exactly 11,010 characters per vendor, counted client-side
Client AWS r8gd.large, arm64 Graviton, Ubuntu 26.04, us-west-1a

Four decisions did most of the work of making this fair.

True streaming endpoints only. Every vendor here also has a whole-file endpoint. Measuring time to first audio against an endpoint that returns a complete file is meaningless, so /tts/bytes, only_audio:true and their equivalents were deliberately not used.

Identical audio format. All four were asked for raw 22,050 Hz PCM, verified as clean PCM in the artifacts rather than assumed. 22,050 Hz happens to be Gepard's native rate, so we measured what that mandate costs the others: about 5.7 ms for Cartesia and nothing measurable for the rest. It does not account for the gap.

Each vendor at its own documented lowest-latency setting. Vendor defaults are not equivalent, so leaving them untouched would have measured their buffers rather than their models. ElevenLabs got auto_mode: true and flush: true. We left optimize_streaming_latency at 0 on purpose, because levels 1 to 4 progressively disable their text normaliser and using them would have flattered ElevenLabs unrealistically. Nothing that changes speaking rate or voice character was touched on any vendor.

Stock catalogue voices. No cloned or custom voice on any vendor.

What this measurement does not tell you#

A benchmark this narrow leaves real things out, and a few of them cut against us. Time to first byte is not time to first sound, and a stream that opens with a moment of silence wins the metric while the caller still hears nothing; measured to the first audible sample, our ranking is not first. Gepard also delivers audio in a handful of large chunks where others send many small ones, which costs nothing in playback but does commit more audio before the server can react, so barge-in responsiveness is a separate question from this one. Cold-start numbers that include connection setup narrow our lead over Cartesia considerably. And our real-time-factor figures are the best in every cell, which we mention only to say that RTF rewards slow speech and padding and we do not think it means much. All of this is quantified in the full report rather than left as a caveat.

None of it changes the WebSocket first-audio result, which is the number a voice agent actually feels.

Repeating this#

The point of publishing the manifest is that you should not have to believe us.

# 30-sentence corpus, frozen and checksummed
sha256sum corpus/corpus_v1.json
# rebuild and re-validate every statistic about the corpus
python corpus/build_corpus.py

Run it from your own region, with your own keys, against your own text. If your numbers disagree with ours, we would rather know. Benchmarks that only the vendor can reproduce are marketing with a table in it.

If you are choosing a vendor on more than speed, the pricing comparison covers the other axis, and how to choose a TTS covers the metrics this post deliberately ignores.

Frequently asked questions

What is a good time to first audio for a voice agent?
Under about 150 ms for the TTS stage. Total perceived response time is the sum of speech recognition, the language model and the speech synthesis, and humans start noticing a gap around 300 to 400 ms. If TTS alone spends 200 ms, it has consumed most of your budget before the model has said anything.
Which TTS API has the lowest latency in 2026?
In our 18 August 2026 measurement, Gepard 1.0 returned first audio in 49 to 50 ms over WebSocket, against 94 to 123 ms for Cartesia Sonic 3.5, 175 to 187 ms for ElevenLabs Flash v2.5 and 218 to 220 ms for Gradium. The full corpus, code and manifest are published so the run can be repeated.
Why does time to first audio change with text length for some vendors?
Because some servers buffer text before starting synthesis, so a longer input means a longer wait before the first frame. A model that begins generating as soon as the first tokens arrive has a first-audio time that is independent of how much text follows.
Does WebSocket or HTTP streaming give lower TTS latency?
WebSocket, generally, because the connection is already open when the request arrives and HTTP pays for connection setup and header exchange. In our measurement the gap was largest for the fastest vendor: Gepard was 49 ms on WebSocket against 112 to 126 ms on HTTP streaming.
How should I run my own TTS latency benchmark?
Measure from the region your users are in, use true streaming endpoints rather than whole-file endpoints, request an identical audio format from every vendor, set each vendor to its own documented lowest-latency configuration, and report the median and p95 rather than the mean. Publish the corpus so others can repeat it.
Portrait of Nursultan Bakashov

Nursultan Bakashov

Co-founder, nineninesix.ai

Co-author of the Gepard technical report. Works on real-time speech models and the infrastructure that serves them, and writes about the parts of text-to-speech that only show up in production.

Try it on your own text

Gepard is open source under Apache 2.0 and the hosted API starts free. No card, no sales call.