> 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.

# Best practices

Deze gids biedt technieken om text-to-speechuitvoer met ElevenLabs-modellen te verbeteren. Experimenteer met deze methoden om te ontdekken wat het beste werkt voor jouw behoeften.

## Bediening

> **Info**
>
> We werken actief aan *Director's Mode* om je nog meer controle over de output te geven.

Deze technieken bieden een praktische manier om genuanceerde resultaten te bereiken totdat geavanceerde functies zoals *Director's Mode* worden uitgerold.

### Pauzes

> **Info**
>
> Eleven v4 en Eleven v3 ondersteunen geen SSML-breaktags. Gebruik de technieken die worden beschreven in de
> sectie [Eleven v4 prompten](#prompting-eleven-v4) om pauzes te regelen.

Gebruik `<break time="x.xs" />` voor natuurlijke pauzes van maximaal 3 seconden.

> **Note**
>
> Te veel breaktags in één generatie gebruiken kan instabiliteit veroorzaken. De AI kan sneller gaan spreken of
> extra ruis of audioartefacten toevoegen. We werken eraan om dit op te lossen.

**`Voorbeeld`**

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

* **Consistentie:** Gebruik `<break>`-tags consequent om een natuurlijke spraakstroom te behouden. Overmatig gebruik kan tot instabiliteit leiden.
* **Stemspecifiek gedrag:** Verschillende stemmen kunnen pauzes anders verwerken, vooral stemmen die zijn getraind met opvulgeluiden zoals "uh" of "ah".

Alternatieven voor `<break>` zijn streepjes (- of --) voor korte pauzes of beletseltekens (...) voor aarzelende tonen. Deze zijn echter minder consistent.

**`Voorbeeld`**

```text Voorbeeld

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

```

### Uitspraak

#### IPA met Eleven v4

[Eleven v4](/docs/nl/overview/capabilities/text-to-speech/eleven-v4) (`eleven_v4`) bevat verbeterde ingebouwde ondersteuning voor het International Phonetic Alphabet, oftewel IPA, waarmee je de uitspraak van namen, technische termen en andere woorden die speciale behandeling nodig hebben nauwkeuriger kunt regelen. De IPA-uitspraak is consistenter dan in eerdere modellen, maar de resultaten kunnen nog steeds per stem en frase verschillen. We raden aan belangrijke uitspraken met je gekozen stem te testen voordat je erop vertrouwt in productie.

In tegenstelling tot oudere modellen die foneme-tags in XML-stijl vereisen, begrijpt Eleven v4 IPA-symbolen wanneer je ze tussen schuine strepen in je tekst plaatst:

**`Syntaxis`**

```text Syntaxis
"/IPA_transcription/"
```

De IPA-transcriptie moet:

* Aan het begin en einde tussen schuine strepen (`/`) staan
* Met standaard-IPA-symbolen worden geschreven
* Tussen dubbele aanhalingstekens staan wanneer deze als stringparameter wordt doorgegeven

**Codevoorbeelden**

**`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"
  }'
```

Je kunt meerdere IPA-transcripties in één tekststring opnemen:

**`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",
});
```

**Aanbevolen werkwijzen**

* Gebruik standaard-IPA-symbolen uit de [tabel van het International Phonetic Alphabet](https://en.wikipedia.org/wiki/International_Phonetic_Alphabet)
* Neem klemtoonmarkeringen op: primaire klemtoon (ˈ) en secundaire klemtoon (ˌ) voor woorden met meerdere lettergrepen
* Pas dit selectief toe: plaats alleen specifieke woorden of zinnen die uitspraakcontrole nodig hebben tussen schuine strepen
* Test met je stem: verschillende stemmen kunnen IPA iets anders interpreteren

**Problemen oplossen**

#### De uitspraak is nog steeds onjuist

Controleer met een IPA-woordenboek of je IPA-transcriptie correct is. Gebruik klemtoonmarkeringen (ˈ voor
primaire klemtoon, ˌ voor secundaire klemtoon) voor woorden met meerdere lettergrepen. Test met verschillende stemmen, omdat
sommige IPA nauwkeuriger kunnen interpreteren dan andere.

#### Inconsistente resultaten met dezelfde IPA

De IPA-uitspraak is consistenter dan in eerdere modellen, maar de resultaten kunnen nog steeds per
stem en frase verschillen. We raden aan belangrijke uitspraken met je gekozen stem te testen voordat je
erop vertrouwt in productie. Als je een consistent resultaat nodig hebt, genereer dan meerdere keren en
selecteer het beste resultaat.

#### Foneme-tags voor v2-modellen

Geef de uitspraak op met [SSML-foneme-tags](https://en.wikipedia.org/wiki/Speech_Synthesis_Markup_Language) in v2-modellen. Ondersteunde alfabetten zijn onder meer [CMU](https://en.wikipedia.org/wiki/CMU_Pronouncing_Dictionary) Arpabet en het [International Phonetic Alphabet (IPA)](https://en.wikipedia.org/wiki/International_Phonetic_Alphabet).

> **Note**
>
> Foneme-tags zijn alleen compatibel met het `eleven_flash_v2`-[model](/docs/nl/overview/models).

**`CMU Arpabet-voorbeeld`**

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

**`IPA-voorbeeld`**

```xml IPA-voorbeeld
<phoneme alphabet="ipa" ph="ˈæktʃuəli">
  actually
</phoneme>
```

We raden aan CMU Arpabet te gebruiken voor consistente en voorspelbare resultaten met v2-modellen. Hoewel IPA effectief kan zijn, biedt CMU Arpabet over het algemeen betrouwbaardere prestaties.

Foneme-tags werken alleen voor afzonderlijke woorden. Als je een naam met een voor- en achternaam hebt die je op een bepaalde manier wilt laten uitspreken, moet je voor elk woord een foneme-tag maken.

Zorg voor een correcte klemtoonmarkering bij woorden met meerdere lettergrepen om een nauwkeurige uitspraak te behouden:

**`Correct gebruik`**

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

**`Onjuist gebruik`**

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

#### Alias-tags

Voor modellen die geen foneme-tags ondersteunen, kun je woorden fonetischer proberen te schrijven. Je kunt ook verschillende trucs gebruiken, zoals hoofdletters, streepjes, apostrofs of zelfs enkele aanhalingstekens rond een letter of letters.

Een woord als "trapezii" kun je bijvoorbeeld schrijven als "trapezIi" om de "ii" in het woord meer nadruk te geven.

Je kunt het woord rechtstreeks in je tekst vervangen. Als je bij het gebruik van een uitspraakwoordenboek de uitspraak met andere woorden of zinnen wilt opgeven, kun je hiervoor alias-tags gebruiken. Dit kan nuttig zijn wanneer je genereert met Multilingual v2, dat geen foneme-tags ondersteunt. Je kunt uitspraakwoordenboeken gebruiken met ElevenCreative Studio, Dubbing Studio en Speech Synthesis via de API.

Als je tekst bijvoorbeeld een naam bevat met een ongebruikelijke uitspraak waar de AI moeite mee kan hebben, kun je een alias-tag gebruiken om op te geven hoe je wilt dat deze wordt uitgesproken:

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

Als je zeker wilt weten dat een acroniem altijd op een bepaalde manier wordt uitgesproken wanneer het in je tekst voorkomt, kun je dit met een alias-tag opgeven:

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

#### Uitspraakwoordenboeken

Met sommige van onze tools, zoals ElevenCreative Studio en Dubbing Studio, kun je een uitspraakwoordenboek maken en uploaden. Hiermee kun je de uitspraak van bepaalde woorden, zoals namen van personages of merken, opgeven, of aangeven hoe acroniemen moeten worden uitgesproken.

Uitspraakwoordenboeken bieden deze functionaliteit doordat je een lexicon- of woordenboekbestand kunt uploaden waarin paren van woorden en hun uitspraak zijn opgegeven, met een fonetisch alfabet of woordvervangingen.

Wanneer een van deze woorden in een project wordt aangetroffen, spreekt het AI-model het woord uit met de opgegeven vervanging.

Als je een uitspraakwoordenboekbestand wilt toevoegen, open je de instellingen van een project en upload je een bestand in TXT of [PLS-indeling](https://www.w3.org/TR/pronunciation-lexicon/). Wanneer een woordenboek aan een project wordt toegevoegd, wordt automatisch opnieuw berekend welke delen van het project met het nieuwe woordenboekbestand opnieuw moeten worden geconverteerd. Deze worden vervolgens gemarkeerd als niet geconverteerd.

Momenteel ondersteunen we alleen uitspraakwoordenboeken die vervangingen opgeven met foneme- of alias-tags.

Zowel fonemen als aliassen zijn reeksen regels die opgeven naar welk woord of welke zin ze zoeken, een grafeem genoemd, en waarmee dit wordt vervangen. Let op: zoekopdrachten zijn hoofdlettergevoelig. Bij het controleren op een vervangend woord in een uitspraakwoordenboek wordt het woordenboek van begin tot eind doorlopen en alleen de allereerste vervanging gebruikt.

#### Voorbeelden van uitspraakwoordenboeken

Hier zijn voorbeelden van uitspraakwoordenboeken in zowel CMU Arpabet als IPA, met een foneem om de uitspraak van "Apple" op te geven en een alias om "UN" te vervangen door "United Nations":

**`CMU Arpabet-voorbeeld`**

```xml CMU Arpabet-voorbeeld
<?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>
```

**`IPA-voorbeeld`**

```xml IPA-voorbeeld
<?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>
```

Er zijn enkele open-sourcetools beschikbaar om een `.pls`-bestand voor een uitspraakwoordenboek te genereren:

* [Sequitur G2P](https://github.com/sequitur-g2p/sequitur-g2p) - Open-sourcetool die uitspraakregels leert uit data en fonetische transcripties kan genereren.
* [Phonetisaurus](https://github.com/AdolfVonKleist/Phonetisaurus) - Open-source G2P-systeem dat is getraind op bestaande woordenboeken zoals CMUdict.
* [eSpeak](https://github.com/espeak-ng/espeak-ng) - Spraaksynthesizer die fonemische transcripties uit tekst kan genereren.
* [CMU Pronouncing Dictionary](https://github.com/cmusphinx/cmudict) - Een kant-en-klaar Engels woordenboek met fonetische transcripties.

### Emotie

Breng emoties over via narratieve context of expliciete dialoogtags. Deze aanpak helpt de AI de toon en emotie te begrijpen die moeten worden nagebootst.

**`Voorbeeld`**

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

Expliciete dialoogtags leveren voorspelbaardere resultaten op dan uitsluitend op context vertrouwen. Het model spreekt de aanwijzingen voor de emotionele voordracht echter nog steeds uit. Je kunt deze indien gewenst in de postproductie met een audio-editor verwijderen.

### Tempo

Het tempo van de audio wordt sterk beïnvloed door de audio die is gebruikt om de stem te maken. Wanneer je je stem maakt, raden we aan langere, doorlopende samples te gebruiken om tempoproblemen zoals onnatuurlijk snelle spraak te voorkomen.

Om de snelheid van de gegenereerde audio te regelen, kun je de snelheidsinstelling gebruiken. Hiermee kun je de snelheid van de gegenereerde spraak verhogen of verlagen. De snelheidsinstelling is beschikbaar in Text to Speech via de website en API, en in ElevenCreative Studio en Agents Platform. Je vindt deze in de steminstellingen.

De standaardwaarde is 1.0, wat betekent dat de snelheid niet wordt aangepast. Waarden onder 1.0 vertragen de stem, tot minimaal 0.7. Waarden boven 1.0 versnellen de stem, tot maximaal 1.2. Extreme waarden kunnen de kwaliteit van de gegenereerde spraak beïnvloeden.

Je kunt het tempo ook regelen door in een natuurlijke, narratieve stijl te schrijven.

**`Voorbeeld`**

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

### Tips

#### Veelvoorkomende problemen

* Inconsistente pauzes: zorg dat de syntaxis `<break time="x.xs" />` voor
  pauzes wordt gebruikt.
* Uitspraakfouten: gebruik CMU Arpabet- of IPA-foneme-tags voor een nauwkeurige uitspraak.
* Niet-passende emotie: voeg narratieve context of expliciete tags toe om de emotie te sturen.
  **Vergeet niet alle tekst met emotionele aanwijzingen in de postproductie te verwijderen.**

#### Tips om de output te verbeteren

Experimenteer met alternatieve formuleringen om het gewenste tempo of de gewenste emotie te bereiken. Deel prompts voor complexe
geluidseffecten op in kleinere, opeenvolgende elementen en combineer de resultaten handmatig.

### Creatieve controle

Hoewel we actief werken aan een "Director's Mode" om gebruikers nog meer controle over de output te geven, volgen hier enkele tijdelijke technieken om creativiteit en precisie te maximaliseren:

### Narratieve stijl

Schrijf prompts in een narratieve stijl, vergelijkbaar met scriptschrijven, om toon en tempo effectief te sturen.

### Gelaagde output

Genereer geluidseffecten of spraak in segmenten en voeg deze met audiobewerkingssoftware samen voor complexere composities.

### Fonetisch experimenteren

Als de uitspraak niet perfect is, experimenteer dan met alternatieve spellingen of fonetische benaderingen om de gewenste resultaten te bereiken.

### Handmatige aanpassingen

Combineer afzonderlijke geluidseffecten handmatig in de postproductie voor sequenties die nauwkeurige timing vereisen.

### Feedback herhalen

Herhaal resultaten door beschrijvingen, tags of emotionele aanwijzingen aan te passen.

## Tekstnormalisatie

Wanneer je Text to Speech gebruikt met complexe elementen zoals telefoonnummers, postcodes en e-mails, kunnen deze verkeerd worden uitgesproken. Dit komt vaak doordat de specifieke elementen niet in de trainingsset staan en kleinere modellen niet goed kunnen generaliseren hoe ze moeten worden uitgesproken. Deze handleiding verduidelijkt wanneer deze verschillen optreden en hoe je ze correct laat uitspreken.

> **Tip**
>
> Normalisatie is standaard ingeschakeld voor alle TTS-modellen om de uitspraak van cijfers,
> datums en andere complexe tekstelementen te verbeteren.

### Waarom lezen modellen invoer anders voor?

Bepaalde modellen zijn getraind om cijfers en zinnen op een menselijkere manier voor te lezen. Zo wordt de zin "\$1,000,000" door het model Eleven Multilingual v2 correct voorgelezen als "one million dollars". Dezelfde zin wordt door het model Eleven Flash v2.5 echter voorgelezen als "one thousand thousand dollars".

De reden hiervoor is dat het model Multilingual v2 groter is en het voorlezen van cijfers beter kan generaliseren op een manier die natuurlijker is voor menselijke luisteraars, terwijl het model Flash v2.5 veel kleiner is en dat daarom niet kan.

#### Veelvoorkomende voorbeelden

Text to Speech-modellen kunnen moeite hebben met het volgende:

* Telefoonnummers ("123-456-7890")
* Valuta ("\$47,345.67")
* Agenda-afspraken ("2024-01-01")
* Tijd ("9:23 AM")
* Adressen ("123 Main St, Anytown, USA")
* URL's ("example.com/link/to/resource")
* Afkortingen voor eenheden ("TB" in plaats van "Terabyte")
* Sneltoetsen ("Ctrl + Z")

### Beperken

#### Gebruik getrainde modellen

De eenvoudigste manier om dit te beperken is een TTS-model te gebruiken dat is getraind om cijfers en zinnen op een menselijkere manier voor te lezen, zoals het model Eleven Multilingual v2. Dit is echter niet altijd mogelijk, bijvoorbeeld als je een use case hebt waarbij lage latentie essentieel is (zoals conversationele agents).

#### Pas normalisatie toe in LLM-prompts

Wanneer je een LLM gebruikt om de tekst voor TTS te genereren, kun je normalisatie-instructies aan de prompt toevoegen.

#### Gebruik duidelijke en expliciete prompts

LLM's reageren het best op gestructureerde en expliciete instructies. Je prompt moet duidelijk aangeven dat je tekst wilt laten omzetten naar een leesbare indeling voor spraak.

#### Verwerk verschillende getalnotaties

Niet alle getallen worden op dezelfde manier voorgelezen. Overweeg hoe verschillende typen getallen moeten worden uitgesproken:

* Hoofdtelwoorden: 123 → "one hundred twenty-three"
* Rangtelwoorden: 2nd → "second"
* Geldbedragen: \$45.67 → "forty-five dollars and sixty-seven cents"
* Telefoonnummers: "123-456-7890" → "one two three, four five six, seven eight nine zero"
* Decimalen en breuken: "3.5" → "three point five", "⅔" → "two-thirds"
* Romeinse cijfers: "XIV" → "fourteen" (of "the fourteenth" als het een titel is)

#### Verwijder of schrijf afkortingen voluit

Veelvoorkomende afkortingen moeten voor duidelijkheid worden uitgeschreven:

* "Dr." → "Doctor"
* "Ave." → "Avenue"
* "St." → "Street" (maar "St. Patrick" moet behouden blijven)

Je kunt in je prompt expliciet vragen om uit te schrijven:

> Expand all abbreviations to their full spoken forms.

#### Alfanumerieke normalisatie

Niet alle normalisatie gaat over cijfers; bepaalde alfanumerieke zinnen moeten ook voor de duidelijkheid worden genormaliseerd:

* Sneltoetsen: "Ctrl + Z" → "control z"
* Afkortingen voor eenheden: "100km" → "one hundred kilometers"
* Symbolen: "100%" → "one hundred percent"
* URL's: "elevenlabs.io/docs" → "eleven labs dot io slash docs"
* Agenda-afspraken: "2024-01-01" → "January first, two-thousand twenty-four"

#### Houd rekening met randgevallen

Verschillende contexten kunnen verschillende omzettingen vereisen:

* Datums: "01/02/2023" → "January second, twenty twenty-three" of "the first of February, twenty twenty-three" (afhankelijk van de landinstelling)
* Tijd: "14:30" → "two thirty PM"

Als je een specifiek formaat nodig hebt, vermeld dit dan expliciet in de prompt.

##### Alles samenvoegen

Deze prompt is een goed startpunt voor de meeste use cases:

```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
```

#### Gebruik reguliere expressies voor preprocessing

Als je code gebruikt om een LLM te prompten, kun je reguliere expressies gebruiken om de tekst te normaliseren voordat je deze aan het model geeft. Dit is een geavanceerdere techniek en vereist enige kennis van reguliere expressies. Hier zijn enkele eenvoudige voorbeelden:

**`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"
```

## Prompts voor Eleven v4

Dit gedeelte is geschreven voor Eleven v4. Veel van de onderstaande technieken zijn ook van toepassing op [Eleven v3](#prompting-eleven-v3). Over het algemeen is Eleven v4 een duidelijke verbetering ten opzichte van Eleven v3 en levert het in bijna alle gevallen betere resultaten. We raden sterk aan om over te stappen op v4 en het met je eigen stemmen en content te testen, zodat je zelf het verschil kunt ervaren. Hoewel sommige uitzonderlijke gevallen om een andere keuze kunnen vragen, zullen de meeste gebruikers v4 de betere keuze vinden.

Zie [Eleven v4](/docs/nl/overview/capabilities/text-to-speech/eleven-v4) voor de veranderingen in het model — stemklonen, accentverwerking, varianten en vergelijkingen.

> **Info**
>
> Eleven v4 en Eleven v3 ondersteunen geen SSML-breaktags. Gebruik audiotags, interpunctie (weglatingstekens)
> en tekststructuur om pauzes en tempo te regelen.

### Stemselectie

De stem blijft belangrijk. Een voordracht die al in de trainingsdata aanwezig is — fluisteren, schreeuwen, een bepaalde voordracht — is voor het model makkelijker te reproduceren. Iets vragen dat buiten die data valt, is moeilijker. Eleven v4 volgt audiotags betrouwbaarder dan eerdere modellen, ook wanneer de stem niet op die voordracht is getraind. Een stem die nooit heeft gefluisterd, zou `[whispering]` nog steeds moeten kunnen volgen, en een stem die nooit heeft geschreeuwd, zou `[shouting]` nog steeds moeten kunnen volgen. Dit kan echter minder betrouwbaar zijn en het resultaat is mogelijk niet optimaal. Uit vroege tests blijkt dat het behoorlijk goed werkt. We raden sterk aan om dit zelf te testen met de stem die je wilt gebruiken en voor je specifieke toepassing.

### Audiotags

Met audiotags (bijv. `[whispering]`, `[shouting]`, `[laughing]`) kun je de voordracht nauwkeurig aansturen, en Eleven v4 verwerkt ze met meer nuance dan eerdere modellen. Ze zijn nog niet perfect en we blijven verbeteren hoe betrouwbaar het model taginstructies volgt — dit is een gebied waarin we actief blijven investeren en het zal steeds beter worden.

Duidelijk aangeven wat je wilt, helpt enorm. Omdat Eleven v4 is getraind om zowel vocale voordrachtstijlen als geluidseffecten te genereren, kan een tag soms worden geïnterpreteerd als een verzoek om een geluidseffect in plaats van een voordrachtsinstructie (of andersom). Tags schrijven die de gewenste stemkwaliteit duidelijk beschrijven (bijv. `[low, gravelly voice]` in plaats van iets dat als geluidssignaal kan worden gelezen) helpt het model te leveren wat je bedoelde. We raden aan om je specifieke tags en formuleringen voor je toepassing te testen; dit zal naar verwachting blijven verbeteren.

> **Note**
>
> Tags werken beter wanneer de voordracht al in de trainingsdata van de stem aanwezig is. Eleven v4 kan
> nog steeds een tag volgen waarop de stem niet is getraind, zoals `[whispering]` of `[shouting]`, al
> is het resultaat mogelijk niet optimaal.

#### Stemgerelateerd

Deze tags regelen de vocale voordracht en emotionele expressie:

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

**`Voorbeeld`**

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

#### Geluidseffecten

Voeg omgevingsgeluiden en effecten toe:

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

**`Voorbeeld`**

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

#### Uniek en speciaal

Experimentele tags voor creatieve toepassingen:

* `[strong X accent]` (vervang X door het gewenste accent)
* `[sings]`, `[woo]`, `[fart]`

**`Voorbeeld`**

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

> **Warning**
>
> Sommige experimentele tags kunnen minder consistent werken voor verschillende stemmen. Test grondig vóór
> gebruik in productie.

### Interpunctie

Interpunctie heeft in v4 grote invloed op de voordracht:

* **Weglatingstekens (...)** voegen pauzes en nadruk toe
* **Hoofdletters** versterken de nadruk
* **Standaardinterpunctie** zorgt voor een natuurlijk spraakritme

**`Voorbeeld`**

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

### Voorbeelden met één spreker

Gebruik tags bewust en laat ze passen bij het karakter van de stem. Een meditatieve stem hoort niet te schreeuwen; een enthousiaste stem fluistert niet overtuigend.

#### Expressieve monoloog

```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!"
```

#### Dynamisch en humoristisch

```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."
```

#### Simulatie van klantenservice

```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."
```

### Dialoog met meerdere sprekers

v4 kan prompts met meerdere stemmen effectief verwerken. Wijs elke spreker een afzonderlijke stem uit je Voice Library toe om realistische gesprekken te creëren.

#### Dialoogdemonstratie

```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.
```

#### Glitchkomedie

```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.
```

#### Overlappende timing

```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!
```

### Invoer verbeteren

In de ElevenLabs-UI kun je automatisch relevante audiotags voor je invoertekst genereren door op de knop "Enhance" te klikken. Achter de schermen wordt hiervoor een LLM gebruikt om je invoertekst met de volgende prompt te verbeteren:

```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.
```

### Tips

#### Tagcombinaties

Je kunt meerdere audiotags combineren voor complexe emotionele voordracht. Experimenteer met verschillende
combinaties om te ontdekken wat het beste werkt voor je stem.

#### Stemmatching

Laat tags aansluiten op het karakter en de trainingsdata van je stem. Een serieuze, professionele stem reageert mogelijk niet
goed op speelse tags zoals `[giggles]` of `[mischievously]`.

#### Tekststructuur

Tekststructuur heeft grote invloed op de output van v4. Gebruik natuurlijke spreekpatronen, correcte
interpunctie en een duidelijke emotionele context voor de beste resultaten.

#### Experimenteren

Er zijn waarschijnlijk veel meer effectieve tags dan in deze lijst. Experimenteer met beschrijvende
emotionele toestanden en handelingen om te ontdekken wat werkt voor je specifieke toepassing.

### Voorbeelden

#### Stemacteren

```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.
```

#### Langdurige vertelling

```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.
```

## Prompts voor Eleven v3

De prompttechnieken in [Prompts voor Eleven v4](#prompting-eleven-v4) zijn ook van toepassing op Eleven v3, waaronder stemselectie, audiotags, interpunctie en dialoog met meerdere sprekers.

Professional Voice Clones (PVC's) zijn niet volledig geoptimaliseerd voor Eleven v3, waardoor de kloonkwaliteit mogelijk lager is dan bij eerdere modellen. PVC's worden ondersteund in v4. Als je een Professional Voice Clone of een stem uit de Voice Library wilt gebruiken, raden we aan om in plaats daarvan [Eleven v4](/docs/nl/overview/capabilities/text-to-speech/eleven-v4) te proberen.