Hinglish text to speech, and why most tools get it wrong
Hinglish is how most urban Indian content is actually written. It is also the case where the gap between speech tools is widest — and where the failure is often silent.
6 min read · Updated
"Aaj ka topic thoda different hai" is one sentence. It has Hindi grammar, Hindi vocabulary, an English noun, and Roman script throughout. Nothing about it is unusual — it is the default register of Indian YouTube, Instagram and WhatsApp.
It is also a hard case for speech synthesis, and tools fail it in two distinct ways.
Failure one: the English engine
Send that sentence to an English text-to-speech system and it does exactly what it was built to do — read Latin characters as English. "Aaj" becomes something like "arge", "chalo" becomes "chah-loh", "thoda" gets an English vowel. The output is fluent and completely wrong, and it is immediately obvious to any Hindi speaker.
This failure at least announces itself. The next one does not.
Failure two: the silent drop
Send text containing Latin-script words to a model trained only on native-script audio and something worse happens. The tokenizer accepts the characters — no error, no warning — but because the model never heard Latin-script audio during training, it has nothing to produce for them. So it produces nothing. The words are skipped.
You get a clean, natural-sounding Hindi file with your brand name missing from it. Nothing failed loudly. You find out on playback, or worse, after publishing.
What actually fixes it
Transliteration before generation. English spans inside Indian-language text are converted into the native script — "WhatsApp" to व्हाट्सऐप — so the model receives characters it has audio for. The word is then pronounced the way an Indian speaker says it, which is also the right answer: nobody wants a General American "WhatsApp" dropped into a Hindi sentence.
The corollary matters too: this preprocessing must be applied selectively. Some systems handle code-mixing internally and are made worse by pre-transliterated input. Getting this right means routing per model, not applying one pipeline to everything — which is why Mayantar treats Hindi, Hinglish and English as three separate paths rather than one path with a language flag.
How to get it right in practice
- Choose by script, not by content. Devanagari text → Hindi. Roman-script text → Hinglish, even if the words are almost all Hindi.
- Do not pre-translate your script into 'proper' Hindi. Write it the way you would say it. The register is the point; formalising it makes the audio sound like a news bulletin.
- Record your reference clip in Hinglish too. A clean English reference is a worse basis for Hinglish output than a slightly noisier Hinglish one.
- Play back the first generation and listen for missing words, not just for accent. That is the failure mode that costs you.
Numbers, dates and the danda
Two smaller things that show up constantly in real scripts. Numbers and dates have to be expanded the way an Indian speaker says them, not the way an English normaliser does. And when long text is split into chunks for generation, the Devanagari full stop — the danda, । — has to count as a sentence boundary, or long-form narration breaks mid-clause.
Neither is glamorous. Both are why generated Indian-language audio either sounds right or does not.
