FLAC
Материал из Википедии — свободной энциклопедии
Cвободный аудиокодек без потерь | |
Тип | Аудиокодек, Формат аудиофайлов |
Разработчик | Xiph.Org Foundation |
ОС | Кросплатформенный |
Текущая версия | 1.2.1 — 17 сентября 2007 |
Лицензия | GNU GPL; BSD (Parts) |
Сайт | flac.sourceforge.net |
FLAC (англ. Free Lossless Audio Codec — свободный аудиокодек без потерь) — популярный свободный кодек для сжатия аудио. В отличие от кодеков с потерями Ogg Vorbis, MP3 и AAC, не удаляет никакой информации из аудиопотока и подходит как для прослушивания музыки на высокачественной звуковоспроизводящей аппаратуре, так и для архивирования аудиоколлекции. На сегодня формат FLAC поддерживается многими аудиоприложениями.
Содержание |
[править] Сведения о формате
[править] Аудиопоток
Основными частями потока являются:
- Строка из четырёх байтов "fLaC"
- Блок метаданных STREAMINFO
- Другие необязательные блоки метаданных
- Аудио фреймы
Первые четыре байта идентифицируют поток FLAC. Следующие за ними метаданные содержат информацию о потоке, затем идут сжатые аудиоданные.
[править] Метаданные
FLAC определяет несколько типов блоков метаданных (все они перечислены на странице формата). Блоки метаданных могут быть любого размера, новые блоки могут быть легко добавлены. Декодер имеет возможность пропускать неизвеcтные ему блоки метаданных. Обязателен только блок STREAMINFO. В нём содержится частота дискретизации, количество каналов и т.п., а также данные позволяющие декодеру настроить буферы. Сюда также записывается подпись MD5 несжатых аудиоданных. Это полезно для проверки всего потока после его передачи.
Другие блоки предназначены для резервирования места, хранения таблиц точек поиска, тегов, список разметки аудиодисков, а также данных для конкретных приложений. Опции для добавления блоков PADDING или точек поиска приведены ниже. FLAC не нуждается в точках поиска, однако они позволяют значительно увеличить скорость доступа, а также могут быть использования для расстановки меток в аудио редакторах.
[править] Аудиоданные
За метаданными следуют сжатые аудиоданные. Метаданные и аудиоданные не чередуются. Как и большинство кодеков FLAC делит входной поток на блоки и кодирует их независимо друг от друга. Блок упаковыватся во фрейм и добавляется к потоку. Базовый кодер использует блоки постоянного размера для всего потока, однако формат предусматривает наличие блоков разной длины в потоке.
[править] Разбиение на блоки
Размер блока — очень важный параметр для кодирования. Если он очень мал, то в потоке будет слишком много заголовков фреймов, что уменьшит уровень сжатия. Если размер большой, то кодер не сможет подобрать эффективную модель сжатия. Понимание процесса моделирования поможет Вам увеличить уровень сжатия для некоторых типов входных данных. Обычно при использовании линейного прогнозирования на аудиоданных с частотой дискретизации 44.1 кГц оптимальный размер блока лежит в диапазоне 2-6 тысяч сэмплов.
[править] Межканальная декорреляция
Если на вход поступают стерео аудиоданные, они могут пройти через стадию межканальной декорреляции. Правый и левый канал преобразуются к среднему и разностному по формулам: средний = (левый + правый)/2, разностный = левый - правый. В отличие от joint stereo этот процесс не приводит к потерям. Для данных с аудио компакт-дисков это обычно приводит к значительному увеличению уровня сжатия.
[править] Моделирование
На следующем этапе кодер пытается аппроксимировать сигнал такой функцией, чтобы полученный после её вычитания из оригинала результат (называемый разностью, остатком, ошибкой) можно было закодировать минимальным количеством битов. Параметры функций тоже должны записываться, поэтому они не должны занимать много места. FLAC использует два метода формирования аппроксимаций:
- подгонка простого полинома к сигналу
- общее кодирование с линейными предикторами (LPC).
Во-первых, постоянное полиномиальное предсказание (-l 0) работает значительно быстрее, но менее точно, чем LPC. Чем выше порядок LPC, тем медленнее, но лучше будет модель. Однако с увеличением порядка выигрыш будет все менее значительным. В некоторой точке (обычно около 9) процедура кодера, определяющая наилучший порядок, начинает ошибаться и размер получаемых фреймов возрастает. Чтобы преодолеть это, можно использовать полный перебор, что приведет к значительному увеличению времени кодирования.
Во-вторых, параметры для постоянных предикторов могут быть описаны тремя битами, а параметры для модели LPC зависят от количества бит на сэмпл и порядка LPC. Это значит, что размер заголовка фрейма зависит от выбранного метода и порядка и может повлиять на оптимальный размер блока.
[править] Остаточное кодирование
Когда модель подобрана, кодер вычитает приближение из оригинала, чтобы получить остаточный (ошибочный) сигнал, который затем кодируется без потерь. Для этого используется то обстоятельство, что разностный сигнал обычно имеет распределение Лапласа и есть набор специальных кодов Хаффмана, называемый кодами Райса, позволяющий эффективно и быстро кодировать эти сигналы без использования словаря.
Кодирование Райса состоит из нахождения одного параметра, отвечающего распределению сигнала, а затем использования его для составления кодов. При изменении распределения меняется и оптимальный параметр, поэтому имеется метод позволяющий пересчитывать его по необходимости. Остаток может быть разбит на контексты или разделы, у каждого из которых будет свой параметр Райса. flac позволяет указать, как нужно производить разбиение. Остаток может быть разбит на 2^n раздела.
[править] Составление фреймов
Аудиофрейму предшествует заголовок, который начинается с кода синхронизации и содержит минимум информации, необходимой декодеру для воспроизведения потока. Сюда также записывается номер блока или сэмпла и восьмибитная контрольная сумма самого заголовка. Код синхронизации, CRC заголовка фрейма и номер блока/сэмпла позволяют осуществлять пересинхронизацию и поиск даже в отсутствие точек поиска. В конце фрейма записывается его шестнадцатибитная контрольная сумма. Если базовый декодер обнаружит ошибку, будет сгенерирован блок тишины.
[править] Разное
Чтобы поддерживать основные типы метаданных, базовый декодер умеет пропускать теги ID3V1 и ID3V2, поэтому их можно свободно добавлять. Теги ID3V2 должны располагаться перед маркером "fLaC", а теги ID3V1 - в конце файла.
Существуют модификации FLAC кодера: Improved FLAC encoder и Flake.
29 января 2003 г. Xiphophorus (сейчас называется Xiph.Org Foundation) анонсировали включение формата FLAC в линейку своих продуктов, таких, как Ogg Vorbis, Theora и Speex.
Аппаратно поддерживается во многих устройствах. Среди них:
- Rio Karma
- iPod (Video, Nano, Photo, Color, Mini (2nd generation)), iRiver, Gigabeat (Toshiba) (через прошивку RockBox)
- iAudio (Cowon)
- и другие (полный список доступен на странице FLAC)
[править] См. также
[править] Ссылки
- Официальная страница проекта FLAC на SourceForge.net
- Подробное описание формата FLAC на русском языке — новости, файлы, характеристики, цели, формат, id, сравнение, разработка, документация, ссылки, авторы.
- Подробное описание формата FLAC на английском языке — то же, но по-английски
- XiphQT — поддержка FLAC в Quicktime