# FLAC

FLAC és l'acrònim de Free Lossless Audio Codec (en català còdec d'àudio Lliure i Sense Pèrdues), que és com es coneix aquest format contenidor d'informació d'àudio, i també el còdec emprat per a codificar aquesta informació. El fet de ser un còdec sense pèrdues ve donat, ja que la informació sonora que s'emmagatzema dins d'aquest format és comprimida de tal manera que un cop decodificada no afecta per res a la qualitat sonora de l'àudio original. El desenvolupament i creació del FLAC es van dur a terme per Xiphophorus, actualment coneguda com a Xiph.org Foundation; altrament coneguda per projectes com ara el Vorbis, l'Icecast, Theora i d'altres.

## Visió general

Es pot considerar que el FLAC és un còdec d'àudio únic si es tenen en compte alguns aspectes, ja que el fet de ser sense pèrdues no és l'única cosa que el caracteritza; sinó això juntament amb la seva accessibilitat atès que és totalment no-propietari, no relacionat amb patents privades i de codi obert; és a dir, tota la documentació relacionada amb la seva implementació és totalment accessible per a tothom. Cal destacar també que és un format completament gratuït de fer servir. Totes aquestes característiques de facilitat d'accés i lliure distribució és el que està convertint el FLAC en un format atractiu per als desenvolupadors d'aplicacions i també en un dels formats i còdecs d'àudio sense pèrdues més estès i suportat tant per dispositius físics com per aplicacions de programari.

## El projecte FLAC

El projecte d'on va sorgir el FLAC no només inclou el format en si, sinó diverses eines i documentació. Les parts principals que conformen el projecte són aquestes:
* El còdec amb el qual es codifica la informació d'àudio.
* El format contenidor on hi hauran les dades codificades amb FLAC.
* La llibreria libFLAC que defineix la codificació i descodificació de les dades, així com la manera amb què s'inclouen les metadades.Sota llicència BSD.
* El grup de classes libFLAC++ que inclou les definicions de la llibreria libFLAC així com les seves estructures i funcions. Sota llicència BSD.
* El flac, una eina de l'ordre de comandes que serveix com a aplicació per a implementar les llibreries libFLAC, permetent codificar i descodificar la informació. Sota llicència GPL.
* El metaflac, una eina del mateix caire que el flac però que ens permet l'edició de les metadades dels contenidors .flac. Sota llicència GPL.
* Un munt de plug-ins d'entrada per a diversos reproductors i editors de pistes d'àudio (Foobar2000, Winamp, Xmms...).

## Característiques d'interès

S'expliquen algunes de les possibilitats que poden interessar als usuaris finals de FLAC, sobretot en l'àmbit professional i de consum, més que de cara al desenvolupament tècnic.
* sense pèrdues: la codificació que s'aplica no comporta cap pèrdua de qualitat vers la informació que entra al codificador. Per a fer-ho cada trama de dades conté 16 bits de detecció d'errors (CRC). La informació global codificació també fa servir mètodes per assegurar la integritat del tot, incloent un espai per al MD5 (de les dades sense codificar) a la capçalera de l'arxiu per d'aquesta manera comprovar la semblança amb la informació descodificada.
* ràpid: la potència computacional que requereix en procés de descodificació és molt menor a la del procés inversa. Així doncs la descodificació en temps real és molt més fàcil d'aconseguir fet que fa del FLAC una gran tria per a dispositius de maquinari descodificadors, ja que no s'exigeix tanta potència.
* suport de maquinari: hi ha un ample ventall de dispositius i electrònica de consum com ara reproductors portàtils d'àudio o de sobretaula que suporten plenament els arxius codificats amb aquest còdec.
* flexibilitat en les metadades: el sistema que gestiona les metadades al FLAC suporta els tags, l'associació de cobertes d'àlbum, les taules d'indexació del contingut, i llistes cue(cue sheet).
* explorable: l'exploració del contingut és ràpida i arriba fins a nivell de mostra. Aquest fet el fa altament útil per a la seva reproducció fàcil i lleugera però sobretot molt més adient per a tasques d'edició on l'exploració del contingut és molt necessària i freqüent.
* "independència" de trames: les trames FLAC no depenen de les seves anteriors per a poder ser descodificades i reproduïdes. És a dir, cadascuna de les trames en les quals es divideix conté prou informació com per ser descodificada per ella mateixa. Això ho fa apte per a aplicacions en temps real(streaming).
* resistent a l'error: la possibilitat que hi hagi un error és petita però possible; tanmateix; el fet que la informació es divideixi en trames fa que aquest error, que normalment afecta a una fracció de segon o de dimensions no molt majors, fa que aquest error no afecti més que a la trama en si.

## Programari útil

Són inacabables les aplicacions que ens permeten treballar amb el format FLAC, se citen algunes de les més destacades en l'àmbit de la codificació, la descodificació(reproductors). Un fet a destacar és que no només són múltiples les aplicacions sinó que també són compatibles amb tota mena d'arquitectures.

### Linux (altres *NIX, Solaris...)

* Codificació
** Ffmpeg
** Audacity
** VLC
* Descodificació
** Audacious
** Ffmpeg
** Audacity
** Mplayer
** VLC
** Songbird.
** Banshee. Arxivat 2010-06-12 a Wayback Machine.
** Xine.
** XMMS. Arxivat 2005-09-22 a Wayback Machine.
** GnomeBaker.
** Totem.
** MediaPlayerDaemon(mpd).
** Amarok

### Windows

* Codificació
** Easy Media Creator Arxivat 2007-12-21 a Wayback Machine.
** dBPowerAmp Music Converter(necessari plug-in).
** Flac Frontend.
** Easy CD-DA Extractor.
** MediaMonkey.
** OmniEncoder Arxivat 2008-02-09 a Wayback Machine.
* Descodificació
** foobar2000.
** Quintessential Player.
** Renoise.
** Traktor 3. Arxivat 2007-10-30 a Wayback Machine.
** Winamp.
** Sound Normalizer.
** Windows Media Player.

### MAC OS X

* Codificació
** Toast Titanium
** xACT.
** MacFLAC.
* Descodificació
** Flac-Importer
** Cog.
** Play.
** xACT
** MacFLAC.

## Dispositius que el suporten

* Microsoft Xbox Arxivat 2007-12-16 a Wayback Machine.
* Ipod
* iAudio.
* Squeezebox. Arxivat 2007-06-30 a Wayback Machine.
* Trekstor Vibez. Arxivat 2007-12-29 a Wayback Machine.
* Linn Klimax DS. Arxivat 2007-12-24 a Wayback Machine.
* Neuros OSD. Arxivat 2017-10-18 a Wayback Machine.
* Pioneer SC-LX90.
* Meizu M6. Arxivat 2007-12-10 a Wayback Machine.
* Rio Karma. Arxivat 2007-12-12 a Wayback Machine.

## Característiques tècniques

Fins avui i per molt que s'ha intentat no existeix cap algorisme de compressió que sigui capaç de comprimir informació de qualsevol tipus sense que hi hagi pèrdues. És per això que els algorismes de compressió se centren sobretot en un àmbit concret de treball, i és en aquest àmbit on sí és possible una compressió sense pèrdues. En el cas del FLAC i com és de suposar aquest àmbit és la informació d'àudio Això no vol dir que tota entrada d'àudio serà comprimida en una proporció alta; el FLAC és especialment eficient quant a compressió de l'original en determinats tipus d'àudio. Dins de l'àmbit de la informació d'àudio es poden trobar un ample ventall de sub-branques; podem estar tractant àudio de veu a baixa taxa de bits, àudio multicanal a alta taxa de bits… El FLAC aprofita el fet que dins de l'àudio és típic trobar-hi una alta correlació a nivell de mostra. Segons el tipus d'informació que tinguem seran els paràmetres de codificació els que ens permetin obtenir una compressió el més eficient possible.

### Arquitectura de la codificació

Com en la majoria de codificadors d'àudio, el procés de codificació emprant el FLAC passa per diferents fases:
* Blocking
La informació d'entrada és dividida en diversos blocs contigus, la mida d'aquests blocs pot variar, segons les nostres necessitats. No es pot determinar una mida estàndard òptima, ja que depèn de diversos factors. El codificador oficial empra una mida fixa de bloc tot i que val a dir que el FLAC ens permet tenir diferents mides de bloc dins d'un mateix flux o contenidor. La mida del bloc que acabem triant tindrà una repercussió directa sobre el nivell de compressió que obtindrem, d'aquesta manera si la mida és massa petita estarem molt possiblement desaprofitant bits a causa de les capçaleres de les trames, en canvi si ens excedim en la mida dels blocs és molt probable que dins d'aquests el senyal canviï tant que no puguem trobar un predictor efectiu. És per això que el còdec FLAC estableix una mida mínima i màxima de bloc(16 i 65535 respectivament); dins d'aquest marge s'arriba a la mida òptima per a qualsevol tipus de data.
* Interchannel Decorrelation (decorrelació entre canals)
Parlant del cas més habitual i fàcil d'entendre, l'àudio stereo, on hi ha dos canals separats que són dret i esquerre; el codificador podria optar per diverses opcions.
*** Independent: canal dret i esquerre són codificats independentment.
*** Mid-side: es creen dos senyals, un d'ells conté la mitja entre els dos canals i l'altre la diferència vers aquesta mitja (esquerra menys dret).
*** Left-side: el canal esquerre i el canal diferència(dret) seran codificats.
*** Right-side: el canal dret i canal diferència(esquerra) seran codificats.
Habitualment els mètodes més eficients són els dos últims.
* Prediction (Predicció):
En aquesta fase es crea una aproximació matemàtica del senyal, sovint molt més petita que el senyal original. Els mètodes de predicció són coneguts tant pel codificador com pel seu invers posterior, d'aquesta manera dins la trama tan sols caldrà incloure-hi els paràmetres emprats, fet que redueix molt la mida de la informació codificada. Actualment el FLAC fa servir quatre tipus diferents de predictors tot i que en permet d'altres i fins i tot combinacions d'aquests entre diferents blocs.
* Residual Coding (codificació residual):
En el cas que la descripció que ha fet el nostre predictor no sigui fidel a la dinàmica del nostre senyal original, la diferència entre aquestes dues ha de ser codificada de manera precisa, ja que sinó podrien esdevenir-se pèrdues. Com més efectiu sigui el nostre predictor en la seva tasca, menys bits necessitarem per a codificar el nostre error residual. Normalment s'empra un sol mètode per a aquesta tasca, de cara al còdec, però d'igual manera que en els tipus de predictor el format FLAC permet que s'utilitzin altres mètodes addicionals. També comparteix el fet de poder especificar diversos codificadors d'errors residuals en diferents blocs.

### Format del FLAC

La informació dins dels contenidors FLAC es distribueix d'una determinada manera com en qualsevol tipus de format. El format actual reserva un determinat espai buit perquè les futures implementacions puguin emprar el mateix sense haver de ser modificat, adaptant així vells i nous formats. Tots els valors que s'empren dins del format FLAc són del tipus integer (enter), així doncs no trobarem cap nombre quantitzat en coma flotant. La codificació utilitzada és l'arquitectura big-endian i llevat que s'especifiqui, tots els nombres són codificants com a unsigned. Un flux d'informació FLAC conté al principi d'aquest una etiqueta amb el valor "fLaC", seguit d'un bloc de metadades que descriu les característiques més generals de la informació i a continuació una sèrie de blocs més que ens donen informació d'altres tipus. Finalment, després dels blocs de metadades hi trobem les trames d'àudio. Hi ha fins a 128 tipus de blocs de metadades suportats al FLAC dels quals actualment podem trobar:
* STREAMINFO
Aquest és el primer dels blocs de metadades que es troba dins del format. S'hi troba informació sobre les característiques de tot el flux FLAC com la freqüència de mostreig, el nombre de canals, el nombre total de mostres...
* APPLICATION
L'utilitzen aplicacions externes a les oficials del FLAC i especifica què s'ha fet servir per a crear el flux. Cada aplicació té un identificador propi que proporcionen els encarregats de gestionar el FLAC.
* PADDING
La informació que conté aquest bloc no és útil i s'acostuma a omplir amb informació inútil per a poder editar-ne el contingut amb dades útils després. És a dir, es reserva un espai per a poder emplenar-lo posteriorment.
* SEEKTABLE
Ens permet indexar els continguts de les trames per una exploració instantània. Tan sols pot haver-hi una sola taula d'exploració però amb infinits punts dins d'aquesta. No és necessària per a l'exploració de les dades però si que en facilita la tasca i minimitza el retard que podria haver-hi.
* VORBIS_COMMENT
S'hi inclou informació que pot ser llegida per l'usuari. Empra la codificació UTF-8.
* CUESHEET
Especialment útil per a emmagatzemar la informació de les llistes CUE que hi ha incloses als suports CD-DA. D'aquesta manera al passar un CD-DA a FLAC es manté aquests informació.
* PICTURE
Aquest bloc es fa servir per associar normalment cobertes dels discs a les pistes codificades en FLAC.

## Taula comparativa de funcionalitats

Molt sovint un dels factos que més es tenen en compte a l'hora de triar el nostre còdec d'àudio és la compressió que aporta. Tanmateix, depenent de l'aplicació final i considerant els mitjans disponibles, no sempre el més convenient és la màxima compressió. En aquesta taula es demostra perquè el FLAC és una bona tria en molts dels casos, comparant-ne les funcionalitats més destacades amb les mateixes d'altres còdecs d'àudio sense pèrdues. Els que es descriuen a la taula són:
* WavPack
* ALAC
* FLAC
* Monkey's
* OptimFROG
* Shorten Arxivat 2007-12-21 a Wayback Machine.
| Còdec | Cod | Decod | Comp | Flexibilitat | Robust error | Exp | Tagging | Dispositius | Programari | Híbrid/Amb pèrdues | Streaming | Codi Obert | Multi- canal | Alta resolució | SO |
| Wavpack | Molt ràpid | Molt ràpid | 58% | Molt bona | Si | Si | ID3/APE | Limitat | Bo | Si | Si | Si | Si | Si | Tots |
| ALAC | Mitjana | Ràpid | 58,5% | Dolenta | No | Si | QT tags | Bo | Dolent | No | Si | Si(descodif) | Si | Si | Win/MAC |
| FLAC | Ràpid | Molt ràpid | 58,7% | Molt bona | Si | Si | VorbisTag | Molt bo | Molt bo | No | Si | Si | Si | Si | Tots |
| Monkey's | Ràpid | Mitjà | 55,5% | Molt bona | No | Si | ID3/APE | Limitat | Bo | No | No | Si | No | Si | Tots |
| OptimFROG | Lent | Mitjà | 54,7% | Molt bona | Si | Si | ID3/APE | No | Poc | Si | Si | No | No | Si | Win/Mac /Linux |
| Shorten | Molt Ràpid | Molt Ràpid | 63,5% | Dolent | No | Si | No | Limitat | Molt bo | No | No | Si | No | No | Tots |
* % Compressió quant més baix més comprimeix
* Codificació i decod: velocitats que triga en fer-ho.
* Dispositius i Programari: suport en els dos camps
* Exp.: contingut de la trama explorable a nivell de mostra

## Enllaços externs

* FLAC - Lloc web oficial
* Web oficial de Xiph.org Foundation
* Comparatives de còdecs d'àudio sense pèrdues Arxivat 2010-11-25 a Wayback Machine.
* Comparativa d'HydrogenAudio
* Comparativa quant a compressió i velocitat de diversos còdecs sense pèrdues Arxivat 2009-07-03 a Wayback Machine.