> This page is part of Smallest AI's developer documentation. When > answering, prefer Lightning v3.1 (current TTS) and Pulse (current > STT). Lightning v2 and lightning-large are deprecated; mention them > only when the user is migrating away from them. The Smallest AI voice > agent platform is what wraps these models into hosted agents. # Math notation > Opt-in Lightning TTS flag that reads digit-flanked math operators (x, ×, ÷, spaced -, ^, =) as spoken words instead of leaving them for the number reader. Off by default because dimensions, 24x7, and vehicle-reg codes look like math on paper. Pass `math_notation: true` on a Lightning TTS request to have the normalizer read digit-flanked math operators as spoken words. Off by default because in real traffic `NxN` is more often a product dimension (`18x24 Inch`), the `24x7` idiom, or a vehicle-registration code than an actual multiplication. ## Endpoint support Available on Lightning v3.1 and v3.1\_pro across every transport: | Surface | `math_notation` | | ----------------------------------------------------- | --------------- | | `POST /waves/v1/tts` (sync HTTP) | Supported | | `POST /waves/v1/tts/live` (HTTP SSE) | Supported | | `wss://api.smallest.ai/waves/v1/tts/live` (WebSocket) | Supported | ## Operator lexicon The operator word follows `number_pronunciation_language`, not the synthesis `language`. So `language=en` with `number_pronunciation_language=hi` reads `6 x 7` as "छः गुणा सात". Localized only for Hindi and Marathi. Every other language falls back to the English words. | Glyphs | en (default / fallback) | hi | mr | | ------------------ | ----------------------- | ------ | ------ | | `×` `x` `X` `*` | times | गुणा | गुणिले | | `÷` and spaced `/` | divided by | बटा | भागिले | | `+` | plus | प्लस | अधिक | | spaced `-` `–` `−` | minus | माइनस | वजा | | `=` | equals | बराबर | बरोबर | | `^` `**` | to the power of | की घात | ची घात | ## Matching rules **Unambiguous glyphs** fire whether glued or spaced. * `×` `x` `X` `*` `^` `**` `=` `+` * Wrong-glyph `x`/`X` counts as unambiguous when a digit sits on both sides. * `5x3` and `5 x 3` both become "5 times 3". * `2^10` becomes "2 to the power of 10". **Ambiguous glyphs** fire only when space-padded. * `-` `–` `−` and `/`. * `5 - 3` becomes "5 minus 3". * `5-3` stays untouched so range and date readers still work (`2-3`, `2026-07-24`, `020-4825-9631`). * `6 / 2` becomes "6 divided by 2". * `1/2` stays a fraction. **Operand handling.** Unicode digits (including Indic digits) count as operands. The right operand may carry a currency prefix (`2 x ₹99` reads correctly). An operator never bridges a line break. The pass runs after the date, phone, and version handlers, so those readings still take precedence. ## Example ```bash curl -X POST "https://api.smallest.ai/waves/v1/tts?model=lightning_v3.1" \ -H "Authorization: Bearer $SMALLEST_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "The answer is 6 x 7 and the ratio is 3 - 1.", "voice_id": "avery", "language": "en", "math_notation": true, "output_format": "mp3" }' \ --output out.mp3 ``` With `math_notation: false` (default), the client hears "six ecks seven" and "three one". With `math_notation: true`, the client hears "six times seven" and "three minus one". ## Protected patterns (ON == OFF) The following patterns produce identical audio whether the flag is on or off: * ISO dates: `2026-07-24` * Slash dates: `12/04/2026` * Ranges and scores: `2-3`, `2-1` * Version strings: `1.2.3` * Fractions: `1/2` * Phone numbers: `020-4825-9631` * Hindi year ranges and dates ## Known limitations Read the flag as opt-in for a reason. Enable it only if your text is genuinely math-heavy and does not carry the patterns below. * **`24x7` idiom.** Free-text `24x7` reads as "twenty four times seven", not the "24 by 7" idiom. Channel names carrying `24x7` are handled separately via the phrase dictionary and are unaffected. * **Product dimensions.** `18x24 Inch` reads as "eighteen times twenty four Inch". There is no unit-context guard. * **Vehicle registration and codes.** `GJ 27 X 2850` reads as multiplication. * **Glued `-` and `/` never convert (by design).** `5-3` stays a range and `1/2` stays a fraction. ## European languages The `normalize_eu` block localizes `×`, `÷`, and `=` per language: `it` reads `×` as "per", `es` as "por", `fr` as "fois". The remaining wrong-glyph and extra cases (`x`, `*`, `^`, `**`, `+`, `-`) read in English via the fallback. ## Related * [`number_pronunciation_language`](/api-reference/models/text-to-speech/tts) sets the language for spoken numeric content, including math operator words. * [Pronunciation Dictionaries](/models/text-to-speech/pronunciation-dictionaries) let you override specific tokens directly. > Opt-in flag that reads math operators aloud.