Mixed-language script: one Sume TTS request per language, then concat
A script that switches language mid-way needs one TTS request per language on Sume. Join up to 20 parts with timeline audio at $0.01.

Sume's tts_create takes one language and one voice per request, so a script that switches language needs one request per language, with a voice tagged for each. Then join the audio files in order with timeline audio, which concatenates up to 20 parts for a flat $0.01. Do not send a mixed script to a single voice: the language check warns on a mismatch, and the output will not be what you want.
How to split
Break the script at every language switch into parts, and list each as a language, a voice and a transcript. Keep each part a full sentence, since a voice that starts mid-sentence can sound clipped. If you have more than 20 parts, concatenate in two rounds.
| Item | Limit or price |
|---|---|
| Transcript per request | Up to 20,000 characters |
| TTS price | $0.0475 per 1,000 characters |
| Parts per concat | Up to 20 |
| Concat price | $0.01 flat |
Checking the join
Listen at each seam. If the volume or pace differs between voices, use generation_config with speed (0.6 to 1.5) and volume (0.5 to 2) on the quieter part. See timeline audio for the concat shape, and MCP tools and gates for the TTS fields.
Sources
Related posts
More in Developers
- Gaps between joined MP3 clips: priming padding and Sume's wav default
Joined MP3 clips can leave tiny gaps because each file carries priming padding. Sume Timeline audio defaults to sample-exact wav. When to use mp3.
- MSW and Vitest: mock a Sume 409 idempotency_conflict
Use MSW's http.post and setupServer in Vitest to test how your code handles a Sume Format run 409, with onUnhandledRequest set to error.
- Music API sync mode: wait_timeout_seconds 0-30, timed_out means poll
Sume music jobs accept mode sync with wait_timeout_seconds from 0 to 30. If sync.timed_out is true the job is still running; poll, never resubmit.
- Music API metadata field: tag tracks by campaign, not sent to provider
Sume's Music Router stores a metadata object on the job and does not send it to the provider. How to tag generations by campaign, brief or scene for audits.
Written by Sume