Skip to content
100% local

SSML markup generator

Wrap plain text in valid SSML tags for text-to-speech: pauses, emphasis, pronunciation and pacing.

Input
Output

SSML markup generator

Paste plain text and this tool wraps it in Speech Synthesis Markup Language (SSML) — the XML dialect that Amazon Polly, Google Cloud Text-to-Speech and Azure Speech all use to control how synthesized voices read a script. Paragraphs become <p> elements, sentences become <s> elements, and the tool inserts <break> tags between them so pacing is explicit instead of left to the engine's guesswork.

The options panel controls how much markup gets added. Set the pause length between sentences and between paragraphs in milliseconds, and pick a speaking rate and pitch — non-default values wrap the whole output in a <prosody> tag. Turn on emphasis to convert *starred* words into <emphasis level="moderate">, and turn on acronym spelling to wrap ALLCAPS runs like "NASA" in <say-as interpret-as="characters"> so they get read letter by letter instead of as a made-up word. A custom pronunciation dictionary lets you map specific words to a replacement, rendered as either a <sub alias="…"> substitution or a <phoneme alphabet="ipa" ph="…"> — useful for names, brand terms or words the default voice mispronounces.

The target platform setting adjusts the root <speak> element: Azure needs a version, namespace and xml:lang attribute that Amazon Polly and Google Cloud TTS don't require, so switching platforms changes just that wrapper. Sentence splitting is a plain heuristic based on ./!/? — it doesn't recognize abbreviations like "Dr." as non-terminators, so check the output on text with a lot of abbreviations. The "check XML validity" option verifies the generated markup is structurally well-formed (every tag closes correctly) before you copy it.

Everything runs locally in your browser — your script is never uploaded anywhere. When the markup looks right, copy it, download it as a .txt file, or send the output to another tool's input to keep editing.

FAQ

Which text-to-speech engines accept this markup?
The output is standard SSML, understood by Amazon Polly, Google Cloud Text-to-Speech, Microsoft Azure Speech and most other engines that implement the W3C SSML spec. The "Target platform" option only changes the root element to match what each service expects.
What does the emphasis option actually change?
Wrap a word in asterisks in your input, like *never*, and with emphasis turned on it becomes <emphasis level="moderate">never</emphasis> in the output — most engines make an emphasized word sound slightly louder and slower.
Why did 'Dr.' get treated as the end of a sentence?
Sentence splitting looks for a period, exclamation mark or question mark followed by whitespace — it has no list of abbreviations to skip, so "Dr. Smith" is read as two short sentences. Review the output for text with many abbreviations and adjust punctuation if needed.
What is the pronunciation dictionary for?
Enter pairs like brand=brand-name;NASA=N-A-S-A separated by semicolons. Each match (case-insensitive, whole word) is wrapped in a <sub> or <phoneme> tag depending on the tag mode you pick, so the engine reads it the way you specify instead of guessing.
Is my script uploaded anywhere?
No. The SSML markup generator runs entirely in your browser — your text never leaves your device.