# Choosing a voice

> A safe first voice for each provider, how to find others, and how to check one before a whole season.

A voice is the hardest part of a config to get right, because for most providers it is **not
checked when you save the project**. The API knows each provider's fields, not its whole catalogue:
a voice that does not exist, or does not speak the language, is found out only when a file is
processed. Then the file fails, or sounds wrong.

What is checked on save: a Deepdub `voice` must be `auto`, and a MultiVoice dub needs a language
that has MultiVoice voices; anything else answers `422`. For Amazon Polly, Azure and Google,
[`GET /voices`](#known-voices) lists known voices for a language.

## Start here

Each of these ran end to end on build `0.9.0-alpha1-2026-09-28T12-19Z-118f0e`, in the
language shown:

| Provider | `provider` | Tried in | Notes |
|---|---|---|---|
| Deepdub | `{"@type": "Deepdub", "voice": "auto"}` | Spanish | Clones each speaker. No voice to choose: **the safest default**. |
| Azure | `{"@type": "Azure", "voice": "en-US-PhoebeMultilingualNeural"}` | English | Multilingual too. |
| Google | `{"@type": "Google", "voice": "es-ES-Standard-A"}` | Spanish | Google voices speak one locale: `es-ES-…` for Spanish. |
| Amazon Polly | `{"@type": "Amazon", "voice": "Vicki", "engine": "NEURAL"}` | German | Polly voices speak one language too. |

Sarvam (`{"@type": "Sarvam"}`) clones voices for Indian languages and takes no voice.

> **Tip:**
> With several speakers, **cloning** (Deepdub, Sarvam) gives each speaker a voice of their own. A
> catalogue voice gives everyone the same one, which suits narration and single presenters.
> `{"@type": "MultiVoice"}` gives each speaker a different catalogue voice, chosen for you from
> SyncWords' voices for the language: see [Dubbing](/vod-express/configuration/dubbing#voice-providers).

## Known voices

`GET /voices` lists the Amazon Polly, Azure and Google voices SyncWords knows for a language, in
every dialect of it (`es` gives Spain's, Mexico's and the others'), plus the Azure voices that
speak many languages:

```bash
curl -s -G -H "$AUTH" "$API/voices" --data-urlencode language=es --data-urlencode provider=Azure
```

```json
{
  "data": [
    {
      "provider": "Azure",
      "voice": "es-ES-ElviraNeural",
      "name": "Elvira",
      "nativeName": "Elvira",
      "language": "es-ES",
      "gender": "female",
      "engines": null,
      "multilingual": false
    }
  ]
}
```

Put `voice` in `provider.voice`, and for Amazon one of `engines` in `provider.engine`. A voice with
`multilingual: true` speaks many languages; the provider's list says which.

> **Warning:**
> The list is not each provider's whole catalogue, and it is not a check: a voice missing from it
> is still accepted. Google's newer voices (Chirp, Studio) are not in it, nor is every Standard
> voice: `es-ES-Standard-A` from the table above works and is not listed. For those, use the
> provider's own list below.

## Finding other voices

| Provider | Catalogue | What `voice` takes |
|---|---|---|
| Azure | [Voice list](https://learn.microsoft.com/azure/ai-services/speech-service/language-support?tabs=tts) | The voice name (`es-ES-ElviraNeural`) |
| Google | [Voice list](https://cloud.google.com/text-to-speech/docs/voices) | The voice name (`es-ES-Standard-A`) |
| Amazon Polly | [Voice list](https://docs.aws.amazon.com/polly/latest/dg/available-voices.html) | The voice name (`Lucia`), with an `engine` it has |
| Deepdub | None | `auto` |
| MultiVoice | None | No `voice`: the voices are chosen for the language |

The voice must speak the translation's language: an Azure, Google or Polly name carries its
locale (`es-ES-…`), and a multilingual voice speaks many. For Polly, not every voice has every
`engine`: check the list's engine columns.

## Try a voice before a whole season

1. Create a project with the voice and `options.autoStart: false`.
2. Upload one short clip: a minute is enough, and the [sample video](/vod-express/quickstart#you-need) works.
3. Start the project, wait for the file, and listen.
4. A `failed` file with a voice you just changed usually means the voice is wrong: a file with
   lines the voice could not say fails.
5. Once it sounds right, upload the rest, or `PATCH` the same config into the real project.

## Pronunciation

For names and brands a voice says wrongly, `ttsOptions.dictionary` maps a word to how it is
spoken (`{"Newsmax": "news max"}`), and `ttsOptions.locale` picks the accent of the language
(`es-XL`, Latin American Spanish). See [Dubbing](/vod-express/configuration/dubbing#pronunciation).
