FLAC ( / f l æ k / ; Free Lossless Audio Codec ) es un formato de codificación de audio para la compresión sin pérdidas de audio digital , desarrollado por la Fundación Xiph.Org , y también es el nombre del proyecto de software libre que produce las herramientas FLAC, el Paquete de software de referencia que incluye una implementación de códec . El audio digital comprimido mediante el algoritmo FLAC normalmente se puede reducir entre un 50 y un 70 por ciento de su tamaño original [4] y se descomprime en una copia idéntica de los datos de audio originales.
FLAC es un formato abierto con licencia libre de derechos y una implementación de referencia que es software libre . FLAC admite etiquetado de metadatos , carátulas de álbumes y búsqueda rápida.
El desarrollo lo inició Josh Coalson en 2000. El formato bitstream se congeló con el lanzamiento de la versión 0.9 de la implementación de referencia el 31 de marzo de 2001. La versión 1.0 se publicó el 20 de julio de 2001. [5]
El 29 de enero de 2003, la Fundación Xiph.Org y el proyecto FLAC anunciaron la incorporación de FLAC bajo el lema Xiph.org. Xiph.org alberga otros formatos de compresión gratuitos como Vorbis , Theora , Speex y Opus . [5] [6] [7]
La versión 1.3.0 se lanzó el 26 de mayo de 2013, momento en el que el desarrollo se trasladó al repositorio git de Xiph.org. [8]
En 2019, se propuso FLAC como estándar del IETF. [9]
FLAC es una codificación sin pérdidas de datos de modulación de código de pulso lineal . [10]
Un archivo FLAC consta del número mágico fLaC
, metadatos y audio codificado. [10]
El audio codificado se divide en fotogramas, que consta de un encabezado, un bloque de datos y una suma de comprobación CRC16 . Cada cuadro está codificado independientemente uno del otro. El encabezado de un marco comienza con una palabra de sincronización , que se utiliza para identificar el comienzo de un marco válido. El resto del encabezado contiene el número de muestras, la posición del cuadro, la asignación de canales y, opcionalmente, la frecuencia de muestreo y la profundidad de bits . El bloque de datos contiene la información de audio. [10]
Los metadatos en FLAC preceden al audio. Propiedades como la frecuencia de muestreo y el número de canales siempre están contenidas en los metadatos. También puede contener otra información, por ejemplo la portada del álbum . [10] FLAC utiliza comentarios Vorbis para metadatos textuales como el título de la pista y el nombre del artista.
El algoritmo de codificación FLAC consta de varias etapas. En la primera etapa, el audio de entrada se divide en bloques. Si el audio contiene varios canales , cada canal se codifica por separado como un subbloque. Luego, el codificador intenta encontrar una buena aproximación matemática del bloque, ya sea ajustando un polinomio simple o mediante codificación predictiva lineal general . A continuación se escribe una descripción de la aproximación, que tiene sólo unos pocos bytes de longitud. Finalmente, la diferencia entre la aproximación y la entrada, llamada residual, se codifica mediante codificación Rice . En muchos casos, una descripción de la aproximación y el residual codificado ocupa menos espacio que el uso de modulación de código de pulso . [10]
El proceso de decodificación es el inverso de la codificación. Primero se decodifica el residuo comprimido. [11] [12] La descripción de la aproximación matemática se utiliza luego para calcular una forma de onda. El resultado se forma sumando la forma de onda residual y calculada. [13] [14] Como FLAC se comprime sin pérdidas , la forma de onda decodificada es idéntica a la forma de onda antes de la codificación.
Para estéreo de dos canales, el codificador puede optar por codificar conjuntamente el audio. Los canales se transforman en un canal lateral, que es la diferencia entre los dos canales de entrada, y un canal medio, la suma de los dos canales de entrada. En lugar de un canal medio, se puede codificar el canal izquierdo o el canal derecho, lo que a veces ahorra más espacio. [15]
Aunque el codificador de referencia utiliza un tamaño de bloque único para todo el flujo, [10] FLAC permite que el tamaño de bloque en las muestras varíe por bloque.
La cantidad de compresión está determinada por varios parámetros, incluido el orden del modelo de predicción lineal y el tamaño del bloque. Independientemente de la cantidad de compresión, los datos originales siempre se pueden reconstruir perfectamente.
Para comodidad del usuario, la implementación de referencia define 9 niveles de compresión, que son ajustes preestablecidos de los parámetros más técnicos del algoritmo de codificación. Los niveles están etiquetados del 0 al 8, y los números más altos dan como resultado una relación de compresión más alta, a costa de la velocidad de compresión. El significado de cada nivel de compresión varía según la implementación. [16] [17]
FLAC está optimizado para la velocidad de decodificación a expensas de la velocidad de codificación. Un punto de referencia ha demostrado que, si bien hay poca variación en la velocidad de decodificación a medida que aumenta el nivel de compresión, más allá del nivel de compresión predeterminado 5, el proceso de codificación requiere considerablemente más tiempo y se ahorra poco espacio en comparación con el nivel 5. [18]
Además del formato, el proyecto FLAC también contiene una implementación de referencia gratuita y de código abierto de FLAC llamada libFLAC. libFLAC contiene funciones para codificar y decodificar datos FLAC y manipular los metadatos de archivos FLAC. libFLAC++, un contenedor orientado a objetos alrededor de libFLAC para C++ , y los programas de línea de comandos flac
y metaflac
, también son parte de la implementación de referencia.
No se sabe que el formato FLAC, junto con libFLAC, estén cubiertos por ninguna patente , y cualquiera es libre de escribir sus propias implementaciones de FLAC.
FLAC está diseñado específicamente para empaquetar eficientemente datos de audio, a diferencia de los algoritmos sin pérdidas de uso general como DEFLATE , que se utilizan en ZIP y gzip . Mientras que ZIP puede reducir el tamaño de un archivo de audio con calidad de CD entre un 10% y un 20%, FLAC puede reducir el tamaño de los datos de audio entre un 40% y un 50% aprovechando las características del audio.
Los puntos fuertes técnicos de FLAC en comparación con otros formatos sin pérdidas radican en su capacidad para transmitirse y decodificarse rápidamente, independientemente del nivel de compresión.
Dado que FLAC es un esquema sin pérdidas, es adecuado como formato de archivo para propietarios de CD y otros medios que deseen preservar sus colecciones de audio. Si los medios originales se pierden, dañan o desgastan, una copia FLAC de las pistas de audio garantiza que se pueda recuperar un duplicado exacto de los datos originales en cualquier momento. Es imposible una restauración exacta a partir de una copia con pérdidas (por ejemplo, MP3 ) de los mismos datos. El hecho de que FLAC no tenga pérdidas significa que es muy adecuado para transcodificar, por ejemplo, a MP3, sin la pérdida de calidad de transcodificación normalmente asociada entre un formato con pérdida y otro. Opcionalmente, se puede crear un archivo CUE al extraer un CD. Si un CD se lee y se copia perfectamente en archivos FLAC, el archivo CUE permite grabar posteriormente un CD de audio que es idéntico en datos de audio al CD original, incluido el orden de las pistas y el espacio previo , pero excluyendo el texto del CD y otros datos adicionales como letras y gráficos CD+G . [19]
La implementación de referencia de FLAC se implementa como la biblioteca central de codificadores y decodificadores de libFLACflac
, siendo el principal programa distribuible la implementación de referencia de la API de libFLAC. Esta API de códec también está disponible en C++ como libFLAC++. La implementación de referencia de FLAC se compila en muchas plataformas, incluida la mayoría de los sistemas operativos Unix (como Solaris , BSD ) y similares a Unix (incluido Linux ), Microsoft Windows , BeOS y OS/2 . Hay sistemas de compilación para autoconf / automake , MSVC , Watcom C y Xcode . Actualmente no hay soporte multinúcleo en libFLAC, pero se pueden usar utilidades como GNU paralelo y varias interfaces gráficas para activar múltiples instancias del codificador.
La compatibilidad con la reproducción FLAC en dispositivos de audio portátiles y sistemas de audio dedicados es limitada en comparación con formatos como MP3 [20] o PCM sin comprimir . La compatibilidad con FLAC está incluida de forma predeterminada en dispositivos Windows 10 , Android , BlackBerry 10 y Jolla .
En 2014, varias empresas de electrónica móvil del mercado de accesorios introdujeron soluciones multimedia que incluyen soporte para FLAC. Estos incluyen la serie NEX de Pioneer Electronics y los VX404 y NX404 de Clarion.
La Unión Europea de Radiodifusión (UER) ha adoptado el formato FLAC para la distribución de audio de alta calidad a través de su red Euroradio. [21] El sistema operativo Windows ha admitido la integración FLAC nativa desde la introducción de Windows 10. [22] El sistema operativo Android ha admitido la reproducción FLAC nativa desde la versión 3.1. [23] [24] macOS High Sierra e iOS 11 agregan soporte de reproducción FLAC nativo. [25]
Entre otros, el reproductor de música y el servicio de streaming Pono utilizaban el formato FLAC. [26] [27] Bandcamp insiste en un formato sin pérdidas para la carga y tiene FLAC como opción de descarga. [28] La Fundación Wikimedia patrocinó una herramienta ECMAScript FLAC en línea gratuita y de código abierto para navegadores que admiten las funciones HTML5 requeridas . [29]
Se admiten varios otros contenedores, independientemente del sistema operativo utilizado, dependiendo del software de reproducción utilizado.
"fLaC", el marcador de flujo FLAC en ASCII, lo que significa que el byte 0 del flujo es 0x66, seguido de 0x4C 0x61 0x43