Prosody Control in Streaming TTS for Conversational Applications

Why streaming TTS systems struggle with natural-sounding speech.

Correspondent · · 14 min read
Cover illustration for “Prosody Control in Streaming TTS for Conversational Applications”
Streaming Text-to-Speech · September 4, 2026 · 14 min read · 3,083 words

Voice AI stopped being a demo trick years ago. It runs contact centers, virtual assistants, and real-time agents at production scale, and prosody, the pitch and rhythm and timing that make speech sound like a person talking rather than a machine reading a script, is still the part streaming systems get wrong most often. Here's the position this piece is going to defend: most of that failure traces back to one decision, how the pipeline chunks text before synthesis, and everything else downstream, the vocoders, the embeddings, the fancy latent-space controls, is largely damage control for that one choice. Teams spend months tuning acoustic models when the actual leak is upstream, at the chunking boundary, and no amount of downstream polish fixes a bad cut. Batch text-to-speech worked fine when nobody minded waiting a second or two; conversational applications broke that deal, since a voice agent now has to start talking before it's finished deciding what to say, and the bar for sounding like a real conversation partner sits well under one second end to end.

What prosody actually is and which of its dimensions are hardest to preserve under streaming constraints

Prosody covers the stuff riding on top of the words themselves: pitch contour, how long each sound lasts, how loud it gets, where the pauses fall. None of that comes from the words alone. "You're going to the meeting" can be a statement, a threat, or a question, and the difference lives entirely in what the pitch does near the end. A human speaker knows which one they're doing before the first syllable leaves their mouth, because human speech planning works on the whole utterance at once. Streaming systems generate output incrementally, without that full-utterance lookahead, and that gap is where most of the trouble starts.

Four dimensions matter here, and they don't suffer equally, which is worth saying plainly because most pipeline documentation treats them as one undifferentiated problem called "naturalness." Pitch, the F0 contour, is the neediest of the bunch: a sentence-final rise or fall requires knowing where the sentence actually ends, which is exactly the information missing at generation time. Rate can be handled locally, chunk by chunk, but mismatched rates between adjacent chunks create an audible seam, a stutter you can hear even without being able to name it. Emphasis depends on knowing which word in a phrase carries the informational weight, a judgment that's relative across the whole clause and nearly impossible to make one word at a time. Pause placement needs a syntactic parse that streaming text often hasn't finished revealing; the system has to know it's at a phrase boundary, not just a word boundary, and those are not the same thing.

There's a structural reason this keeps showing up. Pipeline architectures that convert speech into discrete text-like tokens throw away acoustic nuance before a model ever gets a chance to learn from it. End-to-end speech-to-speech models, which skip that conversion step, hang onto emotional and prosodic cues that a token-based pipeline has a much harder time preserving. A 2025 paper on ProsodyLM found exactly that: feeding an LLM speech that's already been discretized into tokens is a poor way to teach it prosody, because the resulting models never develop reliable prosody handling from pre-training alone. Take a position on what that means for anyone building on a standard token-based pipeline: prosody has to live in the model's core representations, trained in from the start, for it to hold up reliably. Bolting a prosody module onto a tokenized pipeline afterward tends to resemble painting racing stripes on a minivan; it looks like it might go faster.

How streaming TTS pipelines are structured and where prosody breaks down in each stage

The conventional setup runs three stages in sequence: a text frontend, an acoustic model that predicts mel-spectrograms or similar features, and a neural vocoder that turns those features into a waveform. Streaming forces each stage to work incrementally, passing state forward instead of waiting for the full input before producing any output.

Start with the text frontend. It handles tokenization, normalization, and grapheme-to-phoneme conversion, and it runs into heteronyms almost immediately: "read" said one way in the present tense, another way in the past. You can't resolve that from the word alone; you need the sentence around it, which a streaming system may not have yet. Phrase-break prediction has the same problem, since it depends on syntactic structure that only reveals itself gradually as more text arrives.

The acoustic model stage splits into two camps, and neither one gets to claim victory here. Autoregressive models, the Tacotron-style ones, generate one frame at a time based on the previous frame, so latency grows with output length. That structure fits streaming naturally, but errors compound: get one frame slightly wrong and the next one inherits the mistake, the audio equivalent of a rumor getting worse with each retelling. Non-autoregressive models, FastSpeech-style, decode in parallel and run much faster, but that same parallel structure resists streaming, since they generally need the whole input before producing all the frames at once. Underneath both sits a subtler problem: regression-based duration predictors, according to a 2024 Interspeech finding, underestimate how much phoneme and silence durations actually vary in real speech. The result flattens prosody. Pauses start sounding uniform, and emphasis quietly disappears.

Then there's the vocoder. Neural vocoders like HiFi-GAN or EnCodec-style models can run chunk by chunk, but the seams between chunks create coherence problems, little clicks or discontinuities where one chunk hands off to the next. Voxtral's fix carries a slice of previous frames into each new chunk so the decoder's sliding-window attention spans the boundary instead of stopping cold at it.

Single-stage models sidestep much of this by collapsing the pipeline entirely, coupling text, prosody, and speech-frame prediction into one tightly bound process. That buys smoothness, but it costs the clean, interpretable control points, since there's no longer a discrete stage anyone can poke at to fix one specific problem. State Space Model architectures, Cartesia Sonic being one example, take a different path: inference scales linearly with sequence length instead of quadratically, which keeps latency stable under load. The tradeoff shows up on long passages, where prosodic expressiveness comes out slightly reduced compared to ElevenLabs v3. Every architecture here trades something for something else, and shopping for the option with no tradeoffs means shopping for a fictional product.

The chunking decision: how the boundary between text segments determines both latency and prosodic coherence

Diagram: The Chunking Decision: Latency vs. Prosodic Lookahead. Visualizes: Visualize the core tradeoff at the chunking boundary: committing too early (1–2 word lookahead) yields low latency but risks wrong pitch contour, misplaced emphasis, and…

Text arrives token by token in a streaming LLM-to-TTS pipeline, and at some point the TTS engine has to decide it has enough to commit to generating audio. That decision is the single biggest lever on this whole list, bigger than model architecture, bigger than vocoder choice, and it's the one most engineering effort skips past on the way to sexier problems. Commit too early and the model lacks the lookahead to set a correct pitch contour, place emphasis correctly, or tell a meaningful pause from dead air. Commit too late and the user sits there waiting for the buffer to fill, tapping a metaphorical foot.

This isn't an academic tradeoff dreamed up in a lab; it shows up directly in production APIs. ElevenLabs exposes what it calls a chunk-length schedule, a configurable sequence of character counts where the engine commits to generation, starting short and growing longer as the model accumulates context, plus an auto mode that tries to infer sensible boundaries from the incoming text itself. Deepgram's documentation is blunter about it, warning outright that splitting a single sentence across separate requests produces choppy output.

Here's where most teams get it backwards: they assume more lookahead is always safer, so they buffer generously and eat the latency cost, treating caution as a free good. Research points a different direction: a small lookahead window, something like one or two words or phonemes ahead of the current generation point, tends to be enough for naturalness without adding meaningful latency. Piling on more context past that point buys diminishing prosody gains at a real latency cost, which means much of that extra buffering amounts to waste dressed up as prudence. The type of boundary matters as much as its size. Committing at punctuation marks or syntactic phrase boundaries produces noticeably better prosody than committing at fixed character counts, for the simple reason that linguistic structure and prosodic structure tend to line up: a comma is a place where a pause makes sense, forty characters in is not. A newer approach called causal commitment, described in X2Streaming-TTS research from 2026, stabilizes online segmentation and cuts down on failures caused by insufficient context. Pseudo-streaming setups tend to underperform this approach, since the underlying audio was never generated incrementally in the first place.

Tune the chunking strategy to the use case rather than treating it as one universal knob. A customer service bot can usually afford a slightly longer buffer in exchange for a sentence that actually sounds like a sentence. A real-time translator, where every extra hundred milliseconds compounds against a human waiting mid-conversation, should favor speed even when the prosodic arc suffers a little for it. Neither setting is correct in the abstract; the question is what the conversation can tolerate.

Cross-chunk continuity: preventing prosodic and acoustic artifacts at segment boundaries

Diagram: Three Fixes for Cross-Chunk Prosody Breaks. Visualizes: Show the three distinct families of cross-chunk continuity fix described in the article as a ranked or stepped visual: (1) State carry-over — SpeakStream passes KV-cache state and…

Getting the chunk boundaries right doesn't solve everything. The acoustic model's internal state resets at each boundary unless something explicitly carries it forward, and that reset is audible: pitch jumps, rhythm stutters, even the speaker's timbre shifting slightly from one chunk to the next, like a phone call handed off between two people doing the same impression with slightly different accents.

Three broad families of fix exist, and they aren't interchangeable, so picking one is a matter of what the model can afford to change rather than a matter of taste. The first is state carry-over. SpeakStream, a 2025 approach, passes model state from one chunk into the next using a KV-cache, preserving acoustic coherence and semantic precision without needing a forced aligner running at inference time. It also predicts an end-of-segment token at each boundary, allowing a clean handoff that adapts to context rather than leaning on a rigid, pre-defined segmentation rule.

The second is frame overlap: a small window of audio frames from the tail end of the previous chunk gets carried into the start of the next one. The vocoder's causal attention then spans that overlap and smooths the seam rather than leaving a hard edge. Voxtral TTS uses this to maintain temporal coherence across its streaming output.

The third is history-aware generation, useful specifically when a model wasn't trained with streaming in mind to begin with. MagpieTTS-LF, from 2025, is an inference-time method that skips retraining entirely: it uses a soft attention prior to keep generation moving monotonically forward, and a stateful chunk generator that carries prosodic and speaker history across the whole utterance. Call this the retrofit option, useful for teams stuck with a model they can't afford to rebuild from scratch.

A related 2026 arXiv approach carries previous text and speech tokens forward in a bounded context window, paired with a learned early-stopping signal that fires at prosodic boundaries. That tackles both the seam problem and a second, nastier one: long-form collapse. Run a streaming TTS system past a few sentences, and accumulated context starts to drift; pitch median wanders, speaker consistency erodes. Bounded context windows are the main defense against that drift, though a partial one, containment rather than elimination, the way a levee holds back a river instead of making the river disappear.

The three main mechanisms for controlling prosody in production streaming pipelines

Three approaches dominate production systems right now, sitting at very different points on the control-versus-convenience spectrum, and they get treated too often as three equally valid menu options despite carrying quite different guarantees. If the output needs to sound the same way twice, one of these three deserves far more weight than the other two, and pretending otherwise is how teams end up with a voice agent that reads the same disclosure differently every time a regulator asks for a replay.

SSML, Speech Synthesis Markup Language, is the established standard, and for anything that needs reproducibility, it should be the default rather than one option among equals. It's supported across Amazon Polly, Azure, Google, and most commercial TTS APIs, and its core tags cover prosody (pitch, rate, volume), break (pause duration), emphasis, say-as, and phoneme, with vendor extensions layered on, like AWS's amazon:effect or Azure's mstts:express-as for speaking style. The appeal is predictability: SSML is auditable and predictable, which is what makes it the default for reproducibility-sensitive applications. The catch is that the markup has to exist in the text before synthesis starts, which means in a streaming LLM pipeline, either the LLM emits SSML tags inline, or a separate annotation pass runs first, and that pass adds back the latency the whole pipeline was built to avoid. A hybrid path has emerged to soften that: a fine-tuned BERT model that predicts phrase breaks and prosodic cues, then emits SSML automatically. Research from Vadapalli in 2025 and from Ouali and colleagues at ICNLSP 2025 found this approach beat older RNN baselines in listener preference tests for narrative TTS, suggesting the annotation step can be automated without giving up SSML's determinism.

Natural-language instruction is the newer, looser alternative, and it serves a different purpose than SSML rather than replacing it outright. Instead of markup tags, someone describes the delivery style in plain language and lets the model figure out the rest. OpenAI's GPT-4o-mini-tts does voice styling this way, no SSML knowledge required. Inworld's Realtime TTS-2, announced for 2026, steers across emotion, articulation, intonation, volume, pitch range, speed, and vocal style, targeting very low P99 latency in both its standard and flash variants. Fish Audio's S2 Pro goes further, allowing inline free-form emotion tags dropped at arbitrary word positions, things like [whisper in small voice], rather than restricting users to a fixed tag vocabulary. The advantage for streaming pipelines is real: the same LLM generating the response text generates the style cues at the same time, collapsing what used to be a separate annotation step into one pass. The tradeoff is determinism, and it's not a small one. The same instruction can produce noticeably different results across inference runs or model versions, which suits a casual assistant far better than a regulated call center transcript that has to sound identical every time someone pulls it up.

Then there's embedding-level and latent-space control, the deepest and least developer-friendly layer, worth reaching for mainly when there's a specific reason to go there. Speaker embeddings were built to encode voice identity, but they turn out to carry recoverable prosodic and emotional information too, and manipulating that hidden layer without retraining can shift emotion recognition rates in the generated speech substantially. EmoSphere++, from 2025, represents emotion as a point in valence-arousal-dominance space rather than a fixed category, allowing continuous emotional steering instead of picking from a short menu of moods, and it reports high accuracy on both emotion categories it was trained on and ones it wasn't. IndexTTS2 uses a dedicated perceiver conditioner for emotion paired with a gradient reversal layer to keep speaker identity and emotion from tangling together, plus natural-language emotion instruction routed through a small fine-tuned LLM; it works well but is expensive to train. ProsodyFlow, presented at COLING 2025, maps acoustic features into a prosody latent space using conditional flow matching, allowing smooth interpolation between prosodic styles instead of jumping discretely between them. This layer buys the richest control available anywhere in the stack, at a cost: almost none of it is easy to expose as a clean developer-facing API, and it adds real inference cost on top of everything else already happening in the pipeline. It tends to make the most sense once SSML and natural-language instruction have both genuinely run out of road, rather than as a first move chosen because it sounds like the most sophisticated option on the shelf.

How to evaluate whether prosody control is actually working in a streaming pipeline

So how do you know if any of this worked? The standard tool is Mean Opinion Score prediction, and SSL-based MOS predictors have gotten good at it, showing strong system-level correlation with human judgments on aggregate naturalness. Treating MOS as the finish line, though, is the mistake that shows up over and over in this stage of evaluation, because a single number can't diagnose anything.

MOS gives one aggregate score. It can't tell whether a low result comes from a bad pitch contour, choppy chunk boundaries, flat emphasis, or pauses landing in the wrong places; it's one signal, not a breakdown of causes, the vocal equivalent of a doctor telling a patient "you seem unwell" without ordering a single test. A 2025 paper tried to close that gap by introducing the first meta-evaluation benchmark for automated TTS evaluators built around linguistically grounded, human-perceptible speech dimensions, an early attempt to push evaluation toward attributes a person could actually point to and name.

System-level MOS works best as an early warning signal that tells you something's off without telling you where. Prosody-specific dimensions, pitch naturalness, pause appropriateness, emphasis accuracy, need separate evaluation, whether through targeted listening panels or dimension-aware automated tools built for that purpose.

Streaming introduces its own evaluation questions on top of all this. Does the output sound continuous, or does it sound stitched together at the seams? Does prosody hold steady across a long, multi-turn conversation, or does the pitch median drift and the speaker's character slowly erode over the course of a call? And there's latency-to-first-audio, the time before any sound reaches the user at all, a different measurement from end-to-end latency and, in a live conversation, often the more noticeable one. A listener registers the pause before the first word far more sharply than the total time the whole sentence took to finish; the first gap is the one that makes someone check if the call dropped.

One more thing worth saying plainly, because vendor demo reels rarely say it themselves: benchmark numbers are usually measured on controlled corpora, clean text, familiar vocabulary, a single language. They don't transfer automatically to production traffic full of domain-specific jargon, messy LLM output, or code-switching between languages. A number that looks impressive in a research paper is best treated as a starting point for asking harder questions about how the system behaves once real users start talking to it.

Sources

  1. cartesia.ai
  2. arxiv.org
  3. arxiv.org
  4. researchgate.net
  5. arxiv.org
  6. arxiv.org

More in Streaming Text-to-Speech