---
title: "Transcription et synthèse vocale"
description: "Transcrire un enregistrement, faire lire un texte, et ce que coûte chaque minute."
url: https://meridal.fr/apprendre/transcription-et-synthese-vocale/
language: fr
written: 2026-10-09
verified: 2026-10-09
license: CC BY 4.0
---

[Apprendre](https://meridal.fr/apprendre/) › [Construction et programmation](https://meridal.fr/apprendre/dossier/construire/)

S'exercer · Niveau 3, Construire · 30 minutes

# Transcription et synthèse vocale

Transcrire un message vocal et faire lire une réponse, avec les API des éditeurs ou sur votre machine : fabriquer l'enregistrement, le transcrire, mesurer la transcription, faire parler un texte, et savoir ce que coûte une heure d'audio chez chaque éditeur.

Écrit le 9 octobre 2026 · Vérifié le 9 octobre 2026

## Vous saurez

- Envoyer un enregistrement à une API de transcription, et lire ce qu'elle rend
- Mesurer une transcription par son taux d'erreur, et voir ce qu'il ne dit pas
- Faire lire un texte par une voix de synthèse, et dire qu'elle est de synthèse
- Comparer le prix d'une heure transcrite chez dix éditeurs

- [← Avant Premier appel à un modèle](https://meridal.fr/apprendre/premier-appel/)
- [↓ Plus concret Réponse dans un format imposé](https://meridal.fr/apprendre/format-impose/)
- [→ Ensuite Collecte de données publiques](https://meridal.fr/apprendre/collecte-de-donnees-publiques/)

L'essentiel

1. Transcrire une heure d'enregistrement coûte de 0,12 $ à 0,96 $ au tarif standard selon l'éditeur et le modèle, au relevé du 9 octobre 2026.
2. En français, les meilleurs services se trompent sur 2 à 3 mots sur 100 dans le classement indépendant Open ASR, sur des jeux de test publics.
3. Le taux d'erreur compte tous les mots pareil : un numéro de commande faux pèse autant qu'un article oublié. Les chiffres et les noms se relisent toujours.
4. Depuis le 2 août 2026, le règlement européen demande de marquer l'audio de synthèse et de dire à une personne qu'elle parle à une IA.
5. Reconnaître une personne à sa voix, c'est traiter une donnée biométrique, sensible au sens du RGPD.

## Objectif

Transcrire un message vocal de client, mesurer la transcription contre le texte réellement dit, faire lire une réponse par une voix de synthèse, et chiffrer ce que coûteraient 100 heures de messages par mois.

Le message est fabriqué : une entreprise fictive, lu par la voix de synthèse du Mac. Les appels aux API de transcription et de synthèse n'ont pas été exécutés par Meridal ; la transcription utilisée à l'étape 3 est fabriquée. La fabrication de l'enregistrement et la mesure ont tourné : leurs sorties sont réelles.

Pour dicter au quotidien, sans programmer : [dictée et assistants vocaux](https://meridal.fr/apprendre/dictee-et-assistants-vocaux/).

## Données fournies

Le texte du message, tel qu'il est lu dans l'enregistrement, dans `message.txt` :

Bonjour, ici Claire Martin, de l'Atelier Rivière. Nous vous appelons au sujet de la commande quatre mille huit cent dix-sept, livrée le trois octobre. Il manque deux panneaux de chêne sur les douze. Pouvez-vous nous rappeler avant jeudi ? Merci, au revoir.

## Consignes

### Étape 1. Fabriquer l'enregistrement

La commande `say` du Mac lit un texte avec une voix française et l'enregistre ; `afconvert` le convertit dans un format que les API acceptent. Rien à installer.

`fabriquer.sh`

```
# Le message vocal de l'exercice, fabriqué : la voix de synthèse du Mac lit message.txt.
say -v Thomas -f message.txt -o message.aiff
afconvert -f m4af -d aac message.aiff message.m4a     # un format que les API acceptent
afinfo message.m4a | grep -E "estimated duration"
ls -l message.m4a | awk '{print "taille :", $5, "octets"}'
```

La sortie`sh fabriquer.sh`

```
estimated duration: 15.415601 sec
taille : 67119 octets
```

Essayé le 9 octobre 2026 sur un Mac (macOS 26.3, voix Thomas) avec Python 3.12.7, sur le message fabriqué de la page.

Quinze secondes, 67 Ko : bien sous la limite de 25 Mo par fichier d'OpenAI. Au-delà, il faut compresser ou découper.

### Étape 2. Transcrire

Chez OpenAI, d'après sa documentation, avec le modèle `gpt-transcribe` :

`transcrire_openai.py`

```
from openai import OpenAI

client = OpenAI()
audio_file = open("message.m4a", "rb")

transcription = client.audio.transcriptions.create(
    model="gpt-transcribe", file=audio_file
)

print(transcription.text)
```

Chez Mistral, avec Voxtral, dont le point d'accès suit celui d'OpenAI :

`transcrire_mistral.py`

```
import os
from mistralai.client import Mistral

api_key = os.environ["MISTRAL_API_KEY"]
model = "voxtral-mini-latest"

client = Mistral(api_key=api_key)

with open("message.m4a", "rb") as f:
    transcription_response = client.audio.transcriptions.complete(
        model=model,
        file={
            "content": f,
            "file_name": "message.m4a",
        },
        ## language="en"
    )
```

La sortie`python3 transcrire_openai.py`

**Pas encore exécuté par Meridal.** La transcription utilisée à l'étape 3 est fabriquée, dans `transcription.txt`, avec deux erreurs typiques : un nom propre et un nombre.

### Étape 3. Mesurer la transcription

Le taux d'erreur sur les mots, le WER, compte les mots remplacés, oubliés ou ajoutés, divisés par le nombre de mots dits. Le programme écrit d'abord les nombres en chiffres des deux côtés, pour ne compter que les vraies erreurs.

`mesurer.py`

```
import re, unicodedata

NOMBRES = {"quatre mille huit cent dix-sept": "4817", "trois": "3", "douze": "12"}

def mots(texte):
    """Minuscules, sans ponctuation, nombres écrits en chiffres : on compare les mots, pas la typographie."""
    t = texte.lower()
    for lettres, chiffres in NOMBRES.items():
        t = t.replace(lettres, chiffres)
    t = unicodedata.normalize("NFC", t)
    return re.findall(r"[\w'-]+", t)

def wer(reference, hypothese):
    """Taux d'erreur sur les mots : (substitutions + suppressions + insertions) / mots de la référence."""
    r, h = mots(reference), mots(hypothese)
    d = [[i + j if i * j == 0 else 0 for j in range(len(h) + 1)] for i in range(len(r) + 1)]
    for i in range(1, len(r) + 1):
        for j in range(1, len(h) + 1):
            d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + (r[i - 1] != h[j - 1]))
    return d[len(r)][len(h)], len(r)

erreurs, total = wer(open("message.txt").read(), open("transcription.txt").read())
print(f"{erreurs} erreurs sur {total} mots : WER = {erreurs / total:.1%}")
ref, hyp = mots(open("message.txt").read()), mots(open("transcription.txt").read())
print("mots différents :", [(a, b) for a, b in zip(ref, hyp) if a != b])
```

La sortie`python3 mesurer.py`

```
2 erreurs sur 37 mots : WER = 5.4%
mots différents : [('martin', 'martine'), ('4817', '4870')]
```

Essayé le 9 octobre 2026 sur un Mac (macOS 26.3, voix Thomas) avec Python 3.12.7, sur le message fabriqué de la page.

### Étape 4. Faire lire une réponse

Sur le Mac, `say` suffit pour un essai. Par API, d'après la documentation d'OpenAI, où le français est pris en charge :

`lire_openai.py`

```
from pathlib import Path
from openai import OpenAI

client = OpenAI()
speech_file_path = Path(__file__).parent / "speech.mp3"

with client.audio.speech.with_streaming_response.create(
    model="gpt-4o-mini-tts",
    voice="coral",
    input="Today is a wonderful day to build something people love!",
    instructions="Speak in a cheerful and positive tone.",
) as response:
    response.stream_to_file(speech_file_path)
```

La sortie`python3 lire_openai.py`

**Pas encore exécuté par Meridal.** Aucun appel payant n'est fait pour cette page.

### Étape 5. Chiffrer 100 heures par mois

Le prix d'une heure d'enregistrement transcrite

*Fichiers enregistrés, hors temps réel, au tarif standard publié, en dollars hors taxe, relevés le 9 octobre 2026 ; les prix à la minute sont multipliés par 60. Une étoile : prix à la minute estimé par l'éditeur, facturé en réalité au token. Les remises de volume, les promotions et les régions européennes, parfois plus chères de 10 %, ne sont pas comptées. Les modèles ouverts installés chez vous ne coûtent que leur machine.*

**Voir en tableau**

| Éditeur | Modèle | Une heure | 100 heures |
|---|---|---|---|
| Speechmatics | Melia 1 | 0,12 $ | 12,00 $ |
| AssemblyAI | Universal-2 | 0,15 $ | 15,00 $ |
| OpenAI | gpt-4o-mini-transcribe | 0,18 $ * | 18,00 $ |
| Mistral | Voxtral Mini Transcribe 2 | 0,18 $ | 18,00 $ |
| Google Cloud | Chirp 3 (dynamic batch) | 0,18 $ | 18,00 $ |
| Microsoft Azure | Batch transcription | 0,18 $ | 18,00 $ |
| AssemblyAI | Universal-3.5 Pro | 0,21 $ | 21,00 $ |
| ElevenLabs | scribe_v2 | 0,22 $ | 22,00 $ |
| Deepgram | nova-3 | 0,26 $ | 25,80 $ |
| OpenAI | gpt-transcribe | 0,27 $ | 27,00 $ |
| Deepgram | nova-3 | 0,31 $ | 31,20 $ |
| OpenAI | gpt-4o-transcribe | 0,36 $ * | 36,00 $ |
| OpenAI | whisper-1 | 0,36 $ | 36,00 $ |
| Microsoft Azure | Fast transcription | 0,36 $ | 36,00 $ |
| Amazon (AWS) | Amazon Transcribe | 0,36 $ | 36,00 $ |
| Speechmatics | Enhanced | 0,38 $ | 38,00 $ |
| Gladia | solaria-1 / solaria-3 | 0,61 $ | 61,00 $ |
| Google Cloud | Chirp 3 (standard) | 0,96 $ | 96,00 $ |

Sources : les pages de prix des éditeurs, et l'API des prix de Microsoft et d'AWS.

## Critères de réussite

- L'enregistrement fait moins de 25 Mo, dans un format accepté
- La transcription revient en texte à défaut, l'erreur dit pourquoi : clé, format, taille
- Le WER est calculé, et les deux erreurs sont listées 2 erreurs sur 37 mots
- Le numéro de commande et le nom sont relus à la main le WER ne les distingue pas des autres mots
- Le coût de 100 heures est chiffré pour deux éditeurs au moins

## Indications

**Le fichier est refusé**

**Cause**Trop gros ou mauvais format : 25 Mo chez OpenAI, 1 heure par requête chez Google en lot, 135 minutes chez Gladia.

**À faire**Compresser, découper, ou passer par l'envoi en lot de l'éditeur.

**Les intervenants sont mélangés**

**Cause**Le modèle de base ne sépare pas les voix ; OpenAI a un modèle dédié, gpt-4o-transcribe-diarize.

**À faire**Un modèle de séparation des locuteurs, et un enregistrement où chacun a son micro.

**Les noms et les nombres sont faux**

**Cause**Ce sont les mots les plus rares : le modèle les devine.

**À faire**Donner au modèle la liste des noms attendus quand l'éditeur le permet ; relire chiffres et noms.

**Le service garde les enregistrements**

**Cause**Chez Gladia, l'audio et les transcriptions des comptes payants sont gardés trois semaines ; chez Speechmatics, sept jours.

**À faire**Lire la durée de conservation avant d'envoyer, et la régler quand c'est possible.

## Correction commentée

**Ouvrir la correction**

**La mesure**2 erreurs sur 37 mots : un WER de 5,4 %, comparable à ce que les éditeurs annoncent. Le résultat paraît bon.

**Ce qu'il cache**L'une des deux erreurs est le numéro de commande, 4870 au lieu de 4817 : la seule information qui permettait de traiter la demande. Un taux d'erreur ne dit pas quels mots sont faux ; une relecture des chiffres et des noms, oui.

**Le coût**100 heures par mois coûtent de 12 $ à 96 $ selon l'éditeur et le modèle, au tarif standard ; le choix se fait plutôt sur la précision en français, la région de traitement et la conservation des données.

## Extensions

- **Sur votre machine**, sans envoyer l'audio : Whisper, sous licence MIT, Voxtral en open weight, sous Apache 2.0, ou Parakeet de NVIDIA, qui annonce environ 5 % de WER en français.
- **La précision en français, mesurée par un tiers** : l'Open ASR Leaderboard publie les WER de chaque service sur trois jeux de test français.
- **Un agent vocal** qui répond au téléphone doit dire qu'il est une IA ; l'audio de synthèse doit être marqué, au plus tard le 2 décembre 2026 pour les systèmes déjà sur le marché avant le 2 août.
- Le service de dictée au quotidien : [dictée et assistants vocaux](https://meridal.fr/apprendre/dictee-et-assistants-vocaux/).

## Lectures suivantes

↑ Plus général

Rien avant : c'est un point de départ.

← Avant [Premier appel à un modèle S'exercer · Niveau 3 · 15 minutes](https://meridal.fr/apprendre/premier-appel/)

Vous êtes ici

Transcription et synthèse vocale

→ Ensuite [Collecte de données publiques Faire · Niveau 3 · 20 minutes](https://meridal.fr/apprendre/collecte-de-donnees-publiques/)

↓ Plus concret [Réponse dans un format imposé S'exercer · Niveau 3 · 20 minutes](https://meridal.fr/apprendre/format-impose/)

[Tout le dossier « Construction et programmation »](https://meridal.fr/apprendre/dossier/construire/)

Les pages qui renvoient ici

- [Modèles en local : Ollama, vLLM et quantification](https://meridal.fr/apprendre/modeles-en-local-ollama-vllm/)

**Limites et sources**

Le message et la transcription sont fabriqués. Les appels aux API n'ont pas été exécutés par Meridal ; la fabrication de l'enregistrement et la mesure ont tourné le 9 octobre 2026.

Les prix sont ceux publiés au 9 octobre 2026, au tarif standard et hors remises ; les prix à la minute d'OpenAI pour gpt-4o-transcribe et gpt-4o-mini-transcribe sont des estimations de l'éditeur.

Les WER annoncés par les éditeurs sont des mesures d'éditeur ; seul l'Open ASR Leaderboard mesure le français de façon indépendante.

1. Le relevé : `apprendre/recherches/2026-10-09-voix-api.json`, 75 sources, 47 offres.

Écrit par Meridal, avec l'aide de l'IA ; chaque fait vérifié à sa source et relu avant publication. Texte et schémas sous licence [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/deed.fr) : reprenez-les en citant Meridal. Le code sous licence MIT.

Service correspondant

L'IA pour toute l'équipe

1 650 € à 4 250 €, puis sur devis

[Voir le service](https://meridal.fr/offre/#ia-equipe)

## Un premier échange de 30 minutes

En visio et sans frais : vous décrivez votre situation, nous vous indiquons ce qui est réalisable, avec quels outils et pour quel ordre de prix. Vous pouvez aussi nous écrire ; chaque message reçoit une réponse écrite.

[Réserver 30 minutes](https://meridal.fr/contact/#reserver) [Écrire un message](https://meridal.fr/contact/)
