Pour les images, j’ai étudié un mécanisme de compression avec perte. Pour le son, l’approche sera différente. Bien que son histoire soit intéressante, je ne parlerai pas du MP3 ni des formats de compression avec perte. Les stratégies sans perte sont aussi intéressantes.
Nous l’avons vu dans un article précédent, selon le théorème de Shannon-Nyquist (SN), 44100 échantillons par seconde sont nécessaires pour obtenir un son réaliste pour notre oreille. Si chaque échantillon pèse 2 octets (ou 16 bits), notre fichier pèsera 88,2 Ko par seconde, 5,292 Mo par minute ou 391,61 Mo pour 74 minutes, soit un CD audio.
En pratique, la quantité de données est à multiplier par 2 pour obtenir un son stéréo. Une piste audio représente donc une quantité de données non négligeable. Il est bien sûr possible de réduire en jouant sur les paramètres de la fréquence d’échantillonnage, le nombre de pistes ou la taille des échantillons.
La voix humaine est située entre 300 Hz et 3400 Hz et personne n’aime quand son interlocuteur lève la voix. 6800 échantillons par seconde pour respecter SN. Une seule piste puisque un micro et un échantillon sur 1 octet (ou 8 bits) et nous divisons par plus de 25 la quantité de données nécessaire.
Cette stratégie ne peut s’appliquer qu’à des applications très particulières (téléphonie IP, logiciels de gestion de réunions, …). Mais si on reste sur des conditions de CD audio, il est nécessaire de trouver une autre stratégie pour compresser sans perte l’information musicale. Nous nous intéresserons donc au format FLAC.
Bien que peu connu, de par son origine, ce format est très utilisé et base son efficace sur 2 stratégies : la prédiction de linéaire et le codage de Rice.
La prédiction linéaire
Cet algorithme repose sur le fait que la parole peut être modélisée par un processus linéaire. Concrètement, lorsque nous parlons, notre voix ne change pas brutalement de fréquence. Il est donc possible de calculer et la variation de l’onde sonore à un instant t en fonction de l’onde sonore à l’instant t-1.
Le calcul de l’onde sonore suivante devient une fonction de l’onde sonore précédente. Transmettre les paramètres de cette fonction prend moins de place que transmettre le détail de l’onde sonore complète. La prédiction linéaire permet donc d’économiser de la place même si le calcul de composition est complexe.
Prenons un fichier audio et découpons-le en trames de 10ms (1/100ème de seconde). Chaque trame pèse 882 octets pour notre son stéréo. L’équation de la prédiction linéaire permet de calculer la trame suivante et est représentée sur moins d’octet. D’où sont intérêt dans la compression de son.
Si vous aimez les détails, voici un lien qui détaille un peu plus le calcul mathématique dans le cas de la téléphonie. Allergiques aux mathématiques, s’abstenir.
Le codage de Rice
En sortie du codage prédictif linéaire, des trames sonores de 100 ms présentent des caractéristiques mathématiques qui peuvent être optimisées par le codage dit de Golomb-Rice ou plus souvent appelé codage de Rice.
Il s’agit d’un codage entropique, comme celui d’Huffman, qui est adapté lorsque les données présentent une distribution géométrique. Un codage entropique code sur moins de bits (et donc d’octets) des valeurs qui apparaissent plus fréquemment. Je ne saurai pas vous détailler l’algorithme. Je vous renvoie donc sur la page Wikipédia.
L’optimisation apportée par le codage de Rice permet de gagner un peu de place.
–
Par ces astuces mathématiques, le gain apporté par le format FLAC est estimé entre 30% et 70%. Cela signifie qu’en moyenne, la taille du fichier audio est divisée par 2. On est loin du MP3 qui permet de diviser par 10 sans trop de perte, mais ici, le signal audio est identique au signal original capturé.
Il existe d’autres algorithmes de compression sans perte, mais le FLAC est un format libre, ouvert et évolutif. Il s’adapte aux changements technologiques et est disponible sur la plupart des équipements informatiques. Il s’impose donc dans de nombreuses applications audio qui vont de l’archivage à la création de contenu.