Pourquoi Votre Image de Forme d’Onde N’a Pas de Batterie
Dessiner une forme d’onde est un problème de réduction : plusieurs millions de nombres doivent devenir quelques centaines de colonnes de pixels. Presque tous les outils y répondent de la même façon, en une ligne, et cette ligne est fausse d’une manière que l’on peut mesurer exactement.
Voici l’arithmétique qui en fait un problème. Un morceau de trois minutes en 44,1 kHz, c’est 7 938 000 échantillons. Dessiné en 800 px de large, chaque colonne de pixels doit représenter 9 922,5 d’entre eux. Quelque chose doit décider de ce que signifie la hauteur d’une colonne.
La réponse courante consiste à prendre un échantillon dans chaque colonne et à dessiner sa hauteur. Cela lit 800 échantillons sur 7 938 000 — 0,0101 % du fichier. Ce n’est pas un résumé de la colonne. C’est un échantillonnage ponctuel de celle-ci, à une cadence des milliers de fois inférieure à celle du signal, ce qui est le cas d’école du repliement de spectre.
Un son à pleine échelle dessiné en ligne plate
La façon la plus nette de le voir est de dessiner un audio dont vous connaissez déjà le dessin correct. Nous avons généré 180 secondes d’un son constant à amplitude 1,0 — pleine échelle du premier au dernier échantillon. Le vrai dessin est un bloc plein de hauteur 1,000, à chaque colonne, sans discussion possible.
Voici ce que renvoie un échantillon par colonne, quand la seule chose qui change est la fréquence :
| Son | Un échantillon par colonne | Chaque échantillon (crête) |
|---|---|---|
| 100 Hz | 0,0036 | 1,0000 |
| 220 Hz | 0,0078 | 1,0000 |
| 261,63 Hz | 0,6361 | 1,0000 |
| 440 Hz | 0,0157 | 1,0000 |
| 441 Hz | 0,6352 | 1,0000 |
| 1000 Hz | 0,0356 | 1,0000 |
| 2000 Hz | 0,0710 | 1,0000 |
| 5000 Hz | 0,1744 | 1,0000 |
Audio identique, au même volume, et les réponses vont de 0,0036 à 0,6361. Cent quatre-vingts secondes d’un son qui ne quitte jamais la pleine échelle se dessinent en ligne plate à 440 Hz — et à 441 Hz, un hertz plus loin, en une onde à 64 % de hauteur.
Rien de tout cela n’est une propriété de l’audio. C’est une propriété de la façon dont la période du son se divise dans le pas des colonnes : 440 Hz en 44,1 kHz, cela fait 100,227 échantillons par cycle, et 9 922,5 échantillons par colonne font 99,0 de ces cycles — colonne après colonne, on retombe donc presque sur la même phase. Le portrait est celui de l’arithmétique, pas celui du son.
Redimensionnez l’image et l’onde change de forme
C’est le signe que beaucoup ont déjà vu sans savoir le nommer. Prenez ce même fichier de 440 Hz et redessinez-le à différentes largeurs, sans rien changer d’autre :
| Largeur | Échantillons par colonne | Un échantillon par colonne | Chaque échantillon |
|---|---|---|---|
| 600 px | 13 230,0 | 0,0000 | 1,0000 |
| 700 px | 11 340,0 | 0,6259 | 1,0000 |
| 800 px | 9 922,5 | 0,0157 | 1,0000 |
| 900 px | 8 820,0 | 0,0000 | 1,0000 |
| 1000 px | 7 938,0 | 0,6155 | 1,0000 |
| 1200 px | 6 615,0 | 0,0000 | 1,0000 |
| 1920 px | 4 134,4 | 0,5114 | 1,0000 |
Un fichier, un son, sept dessins — trois d’entre eux vides. Si vous avez déjà exporté une onde en deux tailles et trouvé la seconde bizarre, vous aviez raison, et c’est pour cela. Un dessin qui change quand vous changez la toile ne décrit pas l’audio.
Une piste de batterie sans batterie
Le cas des fréquences est une démonstration propre, mais le cas qui coûte du vrai travail, ce sont les transitoires. Une impulsion de 2 ms en 44,1 kHz, c’est 88 échantillons — 0,89 % d’une colonne de 9 922 échantillons. Lire un échantillon par colonne tombe dessus environ 0,89 % du temps.
Nous avons construit une piste de clics : 360 impulsions à pleine échelle, une toutes les 500 ms, sur trois minutes. Puis nous l’avons dessinée des deux façons.
| Mesure | Un échantillon par colonne | Chaque échantillon (crête) |
|---|---|---|
| Colonnes montrant une impulsion | 0 sur 800 | 360 sur 800 |
| Colonne la plus haute | 0,0000 | 0,8973 |
| Échantillon unique à pleine échelle trouvé (200 positions au hasard) | 0 / 200 | 200 / 200 |
| Impulsion de 2 ms trouvée (200 positions au hasard) | 3 / 200 | 200 / 200 |
Zéro. Pas une batterie plus faible — aucune batterie. Chacune des 360 frappes à pleine échelle est tombée entre les échantillons regardés, et le dessin est revenu en ligne plate. En cachant un unique échantillon à pleine échelle dans un fichier calme et en le déplaçant à 200 positions au hasard, le raccourci l’a trouvé aucune des 200 fois ; élargi à une impulsion de 2 ms, il en a trouvé trois.
Pourquoi personne ne le remarque
Parce que cela n’échoue jamais bruyamment. Une onde 65 % trop basse, ou privée de ses transitoires, ou d’une autre forme à une autre taille, ressemble toujours à une onde. Elle a des crêtes et des creux, elle commence où l’audio commence et finit où il finit, et elle est globalement plus haute dans les passages forts. Aucune erreur, aucun avertissement, et rien à quoi la comparer — c’est exactement la forme des autres défauts que nous continuons de trouver dans les petits outils créatifs : un anneau dessiné à la moitié de la largeur demandée se lit comme un anneau plus fin, pas comme un bogue, et une tranche de carrousel décalée d’un demi-pixel se lit comme une photo un peu molle.
La raison de s’en soucier n’est pas esthétique. Si vous coupez d’après l’onde, si vous alignez un sous-titre sur un temps, ou si vous retirez du silence à l’œil, vous décidez à partir d’un dessin qui a jeté 99,99 % des preuves.
Le correctif, et ce qu’il coûte
Gardez le minimum et le maximum de chaque colonne. C’est tout. Il ne peut pas rater un échantillon puisqu’il les lit tous, il est stable au redimensionnement parce qu’il ne dépend pas des échantillons regardés par hasard, et il attrape une transitoire de 88 échantillons pour la même raison.
Le coût : réduire les 7 938 000 échantillons à 800 colonnes a pris 4,70 ms, meilleur de cinq essais, dans un navigateur ordinaire. Le raccourci a pris 0,00 ms. C’est toute l’économie défendue, et elle achète un dessin qui n’est pas celui de votre audio.
Le RMS est une autre question, pas une mauvaise réponse
Il existe une troisième option qui mérite d’être nommée, parce que les outils la mélangent en silence. Le RMS est l’énergie moyenne de la colonne plutôt que son échantillon le plus fort. Pour une sinusoïde, le RMS vaut 0,7071 contre une crête de 1,0000 — une onde en RMS est 29,29 % plus basse qu’une onde en crête du même audio.
Aucune des deux n’est fausse. La crête montre les transitoires ; le RMS suit le volume perçu et paraît plus lisse. Ce qui est faux, c’est de ne pas savoir laquelle vous regardez, ou un outil qui utilise l’une pour l’aperçu et l’autre pour l’export.
Confirmé sur un vrai fichier, après la mise en ligne de l’outil
Les signaux synthétiques prouvent le mécanisme ; un vrai fichier prouve qu’il survit au contact d’un audio réel. Nous avons déposé un extrait de parole de 20 secondes — 960 000 échantillons, mono, 48 kHz — dans le générateur d’image de forme d’onde terminé, et lu les chiffres dans la page elle-même plutôt que dans une réimplémentation.
| Largeur | Crête réelle (tous les échantillons) | Crête trouvée par un échantillon |
|---|---|---|
| 600 px | 0,2964 | 0,2387 |
| 800 px | 0,2964 | 0,2172 |
| 1000 px | 0,2964 | 0,1886 |
| 1200 px | 0,2964 | 0,2387 |
| 1920 px | 0,2964 | 0,2343 |
La crête réelle est de 0,2964 à toutes les largeurs, parce que c’est un fait sur le fichier. La réponse du raccourci erre entre 0,1886 et 0,2387 selon uniquement la largeur demandée pour l’image. Sur le même extrait, 88 des 480 colonnes atteignent la moitié de la crête réelle ; la lecture à un échantillon en trouve 10. Son dessin est 65,42 % plus bas en moyenne.
L’outil dessine votre fichier des deux façons, côte à côte, et affiche ces chiffres pour ce que vous lui donnez — la comparaison est donc quelque chose que vous exécutez, pas quelque chose que vous croyez sur parole.
Questions fréquentes
Est-ce un vrai défaut ou une plainte de puriste ?
C’est un défaut chiffré. Sur une piste de clics synthétique, le raccourci a dessiné 0 frappe sur 360 et renvoyé une colonne la plus haute de 0,0000 pour un audio qui atteint la pleine échelle à répétition. Sur un vrai extrait de parole de 20 secondes, il a annoncé la crête entre 0,1886 et 0,2387 selon uniquement la largeur de l’image, contre une crête réelle de 0,2964. Rien de tout cela n’est affaire de goût.
Pourquoi lirait-on un seul échantillon par colonne ?
Parce que c’est gratuit et que le résultat a l’air correct. Réduire 7 938 000 échantillons proprement a pris 4,70 ms dans un navigateur ; le raccourci a pris 0,00 ms. Et la sortie ressemble toujours à une forme d’onde, donc rien ne proteste — il n’y a ni erreur ni point de comparaison évident.
Cela touche-t-il aussi les fichiers courts ?
Beaucoup moins. Les dégâts augmentent avec le nombre d’échantillons qu’une colonne doit représenter. Un fichier de 10 secondes en 800 px fait 551 échantillons par colonne, un fichier de 10 minutes en fait 33 075. Les extraits courts dessinés larges sont le cas le plus sûr ; les fichiers longs dessinés étroits, le pire.
Et si je fais la moyenne de la colonne ?
La moyenne des échantillons signés est pire que les deux — une onde symétrique tend vers zéro, donc un audio fort se dessine en ligne plate pour une autre raison. La moyenne des valeurs absolues ou le RMS se défendent, mais les deux sont plus bas que la crête par construction : le RMS d’une sinusoïde vaut 0,7071 contre une crête de 1,0000.
Lire chaque échantillon ralentit-il la page ?
Non. 4,70 ms pour un morceau de trois minutes est imperceptible, et cela se produit à chaque redessin, pas en continu. Le coût dominant dans le navigateur est le décodage du fichier compressé en échantillons, que toute approche doit faire de toute façon.
Où puis-je essayer la comparaison sur mon propre audio ?
Le générateur d’image de forme d’onde dessine votre fichier des deux façons sur la même page et indique la crête réelle, la crête trouvée par le raccourci, combien de colonnes chaque méthode montre au-dessus de la moitié de la crête réelle, et de combien le dessin du raccourci est plus bas. Rien n’est envoyé — le décodage et le dessin se font dans votre navigateur.