Aller au contenu

S'exercerNiveau 3, Construire30 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
Sur cette page
  1. L'essentiel
  2. Objectif
  3. Données fournies
  4. Consignes
  5. Critères de réussite
  6. Indications
  7. Correction commentée
  8. Extensions
  9. Lectures suivantes
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.
1

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.

2

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

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 sortiesh fabriquer.sh
estimated duration: 15.415601 sectaille : 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 sortiepython3 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 sortiepython3 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 sortiepython3 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

0,00 $0,25 $0,50 $0,75 $1,00 $Speechmatics · Melia 10,12 $AssemblyAI · Universal-20,15 $OpenAI · gpt-4o-mini-transcribe0,18 $ *Mistral · Voxtral Mini Transcribe 20,18 $Google Cloud · Chirp 3 (dynamic batch)0,18 $Microsoft Azure · Batch transcription0,18 $AssemblyAI · Universal-3.5 Pro0,21 $ElevenLabs · scribe_v20,22 $Deepgram · nova-30,26 $OpenAI · gpt-transcribe0,27 $Deepgram · nova-30,31 $OpenAI · gpt-4o-transcribe0,36 $ *OpenAI · whisper-10,36 $Microsoft Azure · Fast transcription0,36 $Amazon (AWS) · Amazon Transcribe0,36 $Speechmatics · Enhanced0,38 $Gladia · solaria-1 / solaria-30,61 $Google Cloud · Chirp 3 (standard)0,96 $
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
Valeurs du graphique : Étape 5. Chiffrer 100 heures par mois
ÉditeurModèleUne heure100 heures
SpeechmaticsMelia 10,12 $12,00 $
AssemblyAIUniversal-20,15 $15,00 $
OpenAIgpt-4o-mini-transcribe0,18 $ *18,00 $
MistralVoxtral Mini Transcribe 20,18 $18,00 $
Google CloudChirp 3 (dynamic batch)0,18 $18,00 $
Microsoft AzureBatch transcription0,18 $18,00 $
AssemblyAIUniversal-3.5 Pro0,21 $21,00 $
ElevenLabsscribe_v20,22 $22,00 $
Deepgramnova-30,26 $25,80 $
OpenAIgpt-transcribe0,27 $27,00 $
Deepgramnova-30,31 $31,20 $
OpenAIgpt-4o-transcribe0,36 $ *36,00 $
OpenAIwhisper-10,36 $36,00 $
Microsoft AzureFast transcription0,36 $36,00 $
Amazon (AWS)Amazon Transcribe0,36 $36,00 $
SpeechmaticsEnhanced0,38 $38,00 $
Gladiasolaria-1 / solaria-30,61 $61,00 $
Google CloudChirp 3 (standard)0,96 $96,00 $

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

4

Critères de réussite

5

Indications

Le fichier est refusé

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

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

Les intervenants sont mélangés

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

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

Les noms et les nombres sont faux

CauseCe sont les mots les plus rares : le modèle les devine.

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

Le service garde les enregistrements

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

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

6

Correction commentée

Ouvrir la correction

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

Ce qu'il cacheL'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ût100 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.

7

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

Lectures suivantes

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

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.