Voir et mesurer le son — épisode 6/10. Un crête-mètre numérique peut relever un maximum très bref, tandis qu’un indicateur quasi-crête réagit suivant une montée et un retour définis. Avec Confidence, de Dmc Mystic, nous allons comparer ces comportements et comprendre pourquoi deux affichages peuvent indiquer des niveaux différents sans mesurer la même chose.

Écouter Confidence

Ouvrir le MP3 original. Pour l’exercice, écoutez 0:00–0:20, puis 1:00–1:20, au même réglage de volume. Le fichier est identifié dans ses tags comme la piste 11/15 de l’album Electro cloud. Les comparaisons ci-dessous portent sur le signal réellement décodé.

1. PPM : Peak Programme Meter

Le terme PPM désigne une famille d’indicateurs de niveau de programme ; il faut préciser le type de détecteur. Dans cet article, nous nous intéressons au quasi-PPM, qui possède un temps d’intégration court mais non nul et un retour plus lent.

L’AES distingue les détecteurs de crête instantanée des quasi-crête, dont l’intégration est typiquement de l’ordre de quelques millisecondes. Les instruments professionnels proposent différentes échelles et réponses : la fiche RTW citée en références comporte notamment des réglages d’intégration et des modes distincts pour les indicateurs de crête. Il n’existe donc pas un unique comportement à déduire du seul mot « PPM ».

Trois lectures à distinguer
Indicateur Principe Limite essentielle
Crête échantillon Maximum absolu des valeurs numériques observées Ne recherche pas les maxima entre les échantillons
Quasi-PPM Détecteur à intégration courte et retour défini Peut sous-indiquer des transitoires très brèves
True Peak Estimation des maxima du signal reconstruit Dépend d’une méthode d’estimation et de ses tolérances

2. L’intégration n’est pas le rafraîchissement de l’écran

Un détecteur peut fonctionner à une résolution bien plus fine que l’affichage. Un écran à 25 images par seconde ne signifie pas que la mesure ne regarde qu’un échantillon toutes les 40 ms. À l’inverse, dessiner une barre plus souvent ne transforme pas un détecteur lent en détecteur de crête échantillon.

Il faut aussi séparer le maintien de crête, qui fige temporairement un maximum, du retour, qui définit la redescente. Deux interfaces peuvent partager le même détecteur et donner des impressions différentes si l’une conserve un trait de maximum pendant une seconde.

3. Conditions de mesure du MP3

La copie fournie a été inspectée et décodée avec FFmpeg et FFprobe 6.1.1. Elle contient un flux audio stéréo à 48 000 Hz, dont le débit indiqué est d’environ 269,9 kbit/s. Le décodage flottant 32 bits est réalisé sans gain, normalisation ou rééchantillonnage ajouté.

Le PCM obtenu comporte 10 624 732 échantillons par canal, soit 221,348583 secondes. FFprobe indique une durée de 221,376 secondes. Le journal signale un commentaire ID3 mal formé qu’il ignore ; le décodage audio complet a réussi. Cette différence de durée et cet avertissement ne servent pas à diagnostiquer la qualité musicale.

4. Mesures de crête et simulation : deux résultats distincts

Maxima sur le fichier entier
Grandeur Gauche Droite
Crête échantillon mesurée −1,715 dBFS −1,701 dBFS
Maximum du modèle pédagogique −2,452 dB réf. 1 −2,400 dB réf. 1
Écart entre ces maxima 0,737 dB 0,699 dB

La deuxième ligne n’est pas une lecture certifiée d’un PPM normalisé. Elle provient du modèle décrit ci-dessous. L’écart compare les maxima de chaque détecteur sur tout le fichier ; ils ne sont pas nécessairement atteints au même instant. Ce résultat ne constitue pas une correction fixe à appliquer à tous les PPM ou à tous les morceaux.

5. Un modèle pédagogique entièrement défini

Nous découpons d’abord le signal en blocs non chevauchants de 1 ms, soit 48 échantillons par canal. Pour chaque bloc, u[k] = max(|x[n]|). Cette première étape retient les pointes du bloc mais perd leur durée interne exacte. Une pointe de moins de 1 ms est donc représentée par le maximum d’un bloc : ce modèle ne convient pas à la certification de transitoires sous-milliseconde.

L’état du détecteur commence à zéro. À chaque bloc de durée Δt, on applique y[k] = a y[k−1] + (1−a)u[k]. Le coefficient vaut a = exp(−Δt/τ). On emploie une constante de montée quand u[k] dépasse l’état précédent, et une constante de retour dans le cas contraire.

  • Montée : τa = 0,010 / ln(10), soit environ 4,343 ms. Face à un échelon constant, le modèle rejoint 90 % du niveau final après 10 ms, soit environ −0,915 dB par rapport à sa valeur finale.
  • Retour : τr = 1,5 / ln(10), soit environ 0,6514 s. Face au silence, la valeur baisse d’un facteur 10 en 1,5 s, donc de 20 dB.

Ces paramètres sont des choix de démonstration, pas une revendication de conformité IEC, DIN ou BBC. Le temps pour atteindre un pourcentage donné n’est pas la constante de temps elle-même. Une validation normalisée demanderait des salves, des fréquences et des tolérances précises.

La sortie est affichée en 20 log10(y), avec l’amplitude numérique 1 comme référence. Pour une sinusoïde de 1 kHz stable à 48 kHz, les blocs de 1 ms couvrent une période et retiennent sa crête : après stabilisation, la sortie rejoint ce niveau dans ce cas particulier. Ce contrôle ne prouve pas la même réponse à toutes les fréquences.

6. Voir la différence sur Confidence

Comparaison stéréo entre les crêtes échantillon et un modèle à montée limitée et retour lent sur Confidence
Le modèle est calculé sur tous les blocs de 1 ms. Pour la figure, chaque intervalle de 50 ms conserve le maximum des crêtes et le maximum des sorties du modèle. Les courbes relient ces valeurs. Les niveaux inférieurs à −40 dB sont hors cadre. Il s’agit d’une simulation sur les données réelles, pas d’une mesure PPM normalisée.

Le modèle peut rester au-dessus des crêtes du bloc courant lorsque le son baisse : son état conserve la mémoire du passage précédent. Cela ne signifie pas qu’il invente une crête numérique dans le fichier. Sa valeur ne dépasse cependant pas le maximum absolu déjà rencontré, pour ce modèle dont les coefficients forment des combinaisons convexes.

Maxima relevés dans deux fenêtres de vingt secondes
Passage / canal Crête dBFS Maximum du modèle, dB réf. 1
0:00–0:20 / gauche −2,321 −2,794
0:00–0:20 / droite −2,234 −2,694
1:00–1:20 / gauche −2,434 −2,970
1:00–1:20 / droite −2,302 −2,901

Le modèle est calculé en continu depuis le début du morceau, puis les fenêtres sont extraites. Le réinitialiser à zéro au début de chaque extrait pourrait modifier sa lecture initiale. C’est un paramètre de méthode à conserver lorsque l’on compare des outils.

7. Reproduire l’analyse

Les commandes utilisent une copie locale nommée confidence.mp3.

ffmpeg -v warning -i confidence.mp3 -map 0:a:0 -c:a pcm_f32le -f f32le confidence.f32
ffmpeg -hide_banner -i confidence.mp3 -map 0:a:0 -af astats=metadata=0:reset=0 -c:a pcm_f32le -f null -

astats donne les crêtes échantillon de contrôle ; il ne devient pas un quasi-PPM avec cette commande. La sortie flottante évite de limiter artificiellement la chaîne de calcul au format entier.

Calcul du modèle et export CSV

import numpy as np

fs = 48000
x = np.fromfile("confidence.f32", dtype="<f4").reshape(-1, 2)
n = len(x) // 48
u = np.max(np.abs(x[:n*48].reshape(n, 48, 2)), axis=1).astype(float)
if n * 48 < len(x):
    u = np.vstack((u, np.max(np.abs(x[n*48:]), axis=0)))
dt = np.full(len(u), 0.001)
dt[-1] = (len(x) - (len(u)-1)*48) / fs
tau_a = 0.010 / np.log(10)
tau_r = 1.5 / np.log(10)
y = np.zeros_like(u)
etat = np.zeros(2)
for k in range(len(u)):
    tau = np.where(u[k] > etat, tau_a, tau_r)
    a = np.exp(-dt[k] / tau)
    etat = a * etat + (1-a) * u[k]
    y[k] = etat
avec_plancher = np.maximum(y, 1e-20)
db = 20 * np.log10(avec_plancher)
np.savetxt("confidence-modele.csv", np.column_stack((np.cumsum(dt), db)),
           delimiter=",", header="fin_bloc_s,gauche_db_ref1,droite_db_ref1",
           comments="")

Ce script nécessite NumPy. Il conserve la durée réelle du dernier bloc, qui peut être plus court que 1 ms. Les colonnes gauche et droite sont exprimées en dB relatifs à l’amplitude 1. Le fichier brut n’a pas d’en-tête ; la fréquence et les deux canaux sont donc explicitement définis.

8. Bien choisir ce que l’on contrôle

Pour connaître les excursions des échantillons, utilisez un détecteur qui conserve ces maxima. Pour estimer les crêtes reconstruites entre les points, utilisez une mesure True Peak documentée. Pour comparer la sonie, utilisez un indicateur LUFS. Le quasi-PPM apporte une lecture temporelle distincte, qui ne remplace pas ces mesures.

Une barre sous le seuil maximal ne garantit pas l’absence d’écrêtage dans les autres étapes de la chaîne. Inversement, la couleur rouge d’un cadran dépend de son seuil et de sa référence. Toute interface devrait annoncer le détecteur, la référence, la montée, le retour et l’éventuel maintien de crête.

Sources et validation

Les maxima du MP3 ont été contrôlés avec FFmpeg et par calcul sur le PCM flottant. Le modèle a été testé sur un échelon et un retour au silence, avec les paramètres publiés ci-dessus. La couverture est une illustration éditoriale.

Prochain épisode : LUFS et EBU R128, pour passer du niveau numérique à la mesure de sonie.