FLAC, ou Free Lossless Audio Codec é, sem qualquer dúvida, o codec Lossless mais utilizado. Analisaremos de seguida as razões pelas quais isto se verifica.
Para além da obviamente importante qualidade de som, a principal razão que justifica a grande divulgação e utilização do formato FLAC prende-se no facto de ser um formato completamente livre, ou seja, a sua especificação é completamente livre e pode ser usada para qualquer propósito, podendo ser utilizado para distribuição, venda ou streaming de audio sem ser necessário o pagamento de quaisquer taxas ou royalties.
A codificação FLAC reside em 3 etapas [9], descritas de seguida.
Inter-Channel Decorrelation No caso do áudio a comprimir ser sterero, os canais esquerdo e direito são convertido para um canal central (mid) e um lateral (side), através da seguinte formula:
mid = (esq+dir)/2
side = left-right
No entanto, ao contrário do joint stereo no MP3 este é um processo lossless, mas que ainda assim resulta numa compressão significativa relativamente a input de CD audio.
Modeling Nesa fase o processo de codificação tenta gerar uma função aproximada ao sinal de audio a codificar, de forma a que quando se subtrai essa aproximação ao sinal original o resultado, denominado resíduo ou erro, pode ser codificado numa quantidade de bits reduzida. A função aproximada, por sua vez, é transmitida através dos seus parâmetros, de forma a que não seja perdida a compressão obtida com este processo. Esta função aproximada pode ser obtida através da adaptação de uma função polinomial ao sinal, ou através de LPC (General Linear Predictive Coding). A primeira opção é bastante rápida, mas menos precisa que a segunda. Por outro lado o LPC é ajustável, sendo que o tempo necessário para a codificação aumenta directamente com a precisão escolhida para esta técnica.
Residual Coding Após a codificação do sinal é então necessário codificar o erro. Isto é conseguido aproveitando o facto que este sinal de erro tem, geralmente, uma distribuição semelhante à de Laplace e que a codificação de Huffman disponibiliza um tipo especial de códigos, denominados Rice codes, que podem ser utilizados para a codificação rápida destes sinais, sem ser necessário um dicionário.
De seguida serão apresentadas algumas das características técnicas presentes na compressão FLAC [9].
FLAC frames O audio presente num ficheiro FLAC encontra-se dividido em frames, sendo que cada uma destas contém informação suficiente para ser feita sua descodificação. Isto significa que é possível fazer streaming, pesquisa e edição dos ficheiros de uma forma bastante eficiente, uma vez que não é necessário ler os frames antecedentes ou subsequentes aquele que se pretende aceder.
Metadata Num ficheiro FLAC antes dos dados audio existe um espaço reservado a conter informações sobre o ficheiro, como o número de canais, sample rate e dados que auxiliam no processo de descodificação, como o Bit-Rate máximo e mínimo e o tamanho máximo dos blocos. Para além disso permite também guardar informação sobre a cue sheet dos CDs Audio, o que permite fazer uma reconstituição exacta caso o original se perca e, uma vez que se trata de uma estrutura de dados flexível, sendo possível as aplicações gerarem metadados próprios, permite também guardar informações adicionais como capas de álbums e (ainda) mais informações de suporte ao decoding.
Resistência a Erros Devido à sua estrutura de frames, erros de streaming de ficheiros FLAC têm consequências limitadas, uma vez que a cada frame corresponde uma fracção de um segundo de áudio.