Free Lossless Audio Codec

codec libre de compression audio sans perte

Free Lossless Audio Codec (FLAC) est un codec libre de compression audio sans perte. À l’inverse de codecs tels que MQA, AAC, MP3 ou Vorbis, il n’enlève aucune information du flux audio.

Free Lossless Audio Codec
Description de l'image FLAC logo.svg.
Description de l'image FLAC 1.3.3 screenshot.png.
Informations
Développé par Xiph.orgVoir et modifier les données sur Wikidata
Dernière version 1.3.4 ()[1]Voir et modifier les données sur Wikidata
Dépôt gitlab.xiph.org/xiph/flacVoir et modifier les données sur Wikidata
Écrit en CVoir et modifier les données sur Wikidata
Système d'exploitation MultiplateformeVoir et modifier les données sur Wikidata
Formats lus Native FLAC (d)Voir et modifier les données sur Wikidata
Formats écrits Native FLAC (d)Voir et modifier les données sur Wikidata
Type Codec audio (en)Voir et modifier les données sur Wikidata
Licence BSD 3-clauses (d), licence publique générale GNU version 2 et licence publique générale limitée GNU version 2.0 (d)Voir et modifier les données sur Wikidata
Site web xiph.org/flacVoir et modifier les données sur Wikidata

FLAC
Free Lossless Audio Codec
Caractéristiques
Extensions
.flac, .oga, .flaVoir et modifier les données sur Wikidata
Type MIME
audio/x-flac, audio/flac, audio/x-oggVoir et modifier les données sur Wikidata
PUID
Signatures
66 4C 61 43 00 00 00 22 (hexa)
66 4C 61 43 (hexa)Voir et modifier les données sur Wikidata
Développé par
Type de format
Spécification

Cette qualité maximale a pour conséquence une quantité d'information plus élevée, qui tout en étant assez variable se trouve en moyenne être de l'ordre de 50 % de la taille du même fichier non compressé au format PCM[2].

Un format ouvert et sans perteModifier

Comme d’autres méthodes de compression, le FLAC a pour principal avantage de réduire le débit ou la capacité de stockage nécessaire, sans perdre d’informations de la source audio (en anglais, lossless signifie « sans perte »). Les sources audio peuvent être codées en FLAC pour permettre une réduction de taille de 30 à 70 %[3]. La réduction de taille est dépendante de la source : plus le signal est constitué d’ondes régulières (sons naturels), meilleure est la compression. Par contre, un signal aléatoire (bruit) ne se compresse pas très bien. Ce phénomène se constate pour tous les formats de compression sans perte.[réf. souhaitée]

FLAC est approprié pour tous les archivages de données audio, avec le support des métadonnées, image de couverture, ainsi que pour la recherche rapide. FLAC est un format ouvert ; ne nécessitant pas le paiement de redevances, il est bien supporté par de nombreux logiciels. Le support de la restitution de FLAC sur les appareils audio portables, et les systèmes audio dédiés est limité mais en progrès[4]. Josh Coalson est le premier auteur de FLAC.

HistoriqueModifier

Le développement de FLAC a commencé en 2000 par Josh Coalson. La version 1.0 sorti le 20 juillet 2001.

Le , Xiphophorus (appelée, en 2004, Xiph.org) annonce l’incorporation de FLAC sous la bannière de Xiph.org, rejoignant ainsi le conteneur Ogg et les codecs Vorbis, Theora et Speex.

La fondation "Xiph.org" est une organisation à but non lucratif qui s'oppose au mouvement de privatisation dans le domaine des formats de données multimédia en développant des logiciels libres et des algorithmes de compression multimédia libres de brevet. Elle a été fondée en 1994 par Chris Montgomery, également inventeur du format conteneur Ogg. En fait, au début, le format FLAC était un projet libre d’un groupe de développeurs indépendants jusqu’à être pris sous l’aile de "Xiph.org".

L'Union européenne de radio-télévision (UER) a choisi le format FLAC pour son réseau Euroradio, pour la distribution audio de haute qualité[5].

Android supporte nativement le FLAC depuis sa version 3.1[6].

Sous Windows 10, le lecteur Windows Media supporte le FLAC[7].

En janvier 2017, les navigateurs web Firefox 51 et Google Chrome 46 gèrent nativement le FLAC[8].

Depuis juin 2017, la version 11 de iOS supporte nativement le FLAC[9].

ProjetModifier

Le projet FLAC est constitué de plusieurs éléments :

  • le format de flux ;
  • un format conteneur appelé Native FLAC ;
  • libFLAC, une bibliothèque de codage et décodage ainsi qu’une interface aux métadonnées ;
  • libFLAC++, un accès objet à libFLAC ;
  • flac, un accès en ligne de commande à libFLAC pour coder et décoder des fichiers .flac ;
  • metaflac, un éditeur en ligne de commande pour les fichiers .flac ;
  • des plugins d’entrée pour plusieurs lecteurs musicaux populaires (Winamp, XMMS…) ;
  • avec l’inclusion dans le projet Xiph.org, le conteneur Ogg, adapté pour le streaming (l’ensemble est appelé Ogg FLAC).

Les spécifications du format de flux sont dans le domaine public (le projet FLAC se réserve les droits quant aux spécifications et à la certification de compatibilité). Le projet s’attache aussi à ce qu’aucun brevet ne couvre le format ou les méthodes de codage/décodage. Les bibliothèques libFLAC et libFLAC++ sont disponibles sous licence BSD, les sources de flac, metaflac et des plugins sont sous licence GPL.

ComparaisonsModifier

FLAC se distingue d’algorithmes sans perte (tels que ZIP et gzip) en ce qu’il a été créé spécifiquement pour compresser des données audio. La méthode ZIP réduit la taille d’un fichier audio de qualité CD de 20 à 40 %, alors que FLAC obtient des taux de 30 à 70 %[3]. Si des codecs à perte comme le MP3 et le Vorbis peuvent atteindre des ratios de 80-90 %, voire plus, ils le font en éliminant des données du flux originel.

Le FLAC utilise la prédiction linéaire pour convertir les échantillons en une série de blocs non-corrélés d’environ 100 ms (connus sous le nom de résidus), qui sont stockés efficacement en utilisant le codage de Golomb-Rice. Il utilise aussi le codage par plages pour les blocs d’échantillons identiques, tels les passages blancs. Ceci lui permet d’être décompressé à la volée durant la lecture, y compris par un système autonome équipé de peu de mémoire (platine CD, lecteur portable à disque dur ou mémoire Flash, lecteur autonome à disque dur pour chaîne hi-fi ou voiture).

Étant un codec sans perte, le FLAC est très utilisé comme format d’archivage[10] : si le support original est perdu, endommagé ou usé, une copie en FLAC des pistes audio garantit qu’une copie exacte des données originales peut être récupérée à tout moment. Un fichier Cue sheet (CUE) peut éventuellement être créé quand on rippe un CD. Si le CD est lu et rippé parfaitement en fichier FLAC, le fichier CUE permet de graver plus tard un CD audio qui est la réplique exacte de celui d’origine, en incluant l’ordre des pistes, prégaps, et CD-Text. Pourtant certaines données seront tout de même perdues, comme les informations de paroles ou encore les graphiques d’un CD+G, ces données n'étant pas incluses dans le fichier CUE, elles ne seront pas archivées.

FLAC est disponible pour pratiquement tous les systèmes d’exploitation.

Description techniqueModifier

Structure d'un flux FLACModifier

Un flux FLAC commence toujours par la séquence magique fLaC, suivie de blocs de métadonnées décrivant le flux à la suite desquels s'ajoutent des trames contenant les données audio en en tant que telles[11].

Le premier bloc de métadonnées est obligatoire et donne des informations utiles au décodage du flux : la taille des blocs audio, la taille des trames audio, la fréquence d'échantillonnage, le nombre de canaux, le nombre total d'échantillons dans le fichier, ainsi que des informations permettant la détection d'erreur[11]. Les autres blocs de métadonnées sont optionnels et permettent de stocker des informations supplémentaires telles qu'une image, une description de la piste sous forme de commentaires Vorbis, ou des indications de positions facilitant la navigation rapide au sein du flux[11].

Chaque trame audio commence par un en-tête décrivant la trame en donnant sa taille, la fréquence d’échantillonnage, le nombre de canaux, la taille d'un échantillon en bits, ainsi que des informations permettant la détection d'erreur[11]. L'en-tête est suivi par des sous-trames, une par canal, chacune contenant les paramètres utilisés pour la compression, suivis des données compressées[11].

Méthode d'encodageModifier

FLAC utilise une méthode d'encodage sans perte combinant un codage prédictif linéaire (en) et un codage de Rice[11].

Le codage prédictif linéaire est une méthode de compression avec perte. Il consiste à prédire la valeur approximative du signal à l'aide d'une suite récurrente linéaire utilisant seulement un petit nombre de paramètres pour être définie et initialisée. FLAC permet l'utilisation de cinq prédicteurs prédéfinis d'ordre 0 à 4, ou bien l'utilisation d'un prédicteur spécifique défini par au plus 32 coefficients[11].

Le codage de Rice complète l'encodage prédictif linéaire en permettant l'encodage sans perte du résidu, c'est-à-dire de la différence entre le signal à compresser et la prédiction, de sorte que l'encodage de FLAC est globalement sans perte. FLAC admet un paramètre pour le codage de Rice compris entre 0 et 30[11].

Gestion de multiples canauxModifier

Un flux FLAC est capable de gérer de 1 à 8 canaux distincts[11], ce qui permet de stocker des flux mono, stéréo ou plus complexes, par exemple 2.1 ou 5.1.

Pour les flux stéréo, FLAC offre la possibilité de décorréler les deux canaux en stockant une combinaison des canaux plutôt que les canaux bruts, ce qui peut améliorer la compression de certains flux[11]. Le choix du mode de combinaison des deux canaux est fait trame par trame.[11]

Fréquence et profondeur d’échantillonnageModifier

FLAC permet d'utiliser une large gamme de fréquences d’échantillonnage. La fréquence d'échantillonnage peut être stockée dans l'en-tête STREAMINFO, ce qui permet de spécifier n’importe quelle fréquence de 1 Hz à 1 048 570 Hz avec des incréments de 1 Hz[11]. Pour une utilisation en streaming, il faut nécessairement spécifier la fréquence d'échantillonnage dans les en-têtes de trame et la plage de fréquences utilisables est alors réduite[11]. Notamment, la fréquence maximale est alors de 655 360 Hz[11].

FLAC peut encoder les données avec une profondeur d’échantillonnage de 4 à 32 bits par échantillon. Lorsque cette valeur est précisée dans l'en-tête STREAMINFO, la totalité de la plage est utilisable. Pour une utilisation en streaming, la profondeur d'échantillonnage est spécifiée dans l'en-tête de trame et les possibilités sont alors réduites[11] à 8, 12, 16, 20 ou 24 bits.

Détection d'erreurModifier

FLAC incorpore différentes mesures permettant la détection d'erreur dans le flux audio.

L'en-tête STREAMINFO contient une empreinte MD5 des données PCM brutes permettant de vérifier au décodage l'intégrité des données, même si l'introduction d'une erreur n'a pas rendu le flux invalide[11].

Chaque trame audio utilise des CRC pour la détection d'erreur. Un CRC-8 permet la vérification de l'intégrité de l'en-tête de la trame, tandis qu'un CRC-16 est utilisé pour vérifier l'intégrité de la trame dans son ensemble, en-tête et données audio compris.[11] Ces CRC permettent des vérifications d'intégrité dans le cas d'une utilisation en streaming.

Détails techniquesModifier

Le FLAC ne supporte que l’échantillonnage à virgule fixe. Ceci évite l’imprécision inhérente à l’arithmétique à virgule flottante afin d’assurer que le codage soit effectivement sans perte.

FLAC prend aussi en charge le ReplayGain (en).

Pour les métadonnées, FLAC utilise le même système que les métadonnées du format Vorbis, mais il peut en plus inclure des métadonnées au format ID3[12].

ImplémentationModifier

Implémentation de référenceModifier

FLAC est mis en œuvre dans libFLAC, la bibliothèque de référence pour coder et décoder des flux FLAC. Le programme flac (utilisable en ligne de commande), est le programme de référence qui utilise l’API libFLAC. Une version C++ est aussi disponible sous le nom de libFLAC++.

L’implantation de référence de FLAC peut être compilée sur de nombreuses plates-formes, incluant la plupart des systèmes d’exploitation Unix (tels que Linux, * BSD, Solaris et Mac OS X), Windows, BeOS, et OS/2.

L'API de libFLAC est organisée autour de flux, flux séparables et fichiers pour permettre d’améliorer l’abstraction du flux binaire de base de FLAC. La plupart des applications FLAC se limiteront à l’utilisation du codage/décodage en utilisant libFLAC à leur niveau.

Autres implémentationsModifier

FLAC est également implémenté dans libavcodec de manière totalement indépendante de libFLAC[13].

Notes et référencesModifier

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Free Lossless Audio Codec » (voir la liste des auteurs).
  1. « FLAC 1.3.4 (20-Feb-2022) »
  2. (en) FLAC Website : codec comparison
  3. a et b TIPE : Les mathématiques derrière la compression du son [PDF]
  4. (en) FLAC Website.
  5. Marc, « Le MP3HD : la nouveauté MP3 de Thomson et Fraunhofer », sur www.homecinema-hifi.com, (consulté le )
  6. « Android Supported Media Formats », sur developer.android.com (consulté le )
  7. « Codecs pris en charge », sur msdn.microsoft.com (consulté le )
  8. « Janvier 2017 : support natif du FLAC par Firefox 51 et Chrome 46 », (consulté le )
  9. « iOS 11 intègre nativement le décodage des fichiers audio Flac », sur www.lesnumeriques.com (consulté le )
  10. « ADONIS/SIAF/CINES-GM - 0.4 », sur Archives de France (consulté le ) : « FLAC est très utilisé comme format d'archivage (compression sans perte) », p. 68.
  11. a b c d e f g h i j k l m n o p et q https://xiph.org/flac/format.html
  12. http://flac.sourceforge.net/faq.html
  13. (en) Martijn van Beurden et Andrew Weaver, « Free Lossless Audio Codec » (Internet-Draft) (consulté le ), p. 40

AnnexesModifier

Sur les autres projets Wikimedia :

Articles connexesModifier

Liens externesModifier