/docs · VoiceLab · Deep
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é.
Mis à jour 27 sept. 2026
Le RT60 exige d’injecter un signal connu dans la pièce. Impossible sur un enregistrement déjà réalisé. Pour le contrôle qualité de la voix, nous avons donc construit un estimateur bon marché: mesurer l’énergie qui reste juste après la fin de chaque phrase, par rapport à la phrase elle-même. Une pièce vivante prolonge le son, une pièce traitée non.
Le 27 septembre 2026, nous avons testé cet estimateur contre des pièces dont le temps de réverbération avait réellement été mesuré. Il a échoué. Cette page présente la mesure, le test et ce que nous avons changé, car un résultat négatif reproductible vaut mieux qu’un tableau de seuils qui se lit bien.
La mesure
Trouver les transitions parole vers silence avec une simple porte d’énergie, puis lire l’enveloppe dans la traîne, par rapport au niveau à la transition.
function decayRatio(envelope, mask, hopSec) {
const decays = [];
for (let i = 1; i < mask.length - 30; i++) {
if (mask[i - 1] && !mask[i]) {
const peak = envelope[i - 1];
if (peak < 1e-5) continue;
const window = Math.min(30, Math.floor(0.6 / hopSec));
let tail = 0;
for (let k = 0; k < window; k++) tail += envelope[i + k];
tail /= window;
decays.push(tail / peak);
}
}
return decays.reduce((a, b) => a + b, 0) / decays.length;
}
Le code n’a rien de faux. Le problème est ce que le chiffre était censé signifier.
Contre quoi nous l’avons testé
- Des pièces réelles, sans bruit ajouté. Cinq phrases propres à travers 24 réponses impulsionnelles mesurées, avec des temps de réverbération de 0,18 à 1,71 s.
- Du bruit avec et sans réverbération. 1 280 enregistrements, quatre environnements, rapports signal sur bruit de 20, 10, 5 et 0 dB, chacun avec et sans 0,5 s de réverbération.
- Une reconstruction qui s’écartait du moteur de 0,0000 sur les 1 760 fichiers, pour que le résultat s’applique au code livré et non à une approximation.
Ce que disent les chiffres
| Question | Exigence | Résultat |
|---|---|---|
| Suit-il le RT60 mesuré de pièces réelles? (Spearman) | 0,70 ou mieux | 0,06 |
| Distingue-t-il réverbération et sec à 20 dB de SNR? (AUC) | 0,75 ou mieux | 0,52 |
| La même question à 10 dB de SNR | 0,75 ou mieux | 0,55 |
| Reste-t-il insensible au bruit seul? (AUC) | entre 0,35 et 0,65 | 0,68 |
Une AUC de 0,5 est un tirage au sort. Le chiffre le plus parlant: une pièce de 1,71 s de réverbération obtient 0,175, une cabine de 0,18 s obtient 0,186. La pièce réverbérante passe donc sous la cabine.
La seule chose que la mesure fait de façon fiable, c’est augmenter avec le bruit de fond. C’est exactement le mauvais comportement pour quelque chose qui s’appelle “pièce”.
Pourquoi il échoue
Trois raisons, chacune réparable seule et insuffisantes ensemble:
- Le plancher de bruit est le 10e centile de tout le fichier. Quand le fond varie, le bruit dans une pause est bien au-dessus de ce centile, et l’écart est compté comme traîne.
- On ne vérifie pas que la traîne tombe encore dans la pause. La fenêtre va de 60 à 420 ms après la fin de la phrase, et après la fermeture des courts silences, beaucoup de pauses sont plus brèves. La mesure lit alors le début du mot suivant.
- L’échelle est fausse même sans ces deux points. Un RT60 réel de 0,5 s donne en théorie un rapport d’environ 0,09, sous la limite de 0,15 qui signifiait “Dry”. Une réverbération moyenne allait donc toujours être appelée sèche.
Avec un pas de 20 ms et les sauts de la parole elle-même, la décroissance après une phrase est trop grossière pour en extraire la réverbération. C’est une question de recherche, pas une petite réparation.
Ce qui a changé le 27 septembre 2026
- L’étiquette
Dry/Tight/Live/Reverberanta disparu de la sortie du moteur, sans valeur par défaut. Un champ toujours vide n’est pas une mesure à livrer. - La carte en langage clair conseillant de traiter la pièce a disparu, ainsi que la pénalité que ce chiffre appliquait au score d’intelligibilité. Cette pénalité sanctionnait deux fois un enregistrement bruité.
- Le chiffre reste, sous le nom de ce qu’il mesure: énergie dans les pauses après la parole, bruit ou réverbération, sans les séparer. Lisez-le comme “ce qui reste dans les silences”, jamais comme un verdict sur la pièce.
- Dans l’API et le serveur MCP, le champ s’appelle encore
roomEchoScore. Renommer un champ publié casse les historiques enregistrés et les intégrations existantes: c’est une décision distincte, pas une partie de cette correction. La description, elle, dit ce qui est mesuré.
Ce qui répondrait vraiment à la question
Pour obtenir un chiffre de réverbération à partir du seul enregistrement, deux candidats honnêtes: une mesure sur le spectre de modulation comme le SRMR, ou un petit modèle entraîné sur des réponses impulsionnelles mesurées. Les deux se testent contre les mêmes 24 pièces.
La règle que nous nous sommes fixée: une nouvelle mesure ne peut s’appeler réverbération qu’après avoir passé ce test. En attendant, elle porte un nom qui décrit le calcul.
Pour aller plus loin
- Mesurer avec un seul claquement combien de temps une pièce résonne : le profil qui mesure vraiment la réverbération, à partir d’un claquement, d’un éclatement, d’une réponse impulsionnelle ou d’un balayage
- Loudness pragmatique pour les podcasts
- Concevoir un soutien auditif sans médicaliser
Ensuite dans VoiceLab docs
Mesurer avec un seul claquement combien de temps une pièce résonne →
Le profil room lit le temps de réverbération par bande d’octave à partir d’un claquement, d’un éclatement de ballon, d’une réponse impulsionnelle ou d’un balayage. Comment l’enregistrer, comment lire la réponse et jusqu’où les chiffres sont éprouvés.
More in VoiceLab docs
- Intro
Pourquoi la densité de mots de remplissage compte plus que leur nombre
Compter les « euh » est la mauvaise mesure. La densité dit s'ils posent problème.
- Practical
Une cible de loudness pragmatique pour les podcasts
La bonne cible de loudness pour les podcasts parlés n'est pas la même que pour la musique. Voici les chiffres et le pourquoi.
- Practical
Hauteur et qualité de la voix : ce que le profil donne et ce qu’il retient
Le profil pitch lit où se situe une voix, de combien elle bouge, à quel point l’enregistrement est voisé et à quel point la voix est propre. Les chiffres du test, les limites et pourquoi la gigue et le scintillement ne sont pas encore proposés.
- Practical
Trouver les paquets perdus dans un enregistrement
Le profil chain compte les trous de silence numérique qu’un paquet perdu laisse au milieu de la parole. Comment il décide, les chiffres du test, ce qu’il ne voit pas et la mesure d’écho et de slapback.