Text-to-SpeechShared concepts

Emotion & tone

Shape Soniox Text-to-Speech delivery with audio tags, text formatting, and punctuation to make speech expressive and emotional.

Overview

Soniox Text-to-Speech lets you control how the words are delivered, not just which words are spoken. You have two toolkits, and they combine freely:

  • Audio tags — bracketed cues like [excited], [whispering], or [laughs] that control emotion, tone, human sounds, and delivery.
  • Text formatting & punctuation — capitalization, emphasis, elongation, and punctuation marks written into the words themselves (UPPERCASE, *stress*, sooo, ..., , ?!).

Both are written directly into the text you send via API:

{
  "model": "tts-rt-v2",
  "language": "en",
  "voice": "Adrian",
  "audio_format": "wav",
  "text": "[excited] INCREDIBLE news! [calm] Let me explain what happened."
}

These controls shape the expressive layer: emotion, sounds, emphasis, and local pacing. To change the overall speaking rate use the speed parameter instead.

Audio tags

Place a bracketed tag before the text you want to affect to set how it is delivered. The tag describes the feeling or manner; the words after it inherit that delivery.

The tags listed below are not exhaustive. Other tags may also work — test them before relying on them in production.

Always write audio tags in English, regardless of the text language. Localized tags (for example, [emocionado] instead of [excited]) are not supported.

[excited] ¡Tengo noticias INCREÍBLES! [calm] Déjame explicarte lo que pasó.

Emotion & tone

CategoryTags
Emotion[happy] [sad] [angry] [excited] [nervous] [fearful] [surprised] [annoyed] [relieved] [disappointed] [curious] [delighted] [calm]
Tone & manner[warm] [stern] [serious] [playful] [sarcastic] [flirty] [deadpan] [sincerely] [reassuringly] [dramatically] [mockingly]
[excited] INCREDIBLE news! [calm] Let me explain what happened.
[sad] I don't know what to say anymore.
[warm] [softly] Hey. [reassuringly] It's okay.

Human sounds

Non-lexical actions you can't spell as a word go in brackets:

CategoryTags
Amusement[laughs] [chuckles] [giggles]
Sadness[sobs] [sniffles] [whimpers]
Relief / exasperation[sighs] [exhales]
Surprise[gasps]
Effort / pain[grunts] [groans]
Physiological[clears throat] [coughs] [yawns]
[chuckles] And I just let go — [laughs] best thing all week.
[sighs] I really thought I'd get the job. [sniffles] Oh well.

Spoken interjections like Hmm, Um, or Mhm are different: write them as ordinary words, not tags — see Spoken interjections.

Sound effects related to the environment ([dog barks], [phone rings]) are not supported.

Volume, pace & pitch

Tags that control the mechanics of delivery: how loud, how fast, and at what pitch.

CategoryTags
Volume[whispering] [softly] [loudly] [shouting] [getting louder] [getting quieter] [trailing off] [muttering]
Pace & rhythm[slowly] [quickly] [rushed] [drawn out] [hesitantly]
Pitch[high-pitched] [low voice] [monotone]
Voice quality[breathy] [raspy] [trembling voice] [shaky]
[whispering] Something's out there. [slowly] Do not move.
[shouting] Get out of there!
[low voice] Sit. [hesitantly] We need to talk.

Pauses

Use tags to insert deliberate silence:

  • [pause] — the default pause; use it for most cases.
  • [long pause] — a longer, more dramatic gap; use occasionally.

For shorter beats inside a sentence, use punctuation (..., ,) instead.

So, here's the plan. [pause] Let me walk you through it.

Tag limitations

Tags work best when they stay close to the short, single-purpose forms listed above.

  • Keep each tag simple. [laughs] and [shouting] are reliable; compound directions like [laughs and screams really loud] or [says the next line sarcastically] are not. Rewrite the intent into the words themselves.
  • Stack sparingly. Two tags before a clause ([warm] [softly]) normally combine well. Five stacked tags pull in different directions and will not produce a good result.
  • Unrecognized tags may be spoken. If the model doesn't interpret a tag as direction, it can read the bracketed words aloud. Test any tag outside the tables above before shipping it.
  • The voice has to support the direction. A soft, narrative voice asked for [shouting] will only go so far. Pick a voice whose range matches the scene instead of forcing it with tags.

Text formatting & punctuation

You can shape delivery without any tags, just by how you write the words. These conventions are language-agnostic and stack with audio tags — for example, [sad] *please* don't go... combines an emotion tag, an emphasized word, and a trailing pause.

Formatting

ConventionEffect
UPPERCASELoud / shouting / strong emphasis
*stress*Stress this word (pitch + emphasis)
sooo, noooo, waaaitVowel elongation - drawl, sarcasm, whining
I-I-I don't...Stutter / stammer
lowercase everythingFlat / muted / deadpan

Punctuation

ConventionEffect
...Pause / trailing off / hesitation
/ --Abrupt cut-off / self-interruption
,Short pause / breath
! / !!!Rising excitement / intensity
? / ???Question / disbelief
?!Incredulous / startled
You did WHAT?!
Oh, *you* noticed the haircut?
Wait... N-n-no. That can't be right.

Keep these conventions close to how people actually write. A few repeated characters read as intent (waaait, !!!, N-n-no); dozens of them (whaaaaaaaaaaaaaaaaait, !!!!!!!!!!) will degrade delivery. The same goes for stacking everything at once — SOOOO *AMAZING*!!!??? is more likely to sound off than emphatic.

Spoken interjections

Interjections the voice should actually say are written as ordinary words. Do not put these in tags.

SoundConveys
Hmm, HmThinking
Um, UhHesitation / fillers
Mhm, Uh-huhAgreement
Ugh, EwwDisgust
Oof, Ow, OuchPain
MmmPleasure / satisfaction
PhewRelief
[clears throat] Hey, it's me. Got a sec? Mhm.

Putting it together

The real power comes from layering both toolkits together. Below are three examples with fully annotated input. Pick a voice whose character matches the scene and try in our playground.

[whispering] Shh, shh — she's coming. [excited] SURPRISE!!! [loudly] Happy birthday!!! 
[laughing] Look at her FACE! [happy] Oh, this is the best.
[yawning] Okay... [drawn out] iiit's so late. [tired] [sighing] What a day. 
[muttering] just five more minutes... [softly] g'night.
[excited] Okay okay open it, open it! 
[gasp] [awe] No way — is this the — [voice cracking] [happy] oh my gosh, I can't believe you remembered! 
[sobs] [laughing] I'm crying, I'm actually crying.

Audio tags don't override the text. They work together with it. The model reads the tag in the context of the words that follow, so [excited] on a flat sentence sounds forced, while [excited] SURPRISE!!! sounds natural. Write the words with the emotion already in them, then use a few well-placed tags to lead the clause and let punctuation and formatting carry the rest.