Bienvenue dans le monde fabuleux du son, de la musique et du numérique. Je sais,
ce genre d'entrée en matière peut paraître bien lourd, mais comme il faut bien
commencer un article par une première phrase, autant qu'elle soit le plus explicite
possible. Après tout, si ce genre de baratin ne vous intéresse pas plus que cela,
vous pouvez vous rendre au chapitre suivant.
Après un petit exposé sur le pourquoi du comment du MPEG audio, nous nous
intéresserons plus particulièrement au MPEG audio sur nos machines à nous,
Falconistes, c'est à dire ... le Falcon.
MPEG
Tout d'abord, de manière générale, qu'est-ce que le standard MPEG ? Le MPEG
(pour Motion Picture Expert Group) est un standard qui a été conçu, si je ne
m'abuse, par l'Institut de standardisation national Américain (ANSI), et qui définit un
certain nombre d'algorithmes de compression et de codage pour tout ce qui
concerne la vidéo animée. Les trois versions de ce standard, du plus abordable
(financièrement et techniquement), le MPEG-1, au plus délirant (mêmes critères)
MPEG-3, en passant par l'efficace MPEG-2, sont utilisées dans différentes
applications. Le MPEG-1 est le format utilisé par les CD-I vidéo, qui commence un
peu à dater actuellement. Il est également utilisé pour de nombreuses applications
dans le domaine du multimédia sur les ordinateurs (un certain nombre de
visualiseurs MPEG-1 est disponible sur Falcon). Le MPEG-2 est le nouveau
standard à la mode, c'est en gros un MPEG-1 avec plein d'extensions. C'est le
standard retenu pour la compression vidéo sur DVD (le Digital Versatile Disc, le
successeur du compact-disc en fait). Enfin, le MPEG-3 n'ayant toujours pas été
finalisé par ses concepteurs, il n'est pas encore vraiment utilisé.
MPEG AUDIO
Nous nous intéresserons exclusivement à la compression MPEG-1, dans sa partie
audio. Le standard MPEG-1 audio est composé de trois types de compression
différents, qui sont : le MPEG-1 audio Layer I, le MPEG-1 audio Layer II, et enfin le
MPEG-1 audio Layer III, le Layer II étant une évolution du Layer I, et le Layer III une
évolution du Layer II. Un rapide descriptif des 3 types s'impose. Les trois types de
compression sont en fait le même, mais le stockage des données s'effectue assez
différemment selon les cas. La compression s'effectue en découpant l'échantillon
sonore en petits morceaux de taille variable selon le type de compression. Ces sous-
échantillons subissent alors une transformée rapide de Fourier (FFT), ce qui n'est
autre qu'une transformation d'une fonction d'intensité en fonction du temps, en
fonction d'intensité en fonction de la fréquence. A partir de là, le but du jeu est de
faire tenir ces blocs de fréquences dans le moins d'espace possible. De
passionnantes recherches scientifiques ont été effectuées, de manière à diminuer la
précision de ces fréquences, voire de les supprimer, en évitant au maximum de
perdre de la qualité à la restitution. En fait, la compression effectuée se sert de
certaines caractéristiques de l'oreille humaine. En effet, un auditeur, dans certains
cas, n'est pas capable d'entendre certaines fréquences, ou les entend si faiblement,
qu'elles en deviennent négligeables, ou peuvent être codées avec peu de précision
sans que l'on ne sente de baisse de qualité. Trois exemples :
si l'intensité d'une fréquence est plus faible que celles des autres, elle sera
difficilement perceptible. On pourra donc réduire la place qu'elle occupera, vu sa
faible importance.
si l'intensité d'une fréquence est plus faible, même légèrement, que celle d'une
fréquence proche, elle sera difficilement perceptible.
Certaines gammes de fréquences sont plus ou moins audibles par l'oreille
humaine, ce qui peut encore permettre une optimisation.
Il est possible de choisir la qualité de compression effectuée, ce qui permet
d'adapter le rapport qualité/gain de place selon les besoins. La qualité s'exprime en
débit : c'est la quantité d'informations stockées par unité de temps, en MPEG il s'agit
du kilobit par seconde (kb/s). Ceci permet de connaître à l'avance la place que
l'échantillon compressé occupera au final.
Le processus de compression fonctionne de la façon suivante :
Découpage de l'échantillon en blocs de taille fixe.
Pour chaque bloc :
Pour chaque bloc, FFT, puis découpage de cette représentation
intensité/fréquence en 32 bandes de fréquence de largeur fixe.
Pour chaque bande, application d'un ® modèle psychoacoustique ¯ qui va
déterminer, selon des algorithmes de calcul assez savants, le nombre de bits qui
vont être utilisés pour coder l'intensité des fréquences appartenant à la bande
concernée.
Quand l'analyse est terminée pour chaque bande, on stocke le bloc compressé,
avec en en-tête un tableau comprenant le nombre de bits occupé par chaque
bande.
MPEG-1 AUDIO Layer I, II et III
Pour les curieux, voici un petit descriptif décrivant les différentes caractéristiques des
3 types de codage entre les modes Layer I, Layer II et Layer III.
Le Layer I est un mode de compression ne requérant pas énormément de puissance
de calcul, bien que sur un Falcon on risque de trouver le temps un peu long, si on
s'amuse à compresser des fichiers audio de ce type. Dans ses caractéristiques, c'est
l'application bête et méchante de l'algorithme que j'ai décrit dans ses grandes lignes
quelques lignes au dessus.
Le Layer II, mis à part quelques différences (de taille (haha, c'est le cas de le dire
(haha, je suis vraiment très fort quand je me mets à sortir des blagues (bon, il
faudrait que je m'y remette à cet article (parce que les lecteurs vont commencer à
s'ennuyer (si je puis dire (bon, je sais j'abuse (donc j'arrête (sage décision))))))))) est
assez similaire au Layer I, mais comprend quelques améliorations non négligeables
par rapport à son ancêtre (diable, je me mets à utiliser le même jargon que les
programmeurs en C++ (a quand la compression sonore orientée objet ?)). Tout
d'abord le codage, qui optimise assez bien la place occupée par le tableau de tailles
des bandes de fréquences. Ensuite, la taille des blocs élémentaires est multipliée
par 2, ce qui augmente le temps de compression, mais diminue pas mal la place
occupée sur disque. Enfin, l'algorithme du modèle psychoacoustique est disponible
en deux versions différentes : le modèle 1 qui est celui du Layer I, mais qui gère des
tailles de blocs différentes, et le modèle 2 qui effectue une analyse beaucoup plus
précise, ce qui permet d'augmenter la qualité de restitution de l'échantillon
compressé, en occupant la même place.
Le Layer III, enfin, ajoute deux étapes supplémentaires à l'algorithme de
compression du Layer II : la première, située entre la décomposition en sous-bandes
et le modèle psychoacoustique, c'est l'application à chaque sous-bande d'un
algorithme appelé MDCT (pour Modified Discrete Cosine Transform). Je ne
détaillerai pas ici le fonctionnement de l'algorithme de MDCT, mais sachez que sa
particularité est de générer une bande de même taille que la sous-bande concernée,
à la particularité près que les plus gros coefficients se trouvent obligatoirement au
début du bloc, et les plus faibles en fin de bloc, ce qui permettra, lors du codage
(deuxième étape supplémentaire), de compresser une fois de plus ces blocs, par un
algorithme de compression tout à fait classique : l'algorithme de Huffman, qui a la
particularité de stocker les octets les plus fréquemment rencontrés sur un nombre
minimal de bits. Et comme, grâce à la MDCT, on obtient très souvent un nombre
important d'octets nuls en fin de bande, la compression est souvent très efficace.
LE MPEG AUDIO SUR FALCON
Il existe un ® player ¯ de fichiers MPEG audio sur Falcon, il s'agit du player MP2 du
groupe NoCrew. Il permet la décompression et la restitution en temps réel d'un
fichier MPEG-1 Layer I ou Layer II, le tout effectué par le DSP, donc demandant très
peu de puissance du CPU ! C'est-y pas beau, ça ? Vous remarquerez que le Layer
III n'est pas géré, car bien qu'il y ait abondance de ce genre de fichiers audio dans
l'univers PC (fichiers .MP3), la décompression demande un grosse puissance de
calcul supplémentaire pour décompresser ces fichiers. Tant pis pour nous. Mais
revenons au player MP2. Celui-ci lit sans broncher les fichiers en mode Layer I et II,
ce qui paraît assez normal, vu la similitude, au niveau de la décompression, entre
ces deux modes. Il permet le rééchantillonnage en temps réel de la fréquence de
l'échantillon (généralement 44,1 kHz) vers une fréquence accessible au système
audio du Falcon, au prix d'une baisse sensible de qualité, et aussi de puissance de
calcul. Le pied absolu est atteint si vous utilisez une horloge externe (style Bclock),
le player n'effectuera pas de rééchantillonnage, ce qui améliorera grandement la
qualité de restitution, tout en permettant de jouer des échantillons de qualité
supérieure. Sur un Falcon de base, il est possible de jouer des MP2 jusqu'à une
qualité de 128 kb/s, avec rééchantillonnage. On peut augmenter la qualité si on
adjoint une horloge externe sur le Falcon. Je n'ai pas pu tester ceci sur mon Falcon,
car mon DSP tourne en permanence à 50 MHz, ce qui fausserait un peu les
calculs... Sur mon Falcon accéléré (DSP à 50 MHz, CPU et BUS à 25), on peut jouer
des échantillons en 192, 224, voire 256 kb/s sans problème. Cependant, la qualité
optimale de restitution ne sera de toutes façons atteinte que grâce à l'horloge
externe.
En ce qui concerne les programmes de compression, il n'en existe à ma
connaissance qu'un seul : il s'agit d'une implémentation en C de l'algorithme de
compression MPEG audio, on peut la trouver à l'adresse ftp suivante :
ftp://ftp.iuma.com/audio_utils/converters/source/mpegaudio.tar.Z
Ce programme permet la compression en MPEG-1 Layer I et II, avec les modèles
psychoacoustiques 1 et 2 du mode Layer II, et avec la possibilité de définir soi-même
le taux de compression. Attention, c'est du C, et une machine équipée d'un
coprocesseur arithmétique est plus qu'indispensable. Les sources sont compilables
avec le compilateur GNU C, fourni en standard avec les distributions de MiNT et
Linux. Niveau temps de calculs, mieux vaut ne pas être pressé, si vous avez un
fichier audio à compresser, profitez de la nuit, ou d'une sortie dans la journée. En
effet, pour compresser une MP2 de 5 minutes, quelque soit la qualité, mon Falcon
25 MHz + Copro 50 MHz m'a quand même occupé pas loin de 12 heures de temps
de calcul ... Pour une autre de 8 minutes, il m'a fallu 20 heures. CQFD. Ceci dit, le
résultat vaut franchement le coup.
Petite astuce, vous avez sûrement dans votre entourage des connaissances qui
possèdent un PC (vous savez, la machine qui plante 266 millions de fois par
seconde)... Dans ce cas, utilisez-le à bon escient (pour une fois !), et faites-lui faire
des compressions audio, au lieu de jouer à pan, boum, t'es mort en réseau, comme
font 99% des utilisateurs de PC... Vous gagnerez un temps certain, et votre Falcon
aussi !