| name | voice-casting |
| description | Audition multiple TTS voices on a short diagnostic line before committing to a full-script render, then measure the chosen take with ffprobe. Trigger - /voice-casting, before generating any final voiceover. |
Voice Casting
TTS costs 0.15 credits per take. There is no excuse for an unauditioned voice.
1. Write a diagnostic line, not a pretty one
Pack it with the sounds most likely to fail in the target language — the phonemes that separate dialects, plus any brand or product names.
Egyptian Arabic example: دلوقتي في الجامعة، ليلى بتظبّطها لك في ثواني — tests دلوقتي, الجامعة (ج as hard G, not /dʒ/), and a contracted verb.
2. Audition wide
Five or more voices. Cost: under one credit total. Include at least one from each engine variant — they differ far more than voices within one engine.
3. Fix the script, not just the voice
Mispronunciation is usually the text, not the voice:
- Write foreign product names in their native Latin script inside the target-language text (
Teams, not تيمز) — engines code-switch better than they transliterate
- Unpack contractions —
بتظبطهالك → بتظبّطها لك
- Add diacritics on ambiguous words
4. A native speaker decides — always
Duration proves the engine read the whole text. It proves nothing about accent. Never report a dialect as correct on your own judgement. Ask, and name the specific words to listen for.
5. Measure before cutting picture
ffprobe -v error -show_entries format=duration -of csv=p=0 take.mp3
Pacing is language-dependent, not just voice-dependent. The same voice on the same 2-minute script measured 121.9s in Arabic and 144.4s in English — a 23-second swing. Never assume; always measure.
When accent and timing conflict, keep the correct accent and trim the script.
Output
{ "auditioned": 5, "selected": {"voice":"Soraya","language":"ar-EG","duration":121.9},
"native_speaker_verified": true, "credits_spent": 0.9 }