Aller au contenu
Se connecter

/docs · VoiceLab · Practical

Lire l'audio avant de transcrire

Un appel avant le modèle : ce que les champs de scène disent d'un fichier, et ce qu'ils ne disent pas, avec les chiffres de notre propre test de transcription.

Mis à jour 10 oct. 2026


Une transcription peut être fausse pour des raisons qui étaient dans l’audio avant que le modèle ne le voie : un envoi écrêté, une seconde voix qui couvre le message, un locuteur à quelques dB seulement au-dessus d’une pièce bruyante. Une mesure avant le modèle peut les montrer. Elle ne peut pas vous dire si la transcription sera juste, et cette page dit où passe cette limite, avec des chiffres.

Ce que les champs ne prédisent pas

Nous l’avons testé, le 10 octobre 2026. Seize signalements de citoyens néerlandais inventés (rue et numéro, ville, nom de famille, numéro de téléphone, adresse e-mail), lus par trois voix synthétiques dans 13 conditions : propre, bande téléphonique, bruit de rue et brouhaha à 10 et 5 dB, une télévision, quatre temps de réverbération mesurés, et des combinaisons. Cela fait 624 enregistrements et 1 248 transcriptions par Whisper small et Whisper large-v3-turbo, 48 par condition et par modèle, soit une marge d’environ 13 points.

  • Les mesures de SNR n’ont pas prédit les erreurs. Pour « rue, numéro ou ville faux », l’AUC de worstPhraseSnrDb, segmentalSnrDb et signalToNoiseDb était de 0,52 à 0,55 pour les deux modèles. 0,50, c’est pile ou face.
  • sceneIntelligibility a donné des fausses alarmes. Il s’est lu non clair (limite ou noyé) sur 100 pour cent des enregistrements avec du bruit de rue à 10 et 5 dB et sur 94 à 100 pour cent avec du brouhaha, alors que Whisper small trouvait encore le lieu juste sur 58 à 67 pour cent d’entre eux (propre : 69) et large-v3-turbo sur 71 à 85 pour cent (propre : 81). Sur l’ensemble des enregistrements, il en a signalé 58 pour cent ; parmi les signalés, 47 pour cent (small) ou 25 pour cent (large) avaient une vraie erreur de lieu.
  • Ce qui expliquait les erreurs, c’étaient les mots. Sur les enregistrements propres, la rue, le numéro et la ville revenaient justes 69 pour cent (small) ou 81 pour cent (large) du temps, une adresse e-mail épelée en mots 21 ou 35 pour cent, un numéro de téléphone 83 ou 88, un nom de famille 73 ou 81. Le choix du modèle pesait plus que l’audio : une réverbération de 1,0 s avec du brouhaha donnait 17 pour cent pour small contre 54 pour cent pour large.

Les limites du test : voix synthétiques, Whisper seulement, une bande téléphonique simulée, du texte néerlandais, 48 enregistrements par condition et par modèle. Les locuteurs réels, les autres moteurs de reconnaissance et les autres langues ne sont pas testés. Ne refusez donc pas un fichier sur sceneIntelligibility ou sur un SNR seul. Ils décrivent le signal.

L’appel

POST https://audiolab.tools/v1/voicelab/qa avec une clé Bearer. Envoyez le fichier en multipart/form-data (file), ou en JSON avec une url publique. La réponse est l’analyse VoiceLab complète ; la partie qui compte ici, abrégée, pour une conférence avec un second locuteur 18 dB derrière le message :

{
  "sceneBackground": "program",
  "sceneProgramScore": 0.92,
  "sceneGapHarmonicShare": 0.33,
  "speechToBackgroundDb": 15.2,
  "sceneIntelligibility": "clear",
  "sceneIntelligibilityScore": 0.81
}

Lisez-la comme une phrase : il y a une seconde voix dans les pauses (program, un tiers de l’énergie des pauses est une hauteur mobile), le message est 15 dB au-dessus d’elle, et la voix au premier plan se lit comme suivable par un auditeur. Cela dit quelque chose du signal, pas de ce qu’un moteur de reconnaissance en fera.

ChampCe qu’il ditValeurs
sceneIntelligibilityUn proxy pour savoir si un auditeur pourrait suivre la voix au premier plan (pas pour la reconnaissance vocale)clear, borderline, buried, ou null en dessous de deux phrases mesurables
sceneIntelligibilityScoreLa même chose sous forme de nombre0 à 1 ; clear à partir de 0,65, borderline à partir de 0,35
speechToBackgroundDbNiveau moyen de la parole moins le plancher moyen des pausesdB ; 3 se lit 0, 18 se lit 1 dans le score
sceneBackgroundCe qui remplit les pausesquiet, stationary (une machine), program (une seconde voix ou de la musique), unsteady, ou null en dessous d’une seconde de pause
clipping.severityDégâts numériques, plus faciles à corriger à la source que plus tardNone, Low, Medium, High
speechRatioPart du fichier qui est de la parole0 à 1

L’utiliser sans refuser de fichiers

const KEY = process.env.AUDIOLAB_API_KEY;

async function check(url) {
  const v = await fetch('https://audiolab.tools/v1/voicelab/qa', {
    method: 'POST',
    headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
    body: JSON.stringify({ url }),
  }).then((r) => r.json());

  const notes = [];
  if (v.speechRatio < 0.2) return { route: 'no-speech', notes };            // rien à transcrire, ne facturez pas de minutes
  if (v.clipping.severity === 'High') notes.push('clipped');                // dégâts à la source
  if (v.sceneBackground === 'program') notes.push('second-voice-or-music'); // quelque chose parle derrière le message
  if (v.sceneIntelligibility === 'buried') notes.push('voice-close-to-background');
  return { route: 'transcribe', notes };                                    // joignez les notes à la transcription, laissez une personne décider
}

Deux issues sont sûres pour agir : un fichier presque sans parole, et une transcription qui porte ce que l’audio a montré. Tout le reste est de l’information à joindre à la transcription, pas une raison de refuser le fichier. Le cas null compte : un fichier avec une seule phrase n’est pas un mauvais fichier, c’est un fichier non mesuré.

Exemples de lectures

Ce sont des exemples de lectures, pas un étalonnage. Les étiquettes ont été fixées à la main sur ce matériel et n’ont pas été validées contre des auditeurs ni contre la reconnaissance vocale. Une conférence enregistrée dans une salle avec un public, puis mélangée avec les choses qui se trouvent derrière un message :

ScèneFondParole au-dessus du fondIntelligibilité
Conférence, propreunsteady (la salle et le public)17,1 dBclear 0,94
plus une ventilation à −20 dBstationary, tonalité à 120,8 Hz15,4 dBclear 0,85
plus un second locuteur à −18 dBprogram15,2 dBclear 0,81
plus un morceau de club à −18 dBunsteady15,0 dBclear 0,80
plus un second locuteur à −6 dBprogram10,0 dBborderline 0,45

Et un enregistrement de pièce fait avec un téléphone, où les haut-parleurs de lecture n’atteignaient que 5 à 7 dB au-dessus du plancher de la pièce elle-même : chaque prise s’est lue buried, scores de 0,12 à 0,25. Savoir si un moteur de reconnaissance s’en serait sorti n’a pas été testé.

Le score est le plus faible de deux volets : le pire dixième du rapport signal sur bruit par phrase, et la parole au-dessus du plancher des pauses, tous deux mis à l’échelle de sorte que 3 dB se lit 0 et 18 dB se lit 1, puis réduits pour une pièce réverbérante et pour l’écrêtage. Il est volontairement prudent : une mauvaise série de phrases tire tout le fichier vers le bas.

Ce que le chiffre n’est pas

  • Pas un prédicteur de la précision de transcription. Voir le test ci-dessus.
  • Pas un STI. C’est un proxy construit à partir de niveaux, phrase par phrase. Il vous dit si la voix se tient assez au-dessus de ce qu’il y a derrière ; il ne modélise pas l’oreille d’un auditeur, et il n’a pas été testé contre des auditeurs.
  • Pas un détecteur de parole pour la musique. Le détecteur de phrases lit un chant comme de la parole, donc un fichier de musique avec une voix peut revenir buried. Lisez la musique sur sceneBackground et speechRatio ailleurs, ou ne l’envoyez pas ici du tout.
  • Non mesuré sur les fichiers courts. En dessous de deux phrases mesurables, chaque champ de scène vaut null. Traitez null comme « non mesuré », jamais comme « bon » ou « mauvais ».
  • Lu après les premières 0,4 s de chaque pause, pour que la queue du dernier mot ne compte pas comme du fond. Les pauses de moins d’une seconde ne comptent pas du tout.

Fichiers en attente et agents

Pour un stock de fichiers en attente, POST /v1/batch exécute la même route sur jusqu’à 20 URL en un appel et renvoie un résultat par URL, dans l’ordre. Pour un agent, l’outil MCP analyze_voice renvoie les mêmes champs pour une url (ou un path local avec le paquet npm, qui lit le fichier sur votre machine et le téléverse vers l’API pour le mesurer). Le palier gratuit comprend 1 000 appels par mois, ce qui suffit pour voir quelle part de votre flux entrant porte chaque note avant de décider quoi que ce soit.

Vous voulez d’abord voir les mêmes chiffres à la main ? Déposez un fichier sur l’espace de travail et ouvrez le groupe Scene dans l’onglet Voice, ou lisez les définitions et le statut de chaque mesure scene.* sur /lenses.

Ensuite dans VoiceLab docs

Ce que mesure vraiment la décroissance après la parole →

Nous avons construit un estimateur de réverbération bon marché à partir de la décroissance après chaque phrase, puis nous l’avons testé contre 24 pièces mesurées. Il ne mesure pas la réverbération. Voici les chiffres et ce que nous avons changé.

More in VoiceLab docs