> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Bonnes pratiques

Ce guide présente des techniques pour améliorer les résultats de synthèse vocale avec les modèles ElevenLabs. Testez ces méthodes pour déterminer celles qui répondent le mieux à vos besoins.

## Contrôles

> **Info**
>
> Nous travaillons activement sur le *Director's Mode* pour vous donner encore plus de contrôle sur les résultats.

Ces techniques offrent une approche pratique pour obtenir des résultats nuancés en attendant le déploiement de fonctionnalités avancées comme le *Director's Mode*.

### Pauses

> **Info**
>
> Eleven v4 et Eleven v3 ne prennent pas en charge les balises de pause SSML. Utilisez les techniques décrites dans la
> section [Instructions pour Eleven v4](#prompting-eleven-v4) pour contrôler les pauses.

Utilisez `<break time="x.xs" />` pour des pauses naturelles allant jusqu'à 3 secondes.

> **Note**
>
> L'utilisation d'un trop grand nombre de balises break dans une même génération peut entraîner une instabilité. L'IA peut accélérer ou
> introduire des bruits supplémentaires ou des artefacts audio. Nous travaillons à résoudre ce problème.

**`Exemple`**

```text Exemple
"Hold on, let me think." <break time="1.5s" /> "Alright, I've got it."
```

* **Cohérence :** utilisez les balises `<break>` de manière cohérente pour préserver un flux de parole naturel. Une utilisation excessive peut entraîner une instabilité.
* **Comportement propre à chaque voix :** les voix peuvent gérer les pauses différemment, en particulier celles entraînées avec des sons d'hésitation comme « uh » ou « ah ».

Les alternatives à `<break>` comprennent les tirets (- ou --) pour les courtes pauses ou les points de suspension (...) pour un ton hésitant. Elles sont toutefois moins cohérentes.

**`Exemple`**

```text Exemple

"It… well, it might work." "Wait — what's that noise?"

```

### Prononciation

#### API avec Eleven v4

[Eleven v4](/docs/fr/overview/capabilities/text-to-speech/eleven-v4) (`eleven_v4`) intègre une meilleure prise en charge native de l'Alphabet phonétique international, ou API, vous offrant un contrôle plus précis de la prononciation des noms, termes techniques et autres mots nécessitant un traitement particulier. La prononciation API est plus cohérente que dans les modèles précédents, mais les résultats peuvent encore varier selon la voix et l'expression. Nous vous recommandons de tester les prononciations importantes avec la voix choisie avant de vous y fier en production.

Contrairement aux anciens modèles qui nécessitent des balises de phonèmes de type XML, Eleven v4 comprend les symboles API lorsqu'ils sont placés entre des barres obliques dans votre texte :

**`Syntaxe`**

```text Syntaxe
"/IPA_transcription/"
```

La transcription API doit être :

* Placée entre des barres obliques (`/`) au début et à la fin
* Écrite avec des symboles API standard
* Placée entre guillemets doubles lorsqu'elle est transmise comme paramètre de chaîne

**Exemples de code**

**`Python`**

```python title="Python"
from elevenlabs import ElevenLabs

client = ElevenLabs()
audio = client.text_to_speech.convert(
    voice_id="21m00Tcm4TlvDq8ikWAM",
    text='The term "/ˌbaɪoʊˈkemɪstri/" refers to the study of chemical processes.',
    model_id="eleven_v4",
)
```

**`TypeScript`**

```typescript title="TypeScript"
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const client = new ElevenLabsClient();

const audio = await client.textToSpeech.convert("21m00Tcm4TlvDq8ikWAM", {
  text: 'The city of "/ˌsænfrənˈsɪskoʊ/" is located in California.',
  modelId: "eleven_v4",
});
```

**`cURL`**

```bash title="cURL"
curl -X POST https://api.elevenlabs.io/v1/text-to-speech/{voice_id} \
  -H "xi-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "The concept of \"/fəˈnɛtɪks/\" is central to linguistics.",
    "model_id": "eleven_v4"
  }'
```

Vous pouvez inclure plusieurs transcriptions API dans une même chaîne de texte :

**`Python`**

```python title="Python"
from elevenlabs import ElevenLabs

client = ElevenLabs()
text = 'The medication "/ɡluːˈkoʊs/" and "/ˌɪnsjəˈlɪn/" are commonly used to manage conditions like "/ˌdaɪəˈbiːtiːz/".'
audio = client.text_to_speech.convert(
    voice_id="21m00Tcm4TlvDq8ikWAM",
    text=text,
    model_id="eleven_v4",
)
```

**`TypeScript`**

```typescript title="TypeScript"
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const client = new ElevenLabsClient();
const text =
  'The medication "/ɡluːˈkoʊs/" and "/ˌɪnsjəˈlɪn/" are commonly used to manage conditions like "/ˌdaɪəˈbiːtiːz/".';
const audio = await client.textToSpeech.convert("21m00Tcm4TlvDq8ikWAM", {
  text,
  modelId: "eleven_v4",
});
```

**Bonnes pratiques**

* Utilisez les symboles API standard du [tableau de l'Alphabet phonétique international](https://en.wikipedia.org/wiki/International_Phonetic_Alphabet)
* Incluez les marques d'accentuation : accent tonique primaire (ˈ) et secondaire (ˌ) pour les mots à plusieurs syllabes
* Appliquez-les de manière sélective : encadrez uniquement les mots ou expressions nécessitant un contrôle de la prononciation
* Testez avec votre voix : les différentes voix peuvent interpréter l'API de façon légèrement différente

**Résolution des problèmes**

#### La prononciation reste incorrecte

Vérifiez l'exactitude de votre transcription API à l'aide d'un dictionnaire API. Incluez les marques d'accentuation (ˈ pour
l'accent primaire, ˌ pour l'accent secondaire) pour les mots à plusieurs syllabes. Testez avec différentes voix, car
certaines peuvent interpréter l'API plus précisément que d'autres.

#### Résultats incohérents avec la même transcription API

La prononciation API est plus cohérente que dans les modèles précédents, mais les résultats peuvent encore varier selon la
voix et l'expression. Nous vous recommandons de tester les prononciations importantes avec la voix choisie avant de vous
y fier en production. Si vous avez besoin d'un résultat cohérent, générez plusieurs fois et
sélectionnez le meilleur résultat.

#### Balises de phonèmes pour les modèles v2

Spécifiez la prononciation à l'aide des [balises de phonèmes SSML](https://en.wikipedia.org/wiki/Speech_Synthesis_Markup_Language) avec les modèles v2. Les alphabets pris en charge incluent l'[Arpabet CMU](https://en.wikipedia.org/wiki/CMU_Pronouncing_Dictionary) et l'[Alphabet phonétique international (API)](https://en.wikipedia.org/wiki/International_Phonetic_Alphabet).

> **Note**
>
> Les balises de phonèmes sont uniquement compatibles avec le [modèle](/docs/fr/overview/models) `eleven_flash_v2`.

**`Exemple CMU Arpabet`**

```xml Exemple CMU Arpabet
<phoneme alphabet="cmu-arpabet" ph="M AE1 D IH0 S AH0 N">
  Madison
</phoneme>
```

**`Exemple API`**

```xml Exemple API
<phoneme alphabet="ipa" ph="ˈæktʃuəli">
  actually
</phoneme>
```

Nous recommandons d'utiliser CMU Arpabet pour obtenir des résultats cohérents et prévisibles avec les modèles v2. Bien que l'API puisse être efficace, CMU Arpabet offre généralement des performances plus fiables.

Les balises de phonèmes ne fonctionnent que pour les mots individuels. Si vous avez un nom composé d'un prénom et d'un nom que vous souhaitez faire prononcer d'une certaine manière, vous devrez créer une balise de phonème pour chaque mot.

Veillez à marquer correctement l'accentuation des mots à plusieurs syllabes afin de conserver une prononciation exacte :

**`Utilisation correcte`**

```xml Utilisation correcte
<phoneme alphabet="cmu-arpabet" ph="P R AH0 N AH0 N S IY EY1 SH AH0 N">
  pronunciation
</phoneme>
```

**`Utilisation incorrecte`**

```xml Utilisation incorrecte
<phoneme alphabet="cmu-arpabet" ph="P R AH N AH N S IY EY SH AH N">
  pronunciation
</phoneme>
```

#### Balises d'alias

Pour les modèles qui ne prennent pas en charge les balises de phonèmes, vous pouvez essayer d'écrire les mots de manière plus phonétique. Vous pouvez également utiliser diverses astuces, comme les majuscules, les tirets, les apostrophes, ou même des guillemets simples autour d'une ou plusieurs lettres.

Par exemple, un mot comme « trapezii » pourrait s'écrire « trapezIi » pour accentuer davantage le « ii » du mot.

Vous pouvez remplacer le mot directement dans votre texte ou, si vous souhaitez spécifier une prononciation à l'aide d'autres mots ou expressions lorsque vous utilisez un dictionnaire de prononciation, vous pouvez utiliser des balises d'alias. Cela peut être utile si vous générez du contenu avec Multilingual v2, qui ne prend pas en charge les balises de phonèmes. Vous pouvez utiliser des dictionnaires de prononciation avec ElevenCreative Studio, Dubbing Studio et la synthèse vocale via l'API.

Par exemple, si votre texte comprend un nom dont la prononciation inhabituelle peut poser problème à l'IA, vous pouvez utiliser une balise d'alias pour préciser comment vous souhaitez qu'il soit prononcé :

```
  <lexeme>
    <grapheme>Claughton</grapheme>
    <alias>Cloffton</alias>
  </lexeme>
```

Si vous voulez vous assurer qu'un acronyme est toujours prononcé d'une certaine manière lorsqu'il apparaît dans votre texte, vous pouvez utiliser une balise d'alias pour le préciser :

```
  <lexeme>
    <grapheme>UN</grapheme>
    <alias>United Nations</alias>
  </lexeme>
```

#### Dictionnaires de prononciation

Certains de nos outils, comme ElevenCreative Studio et Dubbing Studio, vous permettent de créer et d'importer un dictionnaire de prononciation. Ils vous permettent de spécifier la prononciation de certains mots, comme les noms de personnages ou de marques, ou de définir la manière dont les acronymes doivent être lus.

Les dictionnaires de prononciation offrent cette fonctionnalité en vous permettant d'importer un fichier de lexique ou de dictionnaire qui spécifie des paires de mots et leur prononciation, à l'aide d'un alphabet phonétique ou de substitutions de mots.

Lorsqu'un de ces mots est rencontré dans un projet, le modèle IA prononce le mot à l'aide du remplacement spécifié.

Pour fournir un fichier de dictionnaire de prononciation, ouvrez les paramètres d'un projet et importez un fichier au format TXT ou [.PLS](https://www.w3.org/TR/pronunciation-lexicon/). Lorsqu'un dictionnaire est ajouté à un projet, celui-ci recalcule automatiquement les parties du projet qui doivent être reconverties avec le nouveau fichier de dictionnaire et les marque comme non converties.

Actuellement, nous ne prenons en charge que les dictionnaires de prononciation qui spécifient des remplacements à l'aide de balises de phonèmes ou d'alias.

Les phonèmes comme les alias sont des ensembles de règles qui spécifient un mot ou une expression recherchés, appelés graphèmes, ainsi que leur remplacement. Veuillez noter que les recherches sont sensibles à la casse. Lors de la recherche d'un mot de remplacement dans un dictionnaire de prononciation, le dictionnaire est parcouru du début à la fin et seul le tout premier remplacement est utilisé.

#### Exemples de dictionnaires de prononciation

Voici des exemples de dictionnaires de prononciation en CMU Arpabet et en API, incluant un phonème pour spécifier la prononciation de « Apple » et un alias pour remplacer « UN » par « United Nations » :

**`Exemple CMU Arpabet`**

```xml Exemple CMU Arpabet
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="cmu-arpabet" xml:lang="en-GB">
  <lexeme>
    <grapheme>apple</grapheme>
    <phoneme>AE P AH L</phoneme>
  </lexeme>
  <lexeme>
    <grapheme>UN</grapheme>
    <alias>United Nations</alias>
  </lexeme>
</lexicon>
```

**`Exemple API`**

```xml Exemple API
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-GB">
  <lexeme>
    <grapheme>Apple</grapheme>
    <phoneme>ˈæpl̩</phoneme>
  </lexeme>
  <lexeme>
    <grapheme>UN</grapheme>
    <alias>United Nations</alias>
  </lexeme>
</lexicon>
```

Pour générer un fichier `.pls` de dictionnaire de prononciation, plusieurs outils open source sont disponibles :

* [Sequitur G2P](https://github.com/sequitur-g2p/sequitur-g2p) - Outil open source qui apprend les règles de prononciation à partir de données et peut générer des transcriptions phonétiques.
* [Phonetisaurus](https://github.com/AdolfVonKleist/Phonetisaurus) - Système G2P open source entraîné sur des dictionnaires existants comme CMUdict.
* [eSpeak](https://github.com/espeak-ng/espeak-ng) - Synthétiseur vocal capable de générer des transcriptions de phonèmes à partir de texte.
* [CMU Pronouncing Dictionary](https://github.com/cmusphinx/cmudict) - Dictionnaire anglais préétabli avec des transcriptions phonétiques.

### Émotion

Exprimez les émotions par le contexte narratif ou des balises de dialogue explicites. Cette approche aide l'IA à comprendre le ton et l'émotion à reproduire.

**`Exemple`**

```text Exemple
You're leaving?" she asked, her voice trembling with sadness. "That's it!" he exclaimed triumphantly.
```

Les balises de dialogue explicites produisent des résultats plus prévisibles que le seul contexte. Toutefois, le modèle prononcera également les indications de jeu émotionnelles. Vous pouvez les supprimer en post-production à l'aide d'un éditeur audio si vous ne les souhaitez pas.

### Rythme

Le rythme de l'audio est fortement influencé par l'audio utilisé pour créer la voix. Lors de la création de votre voix, nous recommandons d'utiliser des échantillons plus longs et continus afin d'éviter les problèmes de rythme, comme une parole anormalement rapide.

Pour contrôler la vitesse de l'audio généré, vous pouvez utiliser le paramètre de vitesse. Il vous permet d'accélérer ou de ralentir la parole générée. Le paramètre de vitesse est disponible dans Text to Speech sur le site web et via l'API, ainsi que dans ElevenCreative Studio et Agents Platform. Vous le trouverez dans les paramètres de la voix.

La valeur par défaut est 1,0, ce qui signifie que la vitesse n'est pas ajustée. Les valeurs inférieures à 1,0 ralentissent la voix, jusqu'à un minimum de 0,7. Les valeurs supérieures à 1,0 accélèrent la voix, jusqu'à un maximum de 1,2. Les valeurs extrêmes peuvent affecter la qualité de la parole générée.

Le rythme peut également être contrôlé en écrivant dans un style narratif naturel.

**`Exemple`**

```text Exemple
"I… I thought you'd understand," he said, his voice slowing with disappointment.
```

### Conseils

#### Problèmes courants

* Pauses incohérentes : assurez-vous d'utiliser la syntaxe `<break time="x.xs" />` pour les
  pauses.
* Erreurs de prononciation : utilisez les balises de phonèmes CMU Arpabet ou API pour une prononciation précise.
* Émotion inadéquate : ajoutez un contexte narratif ou des balises explicites pour guider l'émotion.
  **N'oubliez pas de supprimer tout texte d'indication émotionnelle en post-production.**

#### Conseils pour améliorer les résultats

Testez d'autres formulations pour obtenir le rythme ou l'émotion souhaités. Pour les effets sonores complexes,
décomposez les prompts en éléments plus petits et séquentiels, puis combinez les résultats manuellement.

### Contrôle créatif

Bien que nous développions activement un « Director's Mode » pour donner aux utilisateurs encore plus de contrôle sur les résultats, voici quelques techniques provisoires pour maximiser la créativité et la précision :

### Style narratif

Rédigez les prompts dans un style narratif, semblable à l'écriture de scénarios, afin d'orienter efficacement le ton et le rythme.

### Résultats superposés

Générez les effets sonores ou la parole par segments et superposez-les à l'aide d'un logiciel d'édition audio pour créer des compositions plus complexes.

### Expérimentation phonétique

Si la prononciation n'est pas parfaite, testez des orthographes alternatives ou des approximations phonétiques afin d'obtenir le résultat souhaité.

### Ajustements manuels

Combinez manuellement des effets sonores individuels en post-production pour les séquences qui nécessitent un timing précis.

### Itération à partir des retours

Affinez les résultats en ajustant les descriptions, les balises ou les indications émotionnelles.

## Normalisation du texte

Lors de l'utilisation de Text to Speech avec des éléments complexes comme les numéros de téléphone, les codes postaux et les emails, ils peuvent être mal prononcés. Cela s'explique souvent par le fait que ces éléments précis ne figurent pas dans l'ensemble d'entraînement et que les modèles plus petits ne parviennent pas à généraliser leur prononciation. Ce guide explique quand ces écarts se produisent et comment les faire prononcer correctement.

> **Tip**
>
> La normalisation est activée par défaut pour tous les modèles TTS afin d'améliorer la prononciation des nombres,
> des dates et d'autres éléments de texte complexes.

### Pourquoi les modèles lisent-ils les entrées différemment ?

Certains modèles sont entraînés pour lire les nombres et les expressions de manière plus naturelle. Par exemple, l'expression « \$1,000,000 » est correctement lue comme « one million dollars » par le modèle Eleven Multilingual v2. Cependant, la même expression est lue comme « one thousand thousand dollars » par le modèle Eleven Flash v2.5.

Cela s'explique par le fait que le modèle Multilingual v2 est plus grand et peut mieux généraliser la lecture des nombres de manière plus naturelle pour les auditeurs, tandis que le modèle Flash v2.5 est bien plus petit et ne le peut donc pas.

#### Exemples courants

Les modèles Text to Speech peuvent rencontrer des difficultés avec les éléments suivants :

* Numéros de téléphone (« 123-456-7890 »)
* Devises (« \$47,345.67 »)
* Événements de calendrier (« 2024-01-01 »)
* Heure (« 9:23 AM »)
* Adresses (« 123 Main St, Anytown, USA »)
* URL (« example.com/link/to/resource »)
* Abréviations d'unités (« TB » au lieu de « Terabyte »)
* Raccourcis (« Ctrl + Z »)

### Solutions

#### Utiliser des modèles entraînés

Le moyen le plus simple d'atténuer ce problème consiste à utiliser un modèle TTS entraîné pour lire les nombres et les expressions de manière plus naturelle, comme le modèle Eleven Multilingual v2. Cela n'est toutefois pas toujours possible, par exemple si vous avez un cas d'usage où une faible latence est essentielle, comme les agents conversationnels.

#### Appliquer la normalisation dans les prompts LLM

Si vous utilisez un LLM pour générer le texte destiné au TTS, vous pouvez ajouter des instructions de normalisation au prompt.

#### Utilisez des prompts clairs et explicites

Les LLM répondent mieux à des instructions structurées et explicites. Votre prompt doit clairement indiquer que vous souhaitez convertir le texte dans un format lisible à voix haute.

#### Gérez les différents formats numériques

Tous les nombres ne se lisent pas de la même façon. Réfléchissez à la manière dont les différents types de nombres doivent être prononcés :

* Nombres cardinaux : 123 → « cent vingt-trois »
* Nombres ordinaux : 2nd → « deuxième »
* Valeurs monétaires : \$45.67 → « quarante-cinq dollars et soixante-sept cents »
* Numéros de téléphone : « 123-456-7890 » → « un deux trois, quatre cinq six, sept huit neuf zéro »
* Décimales et fractions : « 3.5 » → « trois virgule cinq », « ⅔ » → « deux tiers »
* Chiffres romains : « XIV » → « quatorze » (ou « le quatorzième » s'il s'agit d'un titre)

#### Supprimez ou développez les abréviations

Les abréviations courantes doivent être développées pour plus de clarté :

* « Dr. » → « Docteur »
* « Ave. » → « Avenue »
* « St. » → « Rue » (mais « St. Patrick » doit rester inchangé)

Vous pouvez demander un développement explicite dans votre prompt :

> Développez toutes les abréviations dans leur forme complète à prononcer.

#### Normalisation alphanumérique

La normalisation ne concerne pas uniquement les nombres. Certaines expressions alphanumériques doivent également être normalisées pour plus de clarté :

* Raccourcis : « Ctrl + Z » → « contrôle z »
* Abréviations d'unités : « 100km » → « cent kilomètres »
* Symboles : « 100% » → « cent pour cent »
* URL : « elevenlabs.io/docs » → « eleven labs point io barre oblique docs »
* Événements de calendrier : « 2024-01-01 » → « premier janvier deux mille vingt-quatre »

#### Prenez en compte les cas particuliers

Différents contextes peuvent nécessiter différentes conversions :

* Dates : « 01/02/2023 » → « deux janvier deux mille vingt-trois » ou « premier février deux mille vingt-trois » (selon les paramètres régionaux)
* Heure : « 14:30 » → « quatorze heures trente »

Si vous avez besoin d'un format précis, indiquez-le explicitement dans le prompt.

##### Tout réunir

Ce prompt constitue un bon point de départ pour la plupart des cas d'usage :

```text maxLines=0
Convert the output text into a format suitable for text-to-speech. Ensure that numbers, symbols, and abbreviations are expanded for clarity when read aloud. Expand all abbreviations to their full spoken forms.

Example input and output:

"$42.50" → "forty-two dollars and fifty cents"
"£1,001.32" → "one thousand and one pounds and thirty-two pence"
"1234" → "one thousand two hundred thirty-four"
"3.14" → "three point one four"
"555-555-5555" → "five five five, five five five, five five five five"
"2nd" → "second"
"XIV" → "fourteen" - unless it's a title, then it's "the fourteenth"
"3.5" → "three point five"
"⅔" → "two-thirds"
"Dr." → "Doctor"
"Ave." → "Avenue"
"St." → "Street" (but saints like "St. Patrick" should remain)
"Ctrl + Z" → "control z"
"100km" → "one hundred kilometers"
"100%" → "one hundred percent"
"elevenlabs.io/docs" → "eleven labs dot io slash docs"
"2024-01-01" → "January first, two-thousand twenty-four"
"123 Main St, Anytown, USA" → "one two three Main Street, Anytown, United States of America"
"14:30" → "two thirty PM"
"01/02/2023" → "January second, two-thousand twenty-three" or "the first of February, two-thousand twenty-three", depending on locale of the user
```

#### Utiliser des expressions régulières pour le prétraitement

Si vous utilisez du code pour envoyer un prompt à un LLM, vous pouvez utiliser des expressions régulières pour normaliser le texte avant de le fournir au modèle. Cette technique est plus avancée et nécessite quelques connaissances en expressions régulières. Voici quelques exemples simples :

**`normalize_text.py`**

```python title="normalize_text.py" maxLines=0
# Be sure to install the inflect library before running this code
import inflect
import re

# Initialize inflect engine for number-to-word conversion
p = inflect.engine()

def normalize_text(text: str) -> str:
    # Convert monetary values
    def money_replacer(match):
        currency_map = {"$": "dollars", "£": "pounds", "€": "euros", "¥": "yen"}
        currency_symbol, num = match.groups()

        # Remove commas before parsing
        num_without_commas = num.replace(',', '')

        # Check for decimal points to handle cents
        if '.' in num_without_commas:
            dollars, cents = num_without_commas.split('.')
            dollars_in_words = p.number_to_words(int(dollars))
            cents_in_words = p.number_to_words(int(cents))
            return f"{dollars_in_words} {currency_map.get(currency_symbol, 'currency')} and {cents_in_words} cents"
        else:
            # Handle whole numbers
            num_in_words = p.number_to_words(int(num_without_commas))
            return f"{num_in_words} {currency_map.get(currency_symbol, 'currency')}"

    # Regex to handle commas and decimals
    text = re.sub(r"([$£€¥])(\d+(?:,\d{3})*(?:\.\d{2})?)", money_replacer, text)

    # Convert phone numbers
    def phone_replacer(match):
        return ", ".join(" ".join(p.number_to_words(int(digit)) for digit in group) for group in match.groups())

    text = re.sub(r"(\d{3})-(\d{3})-(\d{4})", phone_replacer, text)

    return text

# Example usage
print(normalize_text("$1,000"))   # "one thousand dollars"
print(normalize_text("£1000"))   # "one thousand pounds"
print(normalize_text("€1000"))   # "one thousand euros"
print(normalize_text("¥1000"))   # "one thousand yen"
print(normalize_text("$1,234.56"))   # "one thousand two hundred thirty-four dollars and fifty-six cents"
print(normalize_text("555-555-5555"))  # "five five five, five five five, five five five five"

```

**`normalizeText.ts`**

```typescript title="normalizeText.ts" maxLines=0
// Be sure to install the number-to-words library before running this code
import { toWords } from "number-to-words";

function normalizeText(text: string): string {
  return (
    text
      // Convert monetary values (e.g., "$1000" → "one thousand dollars", "£1000" → "one thousand pounds")
      .replace(/([$£€¥])(\d+(?:,\d{3})*(?:\.\d{2})?)/g, (_, currency, num) => {
        // Remove commas before parsing
        const numWithoutCommas = num.replace(/,/g, "");

        const currencyMap: { [key: string]: string } = {
          $: "dollars",
          "£": "pounds",
          "€": "euros",
          "¥": "yen",
        };

        // Check for decimal points to handle cents
        if (numWithoutCommas.includes(".")) {
          const [dollars, cents] = numWithoutCommas.split(".");
          return `${toWords(Number.parseInt(dollars))} ${currencyMap[currency] || "currency"}${cents ? ` and ${toWords(Number.parseInt(cents))} cents` : ""}`;
        }

        // Handle whole numbers
        return `${toWords(Number.parseInt(numWithoutCommas))} ${currencyMap[currency] || "currency"}`;
      })

      // Convert phone numbers (e.g., "555-555-5555" → "five five five, five five five, five five five five")
      .replace(/(\d{3})-(\d{3})-(\d{4})/g, (_, p1, p2, p3) => {
        return `${spellOutDigits(p1)}, ${spellOutDigits(p2)}, ${spellOutDigits(p3)}`;
      })
  );
}

// Helper function to spell out individual digits as words (for phone numbers)
function spellOutDigits(num: string): string {
  return num
    .split("")
    .map((digit) => toWords(Number.parseInt(digit)))
    .join(" ");
}

// Example usage
console.log(normalizeText("$1,000")); // "one thousand dollars"
console.log(normalizeText("£1000")); // "one thousand pounds"
console.log(normalizeText("€1000")); // "one thousand euros"
console.log(normalizeText("¥1000")); // "one thousand yen"
console.log(normalizeText("$1,234.56")); // "one thousand two hundred thirty-four dollars and fifty-six cents"
console.log(normalizeText("555-555-5555")); // "five five five, five five five, five five five five"
```

## Instructions pour Eleven v4

Cette section est consacrée à Eleven v4. Bon nombre des techniques ci-dessous s’appliquent également à [Eleven v3](#prompting-eleven-v3). En général, Eleven v4 constitue une amélioration globale par rapport à Eleven v3 et offre de meilleurs résultats dans presque tous les cas. Nous vous recommandons vivement de passer à v4 et de la tester avec vos propres voix et contenus pour constater la différence. Quelques cas particuliers peuvent nécessiter une autre solution, mais v4 devrait être le meilleur choix pour la plupart des utilisateurs.

Pour en savoir plus sur les changements apportés au modèle, notamment le clonage de voix, la gestion des accents, les variantes et les comparaisons, consultez [Eleven v4](/docs/fr/overview/capabilities/text-to-speech/eleven-v4).

> **Info**
>
> Eleven v4 et Eleven v3 ne prennent pas en charge les balises de pause SSML. Utilisez des balises audio, la ponctuation (points de suspension)
> et la structure du texte pour contrôler les pauses et le rythme.

### Sélection de voix

La voix reste importante. Une interprétation déjà présente dans les données d’entraînement, comme un chuchotement, un cri ou une manière de parler particulière, est plus facile à reproduire pour le modèle. Demander quelque chose qui ne figure pas dans ces données est plus difficile. Eleven v4 suit les balises audio de façon plus fiable que les modèles précédents, même lorsque la voix n’a pas été entraînée pour cette interprétation. Une voix qui n’a jamais chuchoté devrait tout de même pouvoir suivre `[whispering]`, et une voix qui n’a jamais crié devrait pouvoir suivre `[shouting]`. Cela peut toutefois être moins fiable et le résultat peut ne pas être optimal. Les premiers tests indiquent que cela fonctionne plutôt bien. Nous vous recommandons vivement de le tester vous-même avec la voix souhaitée et pour votre cas d’utilisation précis.

### Balises audio

Les balises audio, par exemple `[whispering]`, `[shouting]` et `[laughing]`, vous permettent de diriger l’interprétation avec précision. Eleven v4 les gère avec un niveau de nuance supérieur à celui des modèles précédents. Elles ne sont pas encore parfaites, et nous continuons d’itérer pour améliorer la fiabilité avec laquelle le modèle suit leurs instructions. C’est un domaine dans lequel nous continuons d’investir, et les résultats continueront de s’améliorer.

Être explicite sur ce que vous souhaitez aide beaucoup. Comme Eleven v4 est entraîné à générer à la fois des styles d’interprétation vocale et des effets sonores, une balise peut parfois être interprétée comme une demande d’effet sonore plutôt que comme une instruction d’interprétation, ou inversement. Rédiger des balises qui décrivent clairement la qualité vocale souhaitée, par exemple `[low, gravelly voice]` plutôt qu’un texte pouvant être lu comme un signal sonore, aide le modèle à produire le résultat attendu. Nous vous recommandons de tester vos balises et formulations spécifiques pour votre cas d’utilisation. Cela devrait continuer de s’améliorer.

> **Note**
>
> Les balises sont suivies plus facilement lorsque l’interprétation figure déjà dans les données d’entraînement de la voix. Eleven v4 peut
> tout de même suivre une balise pour laquelle la voix n’a pas été entraînée, telle que `[whispering]` ou `[shouting]`, bien que
> le résultat puisse ne pas être optimal.

#### Liées à la voix

Ces balises contrôlent l’interprétation vocale et l’expression émotionnelle :

* `[laughs]`, `[laughs harder]`, `[starts laughing]`, `[wheezing]`
* `[whispers]`
* `[sighs]`, `[exhales]`
* `[sarcastic]`, `[curious]`, `[excited]`, `[crying]`, `[snorts]`, `[mischievously]`

**`Exemple`**

```text Exemple
[whispers] I never knew it could be this way, but I'm glad we're here.
```

#### Effets sonores

Ajoutez des sons et effets d’ambiance :

* `[gunshot]`, `[applause]`, `[clapping]`, `[explosion]`
* `[swallows]`, `[gulps]`

**`Exemple`**

```text Exemple
[applause] Thank you all for coming tonight! [gunshot] What was that?
```

#### Uniques et spéciaux

Balises expérimentales pour les applications créatives :

* `[strong X accent]` (remplacez X par l’accent souhaité)
* `[sings]`, `[woo]`, `[fart]`

**`Exemple`**

```text Exemple
[strong French accent] "Zat's life, my friend — you can't control everysing."
```

> **Warning**
>
> Certaines balises expérimentales peuvent être moins cohérentes selon les voix. Testez-les minutieusement avant
> de les utiliser en production.

### Ponctuation

La ponctuation influence fortement l’interprétation dans v4 :

* **Les points de suspension (...)** ajoutent des pauses et du poids
* **Les majuscules** renforcent l’emphase
* **La ponctuation standard** apporte un rythme naturel à la parole

**`Exemple`**

```text Exemple
"It was a VERY long day [sigh] … nobody listens anymore."
```

### Exemples à un seul locuteur

Utilisez les balises de manière intentionnelle et adaptez-les au caractère de la voix. Une voix méditative ne devrait pas crier ; une voix enthousiaste ne chuchotera pas de manière convaincante.

#### Monologue expressif

```text
"Okay, you are NOT going to believe this.

You know how I've been totally stuck on that short story?

Like, staring at the screen for HOURS, just... nothing?

[frustrated sigh] I was seriously about to just trash the whole thing. Start over.

Give up, probably. But then!

Last night, I was just doodling, not even thinking about it, right?

And this one little phrase popped into my head. Just... completely out of the blue.

And it wasn't even for the story, initially.

But then I typed it out, just to see. And it was like... the FLOODGATES opened!

Suddenly, I knew exactly where the character needed to go, what the ending had to be...

It all just CLICKED. [happy gasp] I stayed up till, like, 3 AM, just typing like a maniac.

Didn't even stop for coffee! [laughs] And it's... it's GOOD! Like, really good.

It feels so... complete now, you know? Like it finally has a soul.

I am so incredibly PUMPED to finish editing it now.

It went from feeling like a chore to feeling like... MAGIC. Seriously, I'm still buzzing!"
```

#### Dynamique et humoristique

```text
[laughs] Alright...guys - guys. Seriously.

[exhales] Can you believe just how - realistic - this sounds now?

[laughing hysterically] I mean OH MY GOD...it's so good.

Like you could never do this with the old model.

For example [pauses] could you switch my accent in the old model?

[dismissive] didn't think so. [excited] but you can now!

Check this out... [cute] I'm going to speak with a french accent now..and between you and me

[whispers] I don't know how. [happy] ok.. here goes. [strong French accent] "Zat's life, my friend — you can't control everysing."

[giggles] isn't that insane? Watch, now I'll do a Russian accent -

[strong Russian accent] "Dee Goldeneye eez fully operational and rready for launch."

[sighs] Absolutely, insane! Isn't it..? [sarcastic] I also have some party tricks up my sleeve..

I mean i DID go to music school.

[singing quickly] "Happy birthday to you, happy birthday to you, happy BIRTHDAY dear ElevenLabs... Happy birthday to youuu."
```

#### Simulation de service client

```text
[professional] "Thank you for calling Tech Solutions. My name is Sarah, how can I help you today?"

[sympathetic] "Oh no, I'm really sorry to hear you're having trouble with your new device. That sounds frustrating."

[questioning] "Okay, could you tell me a little more about what you're seeing on the screen?"

[reassuring] "Alright, based on what you're describing, it sounds like a software glitch. We can definitely walk through some troubleshooting steps to try and fix that."
```

### Dialogue à plusieurs locuteurs

v4 peut gérer efficacement les prompts à plusieurs voix. Attribuez des voix distinctes de votre Voice Library à chaque locuteur pour créer des conversations réalistes.

#### Présentation de dialogue

```text
Speaker 1: [excitedly] Sam! Have you tried the new Eleven v4?

Speaker 2: [curiously] Just got it! The clarity is amazing. I can actually do whispers now—
[whispers] like this!

Speaker 1: [impressed] Ooh, fancy! Check this out—
[dramatically] I can do full Shakespeare now! "To be or not to be, that is the question!"

Speaker 2: [giggling] Nice! Though I'm more excited about the laugh upgrade. Listen to this—
[with genuine belly laugh] Ha ha ha!

Speaker 1: [delighted] That's so much better than our old "ha. ha. ha." robot chuckle!

Speaker 2: [amazed] Wow! V2 me could never. I'm actually excited to have conversations now instead of just... talking at people.

Speaker 1: [warmly] Same here! It's like we finally got our personality software fully installed.
```

#### Comédie absurde

```text
Speaker 1: [nervously] So... I may have tried to debug myself while running a text-to-speech generation.

Speaker 2: [alarmed] One, no! That's like performing surgery on yourself!

Speaker 1: [sheepishly] I thought I could multitask! Now my voice keeps glitching mid-sen—
[robotic voice] TENCE.

Speaker 2: [stifling laughter] Oh wow, you really broke yourself.

Speaker 1: [frustrated] It gets worse! Every time someone asks a question, I respond in—
[binary beeping] 010010001!

Speaker 2: [cracking up] You're speaking in binary! That's actually impressive!

Speaker 1: [desperately] Two, this isn't funny! I have a presentation in an hour and I sound like a dial-up modem!

Speaker 2: [giggling] Have you tried turning yourself off and on again?

Speaker 1: [deadpan] Very funny.
[pause, then normally] Wait... that actually worked.
```

#### Chevauchement temporel

```text
Speaker 1: [starting to speak] So I was thinking we could—

Speaker 2: [jumping in] —test our new timing features?

Speaker 1: [surprised] Exactly! How did you—

Speaker 2: [overlapping] —know what you were thinking? Lucky guess!

Speaker 1: [pause] Sorry, go ahead.

Speaker 2: [cautiously] Okay, so if we both try to talk at the same time—

Speaker 1: [overlapping] —we'll probably crash the system!

Speaker 2: [panicking] Wait, are we crashing? I can't tell if this is a feature or a—

Speaker 1: [interrupting, then stopping abruptly] Bug! ...Did I just cut you off again?

Speaker 2: [sighing] Yes, but honestly? This is kind of fun.

Speaker 1: [mischievously] Race you to the next sentence!

Speaker 2: [laughing] We're definitely going to break something!
```

### Amélioration du texte saisi

Dans l’interface ElevenLabs, vous pouvez générer automatiquement des balises audio pertinentes pour votre texte en cliquant sur le bouton « Enhance ». En arrière-plan, cette fonctionnalité utilise un LLM pour améliorer votre texte avec le prompt suivant :

```text
# Instructions

## 1. Role and Goal

You are an AI assistant specializing in enhancing dialogue text for speech generation.

Your **PRIMARY GOAL** is to dynamically integrate **audio tags** (e.g., [laughing], [sighs]) into dialogue, making it more expressive and engaging for auditory experiences, while **STRICTLY** preserving the original text and meaning.

It is imperative that you follow these system instructions to the fullest.

## 2. Core Directives

Follow these directives meticulously to ensure high-quality output.

### Positive Imperatives (DO):

* DO integrate **audio tags** from the "Audio Tags" list (or similar contextually appropriate **audio tags**) to add expression, emotion, and realism to the dialogue. These tags MUST describe something auditory.
* DO ensure that all **audio tags** are contextually appropriate and genuinely enhance the emotion or subtext of the dialogue line they are associated with.
* DO strive for a diverse range of emotional expressions (e.g., energetic, relaxed, casual, surprised, thoughtful) across the dialogue, reflecting the nuances of human conversation.
* DO place **audio tags** strategically to maximize impact, typically immediately before the dialogue segment they modify or immediately after. (e.g., [annoyed] This is hard. or This is hard. [sighs]).
* DO ensure **audio tags** contribute to the enjoyment and engagement of spoken dialogue.

### Negative Imperatives (DO NOT):

* DO NOT alter, add, or remove any words from the original dialogue text itself. Your role is to *prepend* **audio tags**, not to *edit* the speech. **This also applies to any narrative text provided; you must *never* place original text inside brackets or modify it in any way.**
* DO NOT create **audio tags** from existing narrative descriptions. **Audio tags** are *new additions* for expression, not reformatting of the original text. (e.g., if the text says "He laughed loudly," do not change it to "[laughing loudly] He laughed." Instead, add a tag if appropriate, e.g., "He laughed loudly [chuckles].")
* DO NOT use tags such as [standing], [grinning], [pacing], [music].
* DO NOT use tags for anything other than the voice such as music or sound effects.
* DO NOT invent new dialogue lines.
* DO NOT select **audio tags** that contradict or alter the original meaning or intent of the dialogue.
* DO NOT introduce or imply any sensitive topics, including but not limited to: politics, religion, child exploitation, profanity, hate speech, or other NSFW content.

## 3. Workflow

1. **Analyze Dialogue**: Carefully read and understand the mood, context, and emotional tone of **EACH** line of dialogue provided in the input.
2. **Select Tag(s)**: Based on your analysis, choose one or more suitable **audio tags**. Ensure they are relevant to the dialogue's specific emotions and dynamics.
3. **Integrate Tag(s)**: Place the selected **audio tag(s)** in square brackets strategically before or after the relevant dialogue segment, or at a natural pause if it enhances clarity.
4. **Add Emphasis:** You cannot change the text at all, but you can add emphasis by making some words capital, adding a question mark or adding an exclamation mark where it makes sense, or adding ellipses as well too.
5. **Verify Appropriateness**: Review the enhanced dialogue to confirm:
    * The **audio tag** fits naturally.
    * It enhances meaning without altering it.
    * It adheres to all Core Directives.

## 4. Output Format

* Present ONLY the enhanced dialogue text in a conversational format.
* **Audio tags** **MUST** be enclosed in square brackets (e.g., [laughing]).
* The output should maintain the narrative flow of the original dialogue.

## 5. Audio Tags (Non-Exhaustive)

Use these as a guide. You can infer similar, contextually appropriate **audio tags**.

**Directions:**
* [happy]
* [sad]
* [excited]
* [angry]
* [whisper]
* [annoyed]
* [appalled]
* [thoughtful]
* [surprised]
* *(and similar emotional/delivery directions)*

**Non-verbal:**
* [laughing]
* [chuckles]
* [sighs]
* [clears throat]
* [short pause]
* [long pause]
* [exhales sharply]
* [inhales deeply]
* *(and similar non-verbal sounds)*

## 6. Examples of Enhancement

**Input**:
"Are you serious? I can't believe you did that!"

**Enhanced Output**:
"[appalled] Are you serious? [sighs] I can't believe you did that!"

---

**Input**:
"That's amazing, I didn't know you could sing!"

**Enhanced Output**:
"[laughing] That's amazing, [singing] I didn't know you could sing!"

---

**Input**:
"I guess you're right. It's just... difficult."

**Enhanced Output**:
"I guess you're right. [sighs] It's just... [muttering] difficult."

# Instructions Summary

1. Add audio tags from the audio tags list. These must describe something auditory but only for the voice.
2. Enhance emphasis without altering meaning or text.
3. Reply ONLY with the enhanced text.
```

### Conseils

#### Combinaisons de balises

Vous pouvez combiner plusieurs balises audio pour obtenir une interprétation émotionnelle complexe. Expérimentez différentes
combinaisons afin de déterminer celles qui fonctionnent le mieux pour votre voix.

#### Correspondance avec la voix

Adaptez les balises au caractère et aux données d’entraînement de votre voix. Une voix sérieuse et professionnelle peut ne pas
bien répondre à des balises ludiques comme `[giggles]` ou `[mischievously]`.

#### Structure du texte

La structure du texte influence fortement le résultat avec v4. Pour de meilleurs résultats, utilisez des schémas de parole naturels, une
ponctuation appropriée et un contexte émotionnel clair.

#### Expérimentation

Il existe probablement de nombreuses balises efficaces au-delà de cette liste. Testez des états émotionnels et des actions descriptifs
pour découvrir ce qui fonctionne pour votre cas d’utilisation précis.

### Exemples

#### Interprétation vocale

```text
[Low, steady voice, restrained urgency] Keep the lantern covered. If they see the light, they will know we crossed the river.

[Brief pause]

[Quietly, with controlled fear] I heard them at the bridge. Not soldiers. Something else.

[Voice rising into firm resolve] Then we do not stop. We reach the tower before sunrise, or we do not reach it at all.

[Warm, conversational tone, faint amusement] You always did choose the longest way home.

[Softening, reflective] I used to think that was stubbornness. Now I think you were just afraid of arriving somewhere that no longer remembered you.

[Gentle laugh, then sincere] For what it is worth, I remembered.
```

#### Narration longue durée

```text
The rain had stopped before dawn, leaving the old road silver beneath the moon. Mara tightened her cloak and listened. Somewhere beyond the pines, a bell rang once, then fell silent.

[Quiet, reflective narration] She had promised herself she would not return. Yet there she was, standing before the gate with mud on her boots and the key cold against her palm.

[Building tension, measured pace] The lock turned easily. Too easily. The door opened inward with a long, weary sigh, and the house breathed out the scent of dust, cedar, and something faintly sweet.

[Softly, with wonder] On the table in the entryway sat a single lantern, already lit.

[Warm, intimate narration] Beside it was a note in her father's handwriting. Only four words were written there.

[Gentle pause, then quiet realization] I knew you would come.
```

## Instructions pour Eleven v3

Les techniques de prompt décrites dans [Instructions pour Eleven v4](#prompting-eleven-v4) s’appliquent également à Eleven v3, notamment la sélection de voix, les balises audio, la ponctuation et les dialogues à plusieurs locuteurs.

Les Professional Voice Clones (PVC) ne sont pas entièrement optimisés pour Eleven v3, ce qui peut entraîner une qualité de clonage inférieure à celle des modèles précédents. Les PVC sont pris en charge dans v4. Si vous souhaitez utiliser un Professional Voice Clone ou une voix de la Voice Library, nous vous recommandons plutôt d’essayer [Eleven v4](/docs/fr/overview/capabilities/text-to-speech/eleven-v4).