FLAC ( / f l æ k / ; Free Lossless Audio Codec ) es un formato de codificación de audio para la compresión sin pérdida 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 por el algoritmo de FLAC normalmente se puede reducir a entre el 50 y el 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 regalías 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 lanzó 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 nombre de 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 IETF. [9]
FLAC es una codificación sin pérdida 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 cuadros, cada uno de los cuales consta de un encabezado, un bloque de datos y una suma de comprobación CRC16 . Cada cuadro se codifica de forma independiente de los demás. Un encabezado de cuadro comienza con una palabra de sincronización , que se utiliza para identificar el comienzo de un cuadro válido. El resto del encabezado contiene el número de muestras, la posición del cuadro, la asignación de canal 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. Las propiedades como la frecuencia de muestreo y la cantidad de canales siempre están contenidas en los metadatos. También pueden contener otra información, como por ejemplo la portada del álbum . [10] FLAC utiliza comentarios Vorbis para metadatos textuales como el título de la canción 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. A continuación, el codificador intenta encontrar una buena aproximación matemática del bloque, ya sea ajustando un polinomio simple o mediante una codificación predictiva lineal general . A continuación, se escribe una descripción de la aproximación, que tiene solo unos pocos bytes de longitud. Finalmente, la diferencia entre la aproximación y la entrada, llamada residuo, se codifica utilizando la codificación Rice . En muchos casos, una descripción de la aproximación y el residuo codificado ocupa menos espacio que utilizando la modulación por código de pulsos . [10]
El proceso de decodificación es el inverso de la codificación. Primero se decodifica el residuo comprimido. [11] [12] Luego se utiliza la descripción de la aproximación matemática para calcular una forma de onda. El resultado se forma sumando el residuo y la forma de onda calculada. [13] [14] Como FLAC comprime sin pérdidas , la forma de onda decodificada es idéntica a la forma de onda antes de la codificación.
Para el 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 intermedio, la suma de los dos canales de entrada. En lugar de un canal intermedio, se puede codificar el canal izquierdo o el canal derecho, lo que a veces es más eficiente en términos de espacio. [15]
Aunque el codificador de referencia utiliza un único tamaño de bloque para todo el flujo, [10] FLAC permite que el tamaño de bloque en muestras varíe por bloque.
La cantidad de compresión se determina mediante diversos 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 valores predeterminados de los parámetros más técnicos del algoritmo de codificación. Los niveles están etiquetados de 0 a 8, y los números más altos dan como resultado una mayor relación de compresión, 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]
El formato FLAC está optimizado para la velocidad de decodificación a expensas de la velocidad de codificación. Un estudio comparativo 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 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 para manipular los metadatos de los 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 el empaquetado eficiente de datos de audio, a diferencia de los algoritmos sin pérdida de propósito 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 en un 10-20%, FLAC puede reducir el tamaño de los datos de audio en un 40-50% aprovechando las características del audio. [ cita requerida ]
La ventaja técnica de FLAC en comparación con otros formatos sin pérdida radica en su capacidad de transmitirse y decodificarse rápidamente, independientemente del nivel de compresión. [ cita requerida ]
Como FLAC es un sistema sin pérdidas, es adecuado como formato de archivo para los propietarios de CD y otros medios que desean conservar sus colecciones de audio. Si los medios originales se pierden, se dañan o se desgastan, una copia FLAC de las pistas de audio garantiza que se pueda recuperar un duplicado exacto de los datos originales en cualquier momento. Una restauración exacta a partir de una copia con pérdida (por ejemplo, MP3 ) de los mismos datos es imposible. El hecho de que FLAC sea sin pérdidas significa que es muy adecuado para la transcodificación, 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 copiar un CD. Si un CD se lee y se copia perfectamente a archivos FLAC, el archivo CUE permite grabar posteriormente un CD de audio que sea idéntico en datos de audio al CD original, incluido el orden de las pistas y el pregap , pero excluyendo datos adicionales como letras y gráficos CD+G . [19] Pero dependiendo del programa de grabación utilizado, el CD-Text se puede recuperar de los metadatos almacenados en la hoja CUE y grabar nuevamente en una nueva copia en un medio CD-R en blanco.
La implementación de referencia de FLAC se implementa como la biblioteca de codificador y decodificador principal libFLAC , y el principal programa distribuible flac
es la implementación de referencia de la API 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, incluyendo la mayoría de los sistemas operativos Unix (como Solaris , BSD ) y similares a Unix (incluido Linux ), 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 parallel y varias interfaces gráficas para poner en marcha varias instancias del codificador.
La compatibilidad con la reproducción de 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 de posventa introdujeron soluciones multimedia que incluyen compatibilidad con FLAC. Entre ellas, se encuentran la serie NEX de Pioneer Electronics y los modelos 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 nativa de FLAC desde la introducción de Windows 10. [22] El sistema operativo Android ha admitido la reproducción nativa de FLAC desde la versión 3.1. [23] [24] macOS High Sierra e iOS 11 agregan soporte de reproducción nativa de FLAC. [25]
Entre otros, el reproductor de música y servicio de streaming Pono utilizó el formato FLAC. [26] [27] Bandcamp insiste en un formato sin pérdida para cargar 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 admitan 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