Bulk text to speech from a spreadsheet
Some projects need not one recording but hundreds: a line for every flashcard, every button of an app, every product, every station or every language. Clicking through an online tool line by line takes days, and cloud services bill every character.
The SuperClonica engine voices a whole spreadsheet on your own computer, one file per row, with the voice and language you set for each line. This guide shows how to prepare the table, how to voice it in one run and how to fix single lines later.
When you need bulk text to speech
Whatever the project, the pattern is the same: one row of text in, one audio file out.
- Language courses: one file per word or sentence for flashcards.
- Apps and games: interface prompts, hints and short character lines.
- Shops and catalogs: a short spoken description for every product.
- Public spaces: a full set of announcements or audio guide stops in several languages.
Test the voices free online
Before you voice hundreds of lines, open the page of each voice you plan to use, paste a typical row of 30 to 100 characters, choose the language and press Voice it. In a few seconds you hear whether the voice fits, with no account.
Prepare the spreadsheet
Write numbers, names and abbreviations in each row the way they should be heard.
- One row per audio file, with columns such as file, text, voice and lang.
- Unique file names without spaces, such as card_0412 or prompt_checkout_de.
- Voice as a stock name from M1 to M5 and F1 to F5 or as the path of a voice file; language as a code such as en, es or ja.
- Save the table as CSV in UTF-8, so accents and non-Latin scripts survive.
Voice every row offline
Install the free engine with python -m pip install superclonica-cpu, or superclonica-gpu-cuda for an NVIDIA graphics card. Then, in Python, after import csv, from superclonica import Superclonica and tts = Superclonica(), one loop voices the whole table: for row in csv.DictReader(open("lines.csv", encoding="utf-8")): audio, rate = tts.synthesize(row["text"], voice=row["voice"], lang=row["lang"], seed=7, normalize=True); tts.save(row["file"] + ".wav", audio). A fixed seed makes every run give the same audio for the same row, and normalize=True keeps all files at the same loudness. The Python API saves WAV, FLAC or OGG by extension; for MP3 files, run the command-line engine for each row with an output name ending in .mp3. Everything runs offline, with no character limit.
Check, fix and re-run
Listen to a sample from each voice and language before you ship. When a row is misread, change its spelling in the CSV and voice only that row again: with the same seed, every untouched row stays exactly as it was. Keep the CSV under version control next to your project, so the audio can always be rebuilt from it.