Voir et mesurer le son — épisode 8/10. La plus grande valeur stockée parmi les échantillons n’est pas forcément le maximum du signal reconstruit. Avec Basic dubstep lemon cherry voice melodic, de Dmc Mystic, nous allons comparer crête échantillon et estimation True Peak, puis vérifier ce qu’un nouvel encodage MP3 peut changer.
Écouter le fichier de référence
Ouvrir le MP3 original. Le fichier porte dans ses tags le nom d’album Groove galaxy et le numéro de piste 3/15. Pour l’exercice, écoutez le passage 1:30–1:40 : le zoom de cet article se situe vers 1:34,098 sur le canal droit. Une excursion très brève ne doit pas être assimilée automatiquement à une distorsion audible.
1. Crête échantillon et True Peak : deux recherches différentes
La crête échantillon se calcule par Ps = max(|x[n]|). Elle recherche les plus grands points disponibles dans le PCM. Son niveau vaut 20 log10(Ps) en dBFS, avec la référence d’amplitude normalisée 1.
Le True Peak cherche à estimer le maximum de la forme d’onde reconstruite entre ces points. On le note en dBTP. La reconstruction d’un signal à bande limitée ne se réduit pas à relier les points par des segments droits : sa courbe peut dépasser leurs amplitudes.
Dans le modèle idéal, la reconstruction s’écrit comme une somme de fonctions sinc : x(t) = Σx[n] sinc(fst − n), avec sinc(u) = sin(πu)/(πu). Un appareil réel utilise des filtres finis et possède ses propres caractéristiques ; un graphique d’interpolation n’est pas une mesure de sa sortie électrique.
2. Pourquoi suréchantillonner ?
Une estimation numérique insère des points supplémentaires par interpolation, puis recherche les maxima sur cette grille plus fine. À 48 kHz, une grille à 192 kHz correspond à un facteur quatre : le pas passe d’environ 20,83 µs à 5,21 µs.
L’ITU-R BS.1770 décrit cette approche et ses erreurs possibles. Le filtre d’interpolation, la fréquence du signal, le facteur de suréchantillonnage et la précision numérique influencent le résultat. Augmenter la densité des points améliore l’observation, mais ne transforme pas une estimation finie en maximum continu mathématiquement exact.
Un simple agrandissement graphique ou une interpolation linéaire ne constitue pas une mesure True Peak. Un outil destiné à un contrôle de conformité doit passer les tests et tolérances applicables.
3. Méthode appliquée à ce MP3
La copie du fichier a été analysée avec FFmpeg et FFprobe 6.1.1. Le flux est stéréo, à 48 000 Hz, avec un débit audio indiqué d’environ 287,5 kbit/s. FFprobe annonce 300,024 secondes ; le PCM décodé en flottant 32 bits dure 299,980063 secondes.
Les mesures de référence sont celles du filtre ebur128 avec les modes crête échantillon et True Peak activés. Une interpolation indépendante avec SciPy sert à construire le zoom et à explorer le phénomène ; elle n’est pas présentée comme une implémentation certifiée de l’algorithme ITU.
Aucun gain ni écrêtage entier n’est ajouté avant l’analyse de l’original. Le journal signale un commentaire ID3 mal formé, qu’il ignore ; le décodage audio complet a réussi. Ce message de tag n’est pas un diagnostic de distorsion sonore.
4. Résultats sur l’original
| Méthode | Gauche | Droite |
|---|---|---|
| Crête échantillon, calcul sur PCM | +0,787 dBFS | +0,160 dBFS |
| True Peak FFmpeg, journal au dixième | +0,8 dBTP | +0,3 dBTP |
| Maximum interpolé ×4, SciPy FIR Kaiser | +0,787 dB réf. 1 | +0,338 dB réf. 1 |
Sur le canal droit, l’interpolation indépendante trouve un maximum supérieur d’environ 0,178 dB à la crête échantillon maximale de ce canal. Ces maxima ne sont pas obligatoirement au même instant. Le maximum de la grille interpolée se situe vers 94,097609 s.
À gauche, le maximum global interpolé est très proche du maximum global des échantillons. Cela ne signifie pas qu’il n’existe aucune excursion entre échantillons ailleurs sur le canal : un maximum global peut masquer des différences locales plus petites.
Les valeurs positives sont conservées dans la chaîne flottante. Une conversion vers un format entier sans marge peut limiter les excursions. La présence de ces valeurs ne permet pas de reconstituer l’historique du master ni d’affirmer que tous les lecteurs produisent une distorsion audible.
5. Voir une excursion entre les points
L’amplitude est représentée ici sur une échelle linéaire. Pour passer à un niveau en décibels, on prend le logarithme de la valeur absolue du maximum. Un sommet négatif compte autant qu’un sommet positif pour cette recherche.
La fenêtre graphique couvre moins d’une milliseconde. L’extrait audio de dix secondes sert à situer le passage dans la musique, mais l’observation du pic ne fournit pas une preuve perceptive d’écrêtage.
6. Réencodage MP3 : une expérience contrôlée
Nous avons créé une copie de travail en baissant le gain de 2 dB, puis en réencodant le son avec libmp3lame à 192 kbit/s, sans changement de fréquence. La réduction est appliquée avant le nouvel encodage. Le MP3 original du lecteur reste inchangé.
| État | Crête échantillon maximale | True Peak maximal |
|---|---|---|
| MP3 original décodé | +0,8 dBFS | +0,8 dBTP |
| Atténuation linéaire −2 dB, avant réencodage : prévision | −1,2 dBFS | −1,2 dBTP environ |
| Nouveau MP3 192 kbit/s, décodé et mesuré | −0,7 dBFS | +0,1 dBTP |
Le nouvel encodage n’a donc pas conservé exactement les maxima du signal atténué. Dans le journal de cette copie, le True Peak est d’environ −0,6 dBTP à gauche et +0,1 dBTP à droite. Ce résultat est propre à ce morceau, cet encodeur et ces réglages ; il ne constitue pas une hausse constante attribuable à tous les MP3.
Un codec avec pertes modifie la représentation du signal. Le décodage peut déplacer les extrema et modifier le rapport entre crêtes échantillon et estimées. Cette expérience est un réencodage d’un MP3 existant, pas une comparaison avec le master sans pertes : elle ne permet pas de mesurer ce que le premier encodage avait déjà changé.
7. Reproduire les mesures et l’expérience
Les commandes utilisent une copie locale nommée basic-dubstep.mp3.
Mesurer les deux familles de crêtes
ffmpeg -hide_banner -nostats -i basic-dubstep.mp3 -map 0:a:0 -af ebur128=peak=sample+true -c:a pcm_f64le -f null -
Dans cette version, la rubrique True Peak du résumé utilise le libellé « dBFS ». Nous la présentons en dBTP dans les tableaux pour expliciter le type d’estimation. Le journal au dixième ne permet pas de conclure que deux valeurs arrondies identiques sont numériquement égales.
Décoder sans réduction de niveau
ffmpeg -v warning -i basic-dubstep.mp3 -map 0:a:0 -c:a pcm_f32le -f f32le basic-dubstep.f32
Créer et contrôler la copie atténuée puis réencodée
ffmpeg -i basic-dubstep.mp3 -map 0:a:0 -map_metadata -1 -af volume=-2dB -c:a libmp3lame -b:a 192k gain-minus2-192.mp3
ffmpeg -hide_banner -nostats -i gain-minus2-192.mp3 -map 0:a:0 -af ebur128=peak=sample+true -c:a pcm_f64le -f null -
Ces commandes écrivent un nouveau fichier ; elles ne remplacent pas l’original. La sortie de la commande de mesure est jetée. La suppression des métadonnées dans la copie d’essai évite de transporter la pochette et les tags sans rapport avec le test.
Refaire l’interpolation indépendante
import numpy as np
from scipy.signal import resample_poly
x = np.fromfile("basic-dubstep.f32", dtype="<f4").reshape(-1, 2)
for canal in range(2):
signal = x[:, canal]
interpole = resample_poly(signal, 4, 1, window=("kaiser", 8.6))
pic = np.max(np.abs(signal))
pic_interpole = np.max(np.abs(interpole))
print(canal, "crête échantillon dBFS", 20*np.log10(pic),
"maximum interpolé dB réf. 1", 20*np.log10(pic_interpole))
del interpole
Ce code utilise NumPy et SciPy. Les canaux sont traités séparément pour limiter la mémoire utilisée. Le fichier brut n’a pas d’en-tête : il faut connaître ses deux canaux et sa fréquence. La méthode d’interpolation doit être mentionnée avec les résultats ; changer de filtre peut les faire varier.
8. Quelle marge conserver ?
Le niveau admissible dépend du workflow et du cahier des charges. EBU R128 définit une limite générale de −1 dBTP pour la production linéaire, avec des conditions de distribution pouvant imposer davantage de marge. Cette référence ne dispense pas de mesurer un export encodé.
Une réduction de gain déplace linéairement les maxima du signal existant. Un limiteur True Peak vise un comportement différent et doit être configuré puis vérifié. Ni le nom du préréglage, ni le seul plafond de crête échantillon ne garantissent le niveau True Peak du fichier final.
La bonne vérification porte sur le fichier réellement livré, décodé comme un signal audio. On conserve la méthode, la version des outils et la précision des résultats. Les chiffres ne remplacent pas une écoute attentive, et l’écoute ne remplace pas le contrôle technique des maxima.
Sources et validation
- ITU-R BS.1770-5 : estimation des niveaux de crête vrais, annexe 2.
- FFmpeg : modes de mesure du filtre ebur128.
- SciPy : interpolation polyphasée resample_poly.
- EBU R128 : référence de production et contrôle True Peak.
Les mesures FFmpeg, l’interpolation et le test de réencodage ont été exécutés sur le fichier fourni. La couverture est une illustration éditoriale. Prochain épisode : spectre et spectrogramme, pour voir les fréquences dans le temps.