Sur cette page
- 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.
- 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.
- 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.
- 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.
- 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.
Données fournies
Le texte du message, tel qu'il est lu dans l'enregistrement, dans message.txt :
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"}'sh fabriquer.shestimated 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.pyfrom 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.pyimport 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"
)python3 transcrire_openai.pyPas 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.pyimport 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])python3 mesurer.py2 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.pyfrom 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)python3 lire_openai.pyPas 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
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
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.
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.
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.
Lectures suivantes
Rien avant : c'est un point de départ.
Transcription et synthèse vocale
Les pages qui renvoient ici
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.
- 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.
L'IA pour toute l'équipe
1 650 € à 4 250 €, puis sur devis