# Free Lossless Audio Codec

Free Lossless Audio Codec (in acronimo FLAC) è un codec audio libero con compressione dati lossless, cioè senza perdita di qualità. A differenza delle codifiche lossy (come l'Ogg Vorbis, l'MP3 o l'AAC) questo tipo di compressione non rimuove informazioni dal flusso audio, risultando quindi adatto sia all'ascolto con lettori di musica digitale, sia all'archiviazione su memorie di massa. Il formato FLAC è attualmente supportato da una buona parte dei software audio.
FLAC è specificamente progettato per comprimere dati audio, diversamente dalla maggior parte degli algoritmi di compressione lossless generici (come ad esempio ZIP e gzip), questo gli permette di raggiungere compressioni importanti, dell'ordine del 30-50% contro il 10-20% raggiunto da quelli tradizionali quando utilizzati per comprimere file audio. In particolare risulta estremamente efficace se usato per archiviare Stems/Spaccati di un progetto musicale (un singolo file per ogni singola traccia che compone il progetto intero). Un progetto medio stems da 30/35 piste per tre minuti di durata può facilmente arrivare a pesare complessivamente oltre 2 GB se campionato in PCM, mentre il medesimo materiale se compresso in FLAC può facilmente stare sotto i 300 MB. Questo avviene perché FLAC, al contrario di come si farebbe in PCM, comprime soprattutto le parti di silenzio presenti nei vari stems a peso zero, impattando enormemente sul peso complessivo finale dell'archivio.

## Storia

Lo sviluppo è iniziato nel 2000 da Josh Coalson. Il formato del flusso dati è stato congelato quando FLAC è entrato in fase beta con il rilascio della versione 0.5 dell'implementazione di riferimento il 15 gennaio 2001. La versione 1.0 è stata pubblicata il 20 luglio 2001.
Il 29 gennaio 2003 Xiphophorus (adesso Xiph.Org Foundation) ha annunciato l'inclusione del FLAC fra i propri progetti, insieme con Ogg Vorbis, Ogg Theora e Speex.
A partire dal mese di dicembre 2008 la prestigiosa casa discografica Deutsche Grammophon, che sin dai primi anni del Novecento pubblica esclusivamente musica classica, ha incominciato a rendere disponibili per il download a pagamento, i propri titoli in formato FLAC.

## Caratteristiche
### Codifica

FLAC supporta solo campioni in virgola fissa (fixed-point), non in virgola mobile. Può gestire dati in PCM con profondità di bit da 4 a 24 bit, qualsiasi frequenza di campionamento da 1 Hz a 65535 Hz (con incrementi di 1 Hz) o da 10 Hz a 655350 Hz (con incrementi di 10 Hz) e un numero di canali da uno a otto.

### Passaggi della codifica

* Suddivisione in blocchi: l'input viene diviso in più parti contigue, anche variabili in grandezza (su questo punto vi sono delle controversie, perché alcuni suggeriscono che anche i blocchi debbano rimanere fissi).
* Compattamento del flusso multicanale: in questo step l'encoder FLAC si occupa di calcolare, nel caso di input stereo e surround, la media dei canali e la loro differenza. Il segnale a qualità migliore viene passato al processo successivo.
* Previsione: partendo dal primo blocco, avviene la previsione di quale possa essere il successivo con degli algoritmi matematici che tentano di ricostruire il segnale. In questo caso, verranno codificati solo i parametri, dato che gli algoritmi matematici devono essere presenti sia sull'encoder sia sul decoder.
* Codifica residua: la codifica residua permette a FLAC di essere effettivamente un codec lossless. Si codifica senza perdita tutta la parte di segnale che si differenzia dalla ricostruzione matematica di predizione, e viene incorporata nel file finale. Il guadagno si ha sul fatto che il segnale residuo, proprio per la scrematura matematica, sarà minore in bytes rispetto al corrispettivo PCM.

### Livelli di compressione

libFLAC, la libreria di codifica e decodifica di riferimento, utilizza un parametro per il livello di compressione che varia da zero (più veloce) a otto (più lento); i file compressi sono però sempre la rappresentazione identica e senza perdita dei dati originali. Sebbene il processo di compressione implichi un compromesso tra velocità e dimensioni, il processo di decodifica non dipende dal livello di compressione ed è sempre relativamente veloce.

### Metadati

* Per il livello di volume, FLAC supporta ReplayGain
* Per i tag, FLAC supporta lo stesso formato del codec Vorbis