> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gradium.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Règles de réécriture du texte

> Normalisez et développez des motifs de texte pour une meilleure prononciation en synthèse vocale

L'API de synthèse vocale prend en charge des règles de réécriture qui normalisent et développent certains motifs du texte d'entrée avant la synthèse. Ces règles aident le modèle TTS à prononcer correctement les nombres, les montants en devises, les adresses e-mail, les URL et les codes alphanumériques.

## Configuration

Les règles de réécriture sont contrôlées par le champ `rewrite_rules` de `json_config`. Sa valeur est une chaîne unique : soit un code de langue ou de locale (par exemple `"en"`), soit `"none"` pour désactiver la réécriture.

`json_config` se place dans le message de configuration pour les sessions WebSocket, ou dans le corps de la requête pour l'endpoint REST :

<CodeGroup>
  ```python Python (streaming) theme={null}
  import gradium

  client = gradium.client.GradiumClient(api_key="your-api-key")

  async with client.tts_realtime(
      voice_id="Bla6SbVMczYnOhfK",
      output_format="pcm",
      json_config={"rewrite_rules": "en"},
  ) as tts:
      await tts.send_text("The invoice came to $1500.")
      await tts.send_eos()
      ...
  ```

  ```python Python (one-shot) theme={null}
  import gradium

  client = gradium.client.GradiumClient(api_key="your-api-key")

  result = await client.tts(
      setup={
          "voice_id": "Bla6SbVMczYnOhfK",
          "output_format": "wav",
          "json_config": {"rewrite_rules": "en"},
      },
      text="The total is $1500, invoice sent to foo.bar@gmail.com.",
  )

  with open("output.wav", "wb") as f:
      f.write(result.raw_data)
  ```

  ```js JavaScript (WebSocket) theme={null}
  // Authentication uses a short-lived token; see the Browser WebSockets guide.
  const url = new URL("wss://api.gradium.ai/api/speech/tts");
  url.searchParams.set("token", token);
  const ws = new WebSocket(url);

  ws.addEventListener("open", () => {
    ws.send(JSON.stringify({
      type: "setup",
      model_name: "default",
      voice_id: "Bla6SbVMczYnOhfK",
      output_format: "pcm",
      json_config: {rewrite_rules: "en"},
    }));
  });
  ```

  ```bash cURL (REST) theme={null}
  curl -L -X POST https://api.gradium.ai/api/post/speech/tts \
    -H "x-api-key: your_api_key" \
    -H "Content-Type: application/json" \
    -d '{
      "text": "Write to foo.bar@gmail.com about the 1500 euros.",
      "voice_id": "Bla6SbVMczYnOhfK",
      "output_format": "wav",
      "only_audio": true,
      "json_config": {"rewrite_rules": "en"}
    }' > output.wav
  ```
</CodeGroup>

### Comportement par défaut

Pour le modèle de production comme pour le modèle bêta, lorsque la voix sélectionnée est associée à une langue, l'API active par défaut les règles de cette langue. Une session utilisant une voix anglaise se comporte donc comme si vous aviez passé `"rewrite_rules": "en"`. Définir vous-même `rewrite_rules` remplace ce comportement par défaut.

### Désactiver la réécriture : `none`

Passez `"rewrite_rules": "none"` pour désactiver toutes les règles de réécriture. En raison du comportement par défaut lié à la langue décrit ci-dessus, c'est le seul moyen d'obtenir un texte non réécrit avec une voix associée à une langue : omettre le champ active les règles de la langue de la voix, tandis que `"none"` les désactive.

```json theme={null}
{
  "json_config": {
    "rewrite_rules": "none"
  }
}
```

Lorsque les règles sont désactivées, seule une normalisation minimale du texte est appliquée avant la synthèse.

## Langues et locales prises en charge

Chaque valeur active l'ensemble complet des règles de réécriture pour la langue ou la locale correspondante :

| Valeur | Langue |
| - | - |
| `en` | Anglais |
| `fr` | Français |
| `fr-be` | Français (Belgique) |
| `fr-ch` | Français (Suisse) |
| `de` | Allemand |
| `es` | Espagnol |
| `pt` | Portugais |
| `none` | Réécriture désactivée |

Le français de Belgique et le français de Suisse partagent l'essentiel de leurs règles avec le français de France ; les
différences portent sur la manière d'énoncer les dates, les nombres et les montants. Choisissez donc `fr-be` ou
`fr-ch` lorsque votre public se trouve sur ces marchés.

## Ce qui est réécrit

Lorsqu'une langue ou une locale est sélectionnée, les éléments suivants sont développés sous leur forme orale dans cette langue :

* Les nombres, y compris les valeurs négatives et les grandes valeurs
* Les montants en devises, avec le symbole avant ou après le montant
* Les adresses e-mail
* Les URL
* Les codes et identifiants alphanumériques, comme les références ou les codes produit
* Les suites de chiffres séparées par des tirets, comme les numéros de téléphone et de compte

Les années et les petits nombres sont conservés tels quels, et la ponctuation autour d'un motif réécrit est préservée.

## Réécritures personnalisées : dictionnaires de prononciation

Les règles de réécriture traitent des motifs généraux (nombres, montants en devises, e-mails, URL). Pour réécrire des mots ou expressions qui vous sont propres (noms de marque, acronymes, jargon métier), utilisez plutôt un [dictionnaire de prononciation](/fr/guides/text-to-speech#dictionnaires-de-prononciation).

Le dictionnaire ne fait pas partie de `rewrite_rules` ni de `json_config` : créez-le dans Gradium Studio (ou via l'[API des prononciations](/fr/api-reference/endpoint/list-pronunciations)) et passez son ID dans `pronunciation_id` au premier niveau du message de configuration, à côté de `voice_id` :

```python theme={null}
result = await client.tts(
    setup={
        "voice_id": "Bla6SbVMczYnOhfK",
        "output_format": "wav",
        "pronunciation_id": "bb1ckYhNHCcIJjdK",   # top level, not in json_config
        "json_config": {"rewrite_rules": "en"},   # pattern rules still apply
    },
    text="The text you want to generate.",
)
```

Les entrées du dictionnaire sont d'abord appliquées au texte, puis les règles de motifs s'exécutent sur le résultat. Les deux se combinent librement : par exemple, un dictionnaire qui développe l'acronyme de votre produit, associé aux règles `"en"` pour lire les prix et les codes produit. Les dictionnaires de prononciation s'appliquent uniquement aux sessions WebSocket ; les requêtes REST ne peuvent pas les utiliser, et seules les `rewrite_rules` basées sur des motifs y sont disponibles.

## Bonnes pratiques

1. **Alignez la valeur sur la voix** - utilisez la langue ou la locale de la voix avec laquelle vous synthétisez, et appuyez-vous sur le comportement par défaut lorsqu'elles correspondent déjà
2. **Utilisez les codes de locale** - `fr-be` et `fr-ch` lisent les dates, les nombres et les montants comme l'attendent ces marchés
3. **Désactivez en connaissance de cause** - passez `"none"` lorsque votre texte est déjà écrit tel qu'il doit être prononcé


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.