FAQ

Audio & speech

Text-to-speech training data: why TTS needs the opposite of ASR

Pristine consistency instead of realistic variety, the recording properties that matter, and the consent question specific to synthesis.

Speech recognition wants varied, noisy, realistic audio. Speech synthesis wants the opposite — and that single inversion explains why most large speech corpora are poor TTS data.

An honest note on availability

Our verified set of 434 open datasets contains a great deal of speech data and only a handful of sets whose documentation describes them as suitable for synthesis specifically. A few large ASR corpora mention TTS as a secondary use.

That reflects the requirement rather than a gap. ASR corpora are built for variety and TTS needs consistency, so most speech data is simply the wrong shape — which is worth knowing before you download three hundred hours and discover it. Our speech and audio datasets and speech recognition datasets guides cover the speech sets that do exist.

So this post is about what the data must look like, and the fact that recording your own is more tractable here than for almost any other task.

The inversion

For recognition you want variety, because the model must be robust to whatever arrives: accents, noise, channels, distances, overlapping speakers. Every bit of messiness in training buys robustness.

For synthesis the model reproduces what it hears. Background noise in training data becomes background noise in generated speech. Inconsistent microphone placement becomes inconsistent timbre. Variable recording levels become variable output. Every bit of messiness in training becomes a defect in the product.

So TTS data wants: a single speaker or cleanly separated multiple speakers, studio or studio-like conditions, a consistent microphone and placement, a high sampling rate, a quiet noise floor, consistent levels, and accurate transcripts.

This is why a large crowdsourced ASR corpus, recorded by thousands of people on their own devices in their own rooms, is excellent recognition data and unusable for synthesis.

What the transcripts must carry

Transcription requirements are stricter than for recognition, and in a different direction.

Diagram: the text '627' with a speaker icon and an ASR transcript reading 'six twenty seven', with arrows to five candidate verbalisations and their character error rates: 'six hundred twenty seven' 33.3 (default normalisation), 'six twenty seven' 0.0 (what was said, in green), 'six two seven' 30.7, 'sixty two seven' 40.0 and 'six hundred and twenty seven' 42.86.
Given '627', a normalisation grammar proposes several readings, from 'six hundred twenty seven' to 'sixty two seven', and audio-based normalisation keeps the one closest to what the speaker actually said. For synthesis data that is the requirement: the transcript must spell out the words as spoken. The error rates in the figure are illustrative. Image: NVIDIA/NeMo-text-processing · Apache-2.0 repository

Exact correspondence. The text must match the audio precisely, including every word actually spoken. A recognition model tolerates some transcript noise; a synthesis model learns a wrong mapping from text to sound, which manifests as mispronunciation.

Normalisation decisions made explicitly. How are numbers, dates, abbreviations, currency and symbols written, and how are they spoken? “£24.50” can be read several ways. Whatever convention your transcripts use is what the model learns, so the normalisation pipeline is part of the product.

Punctuation. It carries prosody — pauses, intonation, phrasing. Unpunctuated transcripts produce flat-sounding speech, which is a common disappointment with data repurposed from recognition corpora.

Pronunciation for the awkward cases. Proper nouns, domain terms, loanwords and initialisms are where synthesis most visibly fails. If your domain has them, a pronunciation lexicon alongside the transcripts is worth the effort.

A Praat editor window showing a speech waveform above a single annotation tier of utterance intervals. The selected interval reads 'A BRISK WIND HAD COME UP AND WAS DRIVING PUFFY WHITE CLOUDS ACROSS THE SKY'; the next ones read 'THE ORCHARD WAS SPARKLING AND RIPPLING IN THE SUN', 'THAT INVITATION DECIDED HER' and 'OH BUT I'M GLAD TO GET THIS PLACE MOWED', all in capitals with no punctuation.
A recognition corpus's idea of a transcript: every utterance in capitals, with no commas, full stops or question marks. That is fine for a recogniser, but punctuation is exactly what a synthesiser needs and cannot find here, because punctuation is where the pauses and intonation are written down. Image: MontrealCorpusTools/Montreal-Forced-Aligner · MIT repository; audio and transcripts from LibriSpeech (CC BY 4.0)

Recording your own is unusually practical

Given the consistency requirement, this is one of the few tasks where producing your own data is often easier than finding it.

A single speaker in a treated room with a decent microphone, reading prepared text, produces exactly the consistent high-quality paired data the task wants. Useful results have been achieved with single-digit to low tens of hours for a single voice, and modern approaches adapting a pretrained multi-speaker model need considerably less than training from scratch.

Make the script cover what you need: phonetic coverage so every sound appears in varied contexts, your domain vocabulary and proper nouns, sentence lengths and structures matching your real output, and the prosodic range you want — statements, questions, lists.

And record consistently. One microphone, one position, one room, kept identical from session to session, with levels checked each time. A few days of careful recording beats weeks of searching for data that does not exist in the shape you need.

Six bar charts in two rows. Top row: number of segments by sentence length in words for speakers F1, F2 and F3, mostly between 9 and 18 words. Bottom row: number of segments by duration in seconds for the same speakers, mostly between 3 and 7 seconds, with F2 more evenly spread.
Sentence statistics for MnTTS2, a Mongolian multi-speaker synthesis corpus, for each of its three speakers (F1 to F3): words per sentence (top) and duration in seconds (bottom). Most sentences run 9 to 18 words and 3 to 7 seconds, though F2's script spreads wider. Write the script yourself and you set these distributions. Image: Figure 2 of the article · CC BY 4.0 · from Liang et al. 2023, Applied Sciences, “Comparative Study for Multi-Speaker Mongolian TTS with a New Corpus”, doi:10.3390/app13074237

Questions people ask

Can I use an ASR corpus for TTS?

Usually poorly. Crowdsourced multi-speaker recognition corpora are too varied and too noisy. The partial exception is audiobook-derived corpora such as LibriTTS: long read passages with the book text as transcripts, which is why those sets get mentioned for both uses. But they are volunteer recordings rather than studio sessions, and LibriTTS alone spans 2,456 speakers, so they need filtering by speaker and by recording quality before they make good synthesis data.

How many hours for one voice?

Single-digit to low tens of hours for a good single-speaker voice, and less when adapting a pretrained multi-speaker model rather than training from scratch. Consistency matters more than duration: ten careful hours beats thirty inconsistent ones.

What about multi-speaker and voice cloning?

Multi-speaker models need many speakers with clean separation and speaker labels. Few-shot cloning from seconds of audio is an active area — and the one where the consent question is most acute, since the whole capability is reproducing a specific identifiable person's voice.

Does the text need to be in the target domain?

Partly. Phonetic coverage matters most, and generic text provides it. But domain vocabulary, proper nouns and the sentence structures you will actually synthesise are worth including deliberately — they are where synthesis audibly fails.

Stop hunting. Start searching.

Tens of thousands of curated datasets, searchable in plain language — with the licence and size checked before you download anything.

Search Dataset Finder →