FLAC ( / f l æ k / ; Free Lossless Audio Codec ) — формат аудиокодирования для сжатия цифрового звука без потерь , разработанный фондом Xiph.Org , а также название проекта свободного программного обеспечения, создающего инструменты FLAC, эталонный пакет программного обеспечения, включающий реализацию кодека . Цифровое аудио, сжатое алгоритмом FLAC , обычно может быть уменьшено до 50–70 процентов от его исходного размера [4] и распаковывается в идентичную копию исходных аудиоданных.
FLAC — открытый формат с бесплатным лицензированием и эталонной реализацией , которая является свободным программным обеспечением . FLAC поддерживает теги метаданных , обложки альбомов и быстрый поиск.
Разработка была начата в 2000 году Джошем Коулсоном. Формат битстрима был заморожен с выпуском версии 0.9 эталонной реализации 31 марта 2001 года. Версия 1.0 была выпущена 20 июля 2001 года. [5]
29 января 2003 года фонд Xiph.Org и проект FLAC объявили о включении FLAC под баннер Xiph.org. Xiph.org является домом для других бесплатных форматов сжатия, таких как Vorbis , Theora , Speex и Opus . [5] [6] [7]
Версия 1.3.0 была выпущена 26 мая 2013 года, после чего разработка была перемещена в git-репозиторий Xiph.org. [8]
В 2019 году FLAC был предложен в качестве стандарта IETF. [9]
FLAC — это кодирование данных линейной импульсно-кодовой модуляции без потерь . [10]
Файл FLAC состоит из магического числа fLaC
, метаданных и закодированного звука. [10]
Закодированное аудио делится на кадры, каждый из которых состоит из заголовка, блока данных и контрольной суммы CRC16 . Каждый кадр кодируется независимо друг от друга. Заголовок кадра начинается с синхрослова , используемого для идентификации начала допустимого кадра. Остальная часть заголовка содержит количество выборок, положение кадра, назначение канала и, опционально, частоту выборки и битовую глубину . Блок данных содержит аудиоинформацию. [10]
Метаданные в FLAC предшествуют аудио. Такие свойства, как частота дискретизации и количество каналов, всегда содержатся в метаданных. Они также могут содержать другую информацию, например обложку альбома . [10] FLAC использует комментарии Vorbis для текстовых метаданных, таких как название трека и имя исполнителя.
Алгоритм кодирования FLAC состоит из нескольких этапов. На первом этапе входной звук разделяется на блоки. Если звук содержит несколько каналов , каждый канал кодируется отдельно как подблок. Затем кодер пытается найти хорошую математическую аппроксимацию блока, либо путем подгонки простого полинома , либо с помощью общего линейного предиктивного кодирования . Затем записывается описание аппроксимации, длина которой составляет всего несколько байтов. Наконец, разница между аппроксимацией и входом, называемая остатком, кодируется с помощью кодирования Райса . Во многих случаях описание аппроксимации и закодированного остатка занимает меньше места, чем при использовании импульсно-кодовой модуляции . [10]
Процесс декодирования является обратным процессу кодирования. Сначала декодируется сжатый остаток. [11] [12] Затем описание математической аппроксимации используется для расчета формы волны. Результат формируется путем сложения остатка и рассчитанной формы волны. [13] [14] Поскольку FLAC сжимает без потерь , декодированная форма волны идентична форме волны до кодирования.
Для двухканального стерео кодер может выбрать совместное кодирование звука. Каналы преобразуются в боковой канал, который является разницей между двумя входными каналами, и средний канал, сумма двух входных каналов. Вместо среднего канала может быть закодирован левый или правый канал, что иногда более эффективно с точки зрения пространства. [15]
Несмотря на то, что эталонный кодер использует единый размер блока для всего потока, [10] FLAC допускает изменение размера блока в сэмплах для каждого блока.
Степень сжатия определяется различными параметрами, включая порядок модели линейного предсказания и размер блока. Независимо от степени сжатия исходные данные всегда можно идеально восстановить.
Для удобства пользователя эталонная реализация определяет 9 уровней сжатия, которые являются предустановками более технических параметров алгоритма кодирования. Уровни маркируются от 0 до 8, причем более высокие числа приводят к более высокой степени сжатия за счет скорости сжатия. Значение каждого уровня сжатия варьируется в зависимости от реализации. [16] [17]
FLAC оптимизирован для скорости декодирования за счет скорости кодирования. Тест показал, что, хотя скорость декодирования мало меняется с ростом уровня сжатия, за пределами уровня сжатия по умолчанию 5, процесс кодирования занимает значительно больше времени с небольшой экономией места по сравнению с уровнем 5. [18]
Наряду с форматом проект FLAC также содержит бесплатную и открытую реализацию FLAC под названием libFLAC. libFLAC содержит средства для кодирования и декодирования данных FLAC и для управления метаданными файлов FLAC. libFLAC++, объектно-ориентированная оболочка libFLAC для C++ , а также программы командной строки flac
и metaflac
также являются частью реализации.
Формат FLAC, как и libFLAC, не защищен какими-либо патентами , и любой может свободно писать собственные реализации FLAC.
FLAC специально разработан для эффективной упаковки аудиоданных, в отличие от универсальных алгоритмов сжатия без потерь, таких как DEFLATE , которые используются в ZIP и gzip . В то время как ZIP может уменьшить размер аудиофайла CD-качества на 10–20%, FLAC способен уменьшить размер аудиоданных на 40–50%, используя характеристики аудио. [ необходима цитата ]
Технические преимущества FLAC по сравнению с другими форматами без потерь заключаются в его способности быстро передаваться и декодироваться, независимо от уровня сжатия. [ необходима цитата ]
Так как FLAC — это схема без потерь, он подходит в качестве архивного формата для владельцев компакт-дисков и других носителей, желающих сохранить свои аудиоколлекции. Если исходный носитель утерян, поврежден или изношен, копия аудиодорожек FLAC гарантирует, что точная копия исходных данных может быть восстановлена в любое время. Точное восстановление из копии с потерями (например, MP3 ) тех же данных невозможно. Отсутствие потерь в FLAC означает, что он отлично подходит для перекодирования , например, в MP3, без обычно связанной с этим потери качества перекодирования между одним форматом с потерями и другим. Файл CUE может быть дополнительно создан при копировании компакт-диска. Если компакт-диск считывается и копируется идеально в файлы FLAC, файл CUE позволяет впоследствии записать аудио-CD, который по аудиоданным идентичен исходному компакт-диску, включая порядок дорожек и pregap , но исключая дополнительные данные, такие как тексты песен и графику CD+G . [19] Однако в зависимости от используемой программы записи CD-Text можно восстановить из метаданных, хранящихся в CUE-файле, и записать обратно на новую копию на чистый носитель CD-R.
Эталонная реализация FLAC реализована как библиотека кодировщика и декодера ядра libFLAC , при этом основной распространяемой программой flac
является эталонная реализация API libFLAC. Этот API кодека также доступен на C++ как libFLAC++. Эталонная реализация FLAC компилируется на многих платформах, включая большинство операционных систем Unix (таких как Solaris , BSD ) и Unix-подобных (включая Linux ), Windows , BeOS и OS/2 . Существуют системы сборки для autoconf / automake , MSVC , Watcom C и Xcode . В настоящее время в libFLAC нет поддержки многоядерности , но для запуска нескольких экземпляров кодировщика можно использовать такие утилиты, как GNU parallel и различные графические интерфейсы.
Поддержка воспроизведения FLAC в портативных аудиоустройствах и специализированных аудиосистемах ограничена по сравнению с такими форматами, как MP3 [20] или несжатый PCM . Поддержка FLAC включена по умолчанию в устройствах Windows 10 , Android , BlackBerry 10 и Jolla .
В 2014 году несколько компаний, занимающихся мобильной электроникой, представили мультимедийные решения, включающие поддержку FLAC. К ним относятся серия NEX от Pioneer Electronics и VX404 и NX404 от Clarion.
Европейский вещательный союз (EBU) принял формат FLAC для распространения высококачественного звука через свою сеть Euroradio. [21] Операционная система Windows поддерживает встроенную интеграцию FLAC с момента появления Windows 10. [22] Операционная система Android поддерживает встроенное воспроизведение FLAC с версии 3.1. [23] [24] macOS High Sierra и iOS 11 добавляют встроенную поддержку воспроизведения FLAC. [25]
Среди прочих, музыкальный проигрыватель и потоковый сервис Pono использовали формат FLAC. [26] [27] Bandcamp настаивает на формате без потерь для загрузки и предлагает FLAC в качестве варианта загрузки. [28] Фонд Wikimedia спонсировал бесплатный и открытый исходный код онлайн- инструмента ECMAScript FLAC для браузеров, поддерживающих требуемые функции HTML5 . [29]
Поддерживаются различные другие контейнеры, независимо от используемой операционной системы, в зависимости от используемого программного обеспечения для воспроизведения.
«fLaC», маркер потока FLAC в ASCII, означающий, что байт 0 потока равен 0x66, за которым следует 0x4C 0x61 0x43