FLAC - это аббревиатура от Free Lossless Audio Codec (свободный аудиокодек, сжимающий без потерь). Проект FLAC включает:
- потоковый формат;
- базовые кодеры и декодеры в виде библиотек;
- flac, утилиту командной строки, выполняющую сжатие и распаковку файлов .flac;
- metaflac, утилиту командной строки для редактирования метаданных в файлах .flac;
- плагины для разных плейеров.
"Свобода" означает, что спецификация потокового формата открыта для всех и может быть использована для любых целей (проект FLAC оставляет за собой право устанавливать спецификации и сертифицировать относящиеся к нему продукты на совместимость), а также то, что ни формат, ни один из реализованных методов кодирования/декодирования не запатентованы. Это также значит, что все исходные тексты доступны по лицензиям, обязывающим предоставлять исходные коды.
FLAC компилируется на множестве платформ: Unixes (Linux, *BSD, Solaris, OS X), Windows, BeOS и OS/2. Имеются системы сборки для autoconf/automake, MSVC, Watcom C и Project Builder.
Характеристики FLAC:
- Сжатие без потерь: Кодирование PCM данных не приводит к потере информации, следовательно декодируемый аудиофайл абсолютно идентичен тому, который был подан на вход кодеру. Чтобы определить возможные ошибки при передаче файла, для каждого фрейма вычисляется 16-битная контрольная сумма. Целостность на дальнейшем этапе подтверждается подписью MD5 распакованных данных, которая находится в заголовке и может быть проверена при воспроизведении, декодировании или с помощью тестирования.
- Скорость: Скорость работы при кодировании и декодировании несимметричны. Для декодирования используется только целочисленная арифметика, которая требует значительно меньше вычислений, чем в перцепционных кодеках. Декодирование в реальном времени легко достижимо даже на старых компьютерах.
- Аппаратная поддержка: Благодаря свободной базовой реализации и простому декодированию FLAC является единственным аудиокодеком, сжимающим без потерь, который имеет аппаратную поддержку.
- Поточность: Каждый фрейм FLAC содержит достаточно информации для собственного декодирования. Текущий фрейм FLAC не зависит от предыдущих и последующих. FLAC использует коды синхронизации и контрольные суммы, что позволяет декодеру быстро выбирать позицию в текущем потоке.
- Поиск: FLAC поддерживает быстрый и точный поиск, что полезно не только при воспроизведении, но и дает возможность использовать FLAC в звуковых редакторах.
- Метаданные: FLAC имеет расширяемую систему метаданных. Новые блоки метаданных могут быть определены и реализованы в будущих версиях без потери обратной совместимости. Сейчас определены типы метаданных для таблиц поиска, тегов и списков разметки аудиодисков. Приложение может использовать блок метаданных APPLICATION после регистрации для него ID.
- Архивирование: FLAC удобно использовать для архивации, так как сжатие с его помощью не приводит к потере информации. Если в будущем Вы решите использовать другой формат, данные будут восстановлены из .flac файла в первоначальном виде. Кроме контрольной суммы фрейма и подписи MD5, утилита flac имеет возможность проверки, использование которой приводит к тому, что кодируемый поток сразу же декодируется и сравнивается с исходным. Если происходит ошибка, кодер прекращает работу.
- Архивирование аудиодисков: У FLAC если блок метаданных CUESHEET, в котором сохраняется таблица разметки аудиодиска. Например, можно записать аудиодиск в один файл, а затем импортировать его таблицу разметки при кодировании, чтобы полученный файл имел такое же представление как и диск. Если оригинал аудиодиска будет испорчен, то вы сможете восстановить таблицу разметки, чтобы записать точную копию диска.
- Устойчивость от ошибок: Благодаря разбиению на фреймы, ошибки в потоке локализуются до уровня фрейма, в котором произошла ошибка (обычно несколько сотых секунды). В некоторых кодеках одна ошибка может привести к потере всего остатка потока.
Чего нет во FLAC?
- FLAC не осуществляет сжатие с потерями. Для этого существует много хороших форматов, таких как Vorbis, MPC и mp3 (отличная реализация с открытими исходными текстами LAME).
- FLAC не будет SDMI совместимым и т.п. Перед проектом не стоит цели поддерживать методы защиты, которые на практике лишь увеличивают объем файла. Конечно, мы не сможем препятствовать кому-либо создавать несвободные блоки метаданных, однако, стандартные декодеры все равно будут их пропускать.
Copyright (c) 2000,2001,2002,2003 Josh Coalson