FLAC

Поделись знанием:
Перейти к: навигация, поиск
Free Lossless Audio Codec
Тип

Аудио кодек, формат аудиофайлов

Разработчик

Xiph.Org Foundation

Операционная система

Кросплатформенный

Первый выпуск

20 июля 2001

Последняя версия

1.3.1 (27 ноября 2014)

Лицензия

GNU GPL; BSD (Parts)

Сайт

[flac.sourceforge.net urceforge.net]

К:Википедия:Статьи без изображений (тип: не указан)К:Программное обеспечение, разработанное в 2001 году
FLAC

Тип формата

Аудио

Стандарт(ы)

[flac.sourceforge.net/format.html Спецификация]

FLAC (англ. Free Lossless Audio Codec) — популярный свободный кодек, предназначенный для сжатия аудиоданных без потерь.

В отличие от аудиокодеков, обеспечивающих сжатие с потерями (MP3, AAC, WMA, Ogg Vorbis), FLAC, как и любой другой lossless-кодек, не удаляет никакой информации из аудиопотока и подходит как для прослушивания музыки на высококачественной звуковоспроизводящей аппаратуре, так и для архивирования аудиоколлекции.

Сегодня формат FLAC поддерживается множеством аудиоприложений, портативных аудиоплееров и специализированных аудиосистем и имеет большое число разнообразных аппаратных реализаций[1]





Сведения о формате

Аудиопоток

Основными частями потока являются:

  • Строка из четырёх байтов «fLaC»
  • Блок метаданных STREAMINFO
  • Другие необязательные блоки метаданных
  • Аудиофреймы

Первые четыре байта идентифицируют поток FLAC. Следующие за ними метаданные содержат информацию о потоке, затем идут сжатые аудиоданные.

Метаданные

По состоянию на 10.03.2010 в libflac-1.2.1 определены следующие типы блоков: StreamInfo, Padding, Application, SeekTable, VorbisComment, CueSheet, Picture, Unknown. Блоки метаданных могут быть любого размера, не представляет большого труда добавление новых блоков. Неизвестные блоки метаданных декодер пропускает.

Блок STREAMINFO — обязательный. В нём содержатся данные, позволяющие декодеру настроить буфера, частоту дискретизации, количество каналов, количество бит на семпл и количество семплов. Также в блок записывается подпись MD5 несжатых аудиоданных. Это полезно для проверки всего потока после его передачи.

Другие блоки предназначены для резервирования места, хранения таблиц точек поиска, тегов, список разметки аудиодисков, а также данных для конкретных приложений. Опции для добавления блоков PADDING или точек поиска приведены ниже. FLAC не нуждается в точках поиска, однако они позволяют значительно увеличить скорость доступа, а также могут быть использованы для расстановки меток в аудиоредакторах.

Точное описание структур стандартных блоков можно найти в файле format.h библиотеки libflac, доступной на сайте формата.

Аудиоданные

За метаданными следуют сжатые аудиоданные. Метаданные и аудиоданные не чередуются. Как и большинство кодеков, FLAC делит входной поток на блоки и кодирует их независимо друг от друга. Блок упаковывается во фрейм и добавляется к потоку. Базовый кодер использует блоки постоянного размера для всего потока, однако формат предусматривает наличие блоков разной длины в потоке.

Разбиение на блоки

Размер блока — очень важный параметр для кодирования. Если он слишком мал, то в потоке будет чересчур много заголовков фреймов, что уменьшит уровень сжатия. Если же размер большой, то кодер не сможет подобрать эффективную модель сжатия. Понимание процесса моделирования поможет вам увеличить уровень сжатия для некоторых типов входных данных. Обычно при использовании линейного прогнозирования на аудиоданных с частотой дискретизации 44,1 кГц оптимальный размер блока лежит в диапазоне 2-6 тыс. семплов.

Межканальная декорреляция

Если на вход поступают стереоаудиоданные, они могут пройти через стадию межканальной декорреляции. Правый и левый канал преобразуются к среднему и разностному по формулам: средний = (левый + правый)/2, разностный = левый — правый. В отличие от joint stereo, используемом в lossy-кодерах, в lossless-кодировании этот процесс не приводит к потерям. Для данных с аудиодисков это обычно приводит к значительному увеличению уровня сжатия.

Моделирование

На следующем этапе кодер пытается аппроксимировать сигнал такой функцией, чтобы полученный после её вычитания из оригинала результат (называемый разностью, остатком, ошибкой) можно было закодировать минимальным количеством битов. Параметры функций тоже должны записываться, поэтому они не должны занимать много места. FLAC использует два метода формирования аппроксимаций:

  • подгонка простого полинома к сигналу
  • общее кодирование с линейными предикторами (LPC).

Во-первых, постоянное полиномиальное предсказание (-l 0) работает значительно быстрее, но менее точно, чем LPC. Чем выше порядок LPC, тем медленнее, но лучше будет модель. Однако с увеличением порядка выигрыш будет всё менее значительным. В некоторой точке (обычно около 9) процедура кодера, определяющая наилучший порядок, начинает ошибаться и размер получаемых фреймов возрастает. Чтобы преодолеть это, можно использовать полный перебор, что приведёт к значительному увеличению времени кодирования.

Во-вторых, параметры для постоянных предикторов могут быть описаны тремя битами, а параметры для модели LPC зависят от количества бит на семпл и порядка LPC. Это значит, что размер заголовка фрейма зависит от выбранного метода и порядка и может повлиять на оптимальный размер блока.

Остаточное кодирование

Когда модель подобрана, кодер вычитает приближение из оригинала, чтобы получить остаточный (ошибочный) сигнал, который затем кодируется без потерь. Для этого используется то обстоятельство, что разностный сигнал обычно имеет распределение Лапласа и есть набор энтропийных кодов, называемый кодами Райса, позволяющий эффективно и быстро кодировать эти сигналы без использования словаря.

Кодирование Райса состоит из нахождения одного параметра, отвечающего распределению сигнала, а затем использования его для составления кодов. При изменении распределения меняется и оптимальный параметр, поэтому имеется метод, позволяющий пересчитывать его по необходимости. Остаток может быть разбит на контексты или разделы, у каждого из которых будет свой параметр Райса. FLAC позволяет указать, как нужно производить разбиение. Остаток может быть разбит на 2n разделов.

Составление фреймов

Аудиофрейму предшествует заголовок, который начинается с кода синхронизации и содержит минимум информации, необходимой декодеру для воспроизведения потока. Сюда также записывается номер блока или семпла и восьмибитная контрольная сумма самого заголовка. Код синхронизации, CRC заголовка фрейма и номер блока/семпла позволяют выполнять пересинхронизацию и поиск даже в отсутствие точек поиска. В конце фрейма записывается его шестнадцатибитная контрольная сумма. Если базовый декодер обнаружит ошибку, то будет сгенерирован блок тишины.

Разное

Чтобы поддерживать основные типы метаданных, базовый декодер умеет пропускать теги ID3v1 и ID3v2, поэтому их можно свободно добавлять. Теги ID3v2 должны располагаться перед маркером «fLaC», а теги ID3v1 — в конце файла.

Существуют модификации FLAC кодера: Improved FLAC encoder и Flake.

29 января 2003 г. Xiphophorus (сейчас называется Xiph.Org Foundation) анонсировали включение формата FLAC в линейку своих продуктов: Ogg Vorbis, Theora и Speex[2].

Аппаратно поддерживается во многих устройствах.

Напишите отзыв о статье "FLAC"

Примечания

  1. [xiph.org/flac/links.html#hardware Links]. FLAC. Проверено 6 октября 2015.
  2. [xiph.org/ogg/flac.html FLAC Joins Xiph!] (англ.)(недоступная ссылка — история). Проверено 30 октября 2008. [web.archive.org/20070630155035/xiph.org/ogg/flac.html Архивировано из первоисточника 30 июня 2007].

Ссылки

  • [flac.sourceforge.net/ru/index.html FLAC] (рус.). — Официальная страница проекта FLAC на SourceForge.net. Проверено 26 июля 2011. [www.webcitation.org/65LQUnf63 Архивировано из первоисточника 10 февраля 2012].
  • [www.xiph.org/quicktime/ Xiph.Org: QuickTime Components] (англ.). — поддержка FLAC в Quicktime. Проверено 30 октября 2008. [www.webcitation.org/65LQVE7cT Архивировано из первоисточника 10 февраля 2012].

Отрывок, характеризующий FLAC

– Гага – бои… бои… – повторил он несколько раз. Никак нельзя было понять этих слов. Доктор думал, что он угадал, и, повторяя его слова, спросил: княжна боится? Он отрицательно покачал головой и опять повторил то же…
– Душа, душа болит, – разгадала и сказала княжна Марья. Он утвердительно замычал, взял ее руку и стал прижимать ее к различным местам своей груди, как будто отыскивая настоящее для нее место.
– Все мысли! об тебе… мысли, – потом выговорил он гораздо лучше и понятнее, чем прежде, теперь, когда он был уверен, что его понимают. Княжна Марья прижалась головой к его руке, стараясь скрыть свои рыдания и слезы.
Он рукой двигал по ее волосам.
– Я тебя звал всю ночь… – выговорил он.
– Ежели бы я знала… – сквозь слезы сказала она. – Я боялась войти.
Он пожал ее руку.
– Не спала ты?
– Нет, я не спала, – сказала княжна Марья, отрицательно покачав головой. Невольно подчиняясь отцу, она теперь так же, как он говорил, старалась говорить больше знаками и как будто тоже с трудом ворочая язык.
– Душенька… – или – дружок… – Княжна Марья не могла разобрать; но, наверное, по выражению его взгляда, сказано было нежное, ласкающее слово, которого он никогда не говорил. – Зачем не пришла?
«А я желала, желала его смерти! – думала княжна Марья. Он помолчал.
– Спасибо тебе… дочь, дружок… за все, за все… прости… спасибо… прости… спасибо!.. – И слезы текли из его глаз. – Позовите Андрюшу, – вдруг сказал он, и что то детски робкое и недоверчивое выразилось в его лице при этом спросе. Он как будто сам знал, что спрос его не имеет смысла. Так, по крайней мере, показалось княжне Марье.
– Я от него получила письмо, – отвечала княжна Марья.
Он с удивлением и робостью смотрел на нее.
– Где же он?
– Он в армии, mon pere, в Смоленске.
Он долго молчал, закрыв глаза; потом утвердительно, как бы в ответ на свои сомнения и в подтверждение того, что он теперь все понял и вспомнил, кивнул головой и открыл глаза.
– Да, – сказал он явственно и тихо. – Погибла Россия! Погубили! – И он опять зарыдал, и слезы потекли у него из глаз. Княжна Марья не могла более удерживаться и плакала тоже, глядя на его лицо.
Он опять закрыл глаза. Рыдания его прекратились. Он сделал знак рукой к глазам; и Тихон, поняв его, отер ему слезы.
Потом он открыл глаза и сказал что то, чего долго никто не мог понять и, наконец, понял и передал один Тихон. Княжна Марья отыскивала смысл его слов в том настроении, в котором он говорил за минуту перед этим. То она думала, что он говорит о России, то о князе Андрее, то о ней, о внуке, то о своей смерти. И от этого она не могла угадать его слов.
– Надень твое белое платье, я люблю его, – говорил он.
Поняв эти слова, княжна Марья зарыдала еще громче, и доктор, взяв ее под руку, вывел ее из комнаты на террасу, уговаривая ее успокоиться и заняться приготовлениями к отъезду. После того как княжна Марья вышла от князя, он опять заговорил о сыне, о войне, о государе, задергал сердито бровями, стал возвышать хриплый голос, и с ним сделался второй и последний удар.
Княжна Марья остановилась на террасе. День разгулялся, было солнечно и жарко. Она не могла ничего понимать, ни о чем думать и ничего чувствовать, кроме своей страстной любви к отцу, любви, которой, ей казалось, она не знала до этой минуты. Она выбежала в сад и, рыдая, побежала вниз к пруду по молодым, засаженным князем Андреем, липовым дорожкам.
– Да… я… я… я. Я желала его смерти. Да, я желала, чтобы скорее кончилось… Я хотела успокоиться… А что ж будет со мной? На что мне спокойствие, когда его не будет, – бормотала вслух княжна Марья, быстрыми шагами ходя по саду и руками давя грудь, из которой судорожно вырывались рыдания. Обойдя по саду круг, который привел ее опять к дому, она увидала идущих к ней навстречу m lle Bourienne (которая оставалась в Богучарове и не хотела оттуда уехать) и незнакомого мужчину. Это был предводитель уезда, сам приехавший к княжне с тем, чтобы представить ей всю необходимость скорого отъезда. Княжна Марья слушала и не понимала его; она ввела его в дом, предложила ему завтракать и села с ним. Потом, извинившись перед предводителем, она подошла к двери старого князя. Доктор с встревоженным лицом вышел к ней и сказал, что нельзя.
– Идите, княжна, идите, идите!
Княжна Марья пошла опять в сад и под горой у пруда, в том месте, где никто не мог видеть, села на траву. Она не знала, как долго она пробыла там. Чьи то бегущие женские шаги по дорожке заставили ее очнуться. Она поднялась и увидала, что Дуняша, ее горничная, очевидно, бежавшая за нею, вдруг, как бы испугавшись вида своей барышни, остановилась.
– Пожалуйте, княжна… князь… – сказала Дуняша сорвавшимся голосом.
– Сейчас, иду, иду, – поспешно заговорила княжна, не давая времени Дуняше договорить ей то, что она имела сказать, и, стараясь не видеть Дуняши, побежала к дому.
– Княжна, воля божья совершается, вы должны быть на все готовы, – сказал предводитель, встречая ее у входной двери.
– Оставьте меня. Это неправда! – злобно крикнула она на него. Доктор хотел остановить ее. Она оттолкнула его и подбежала к двери. «И к чему эти люди с испуганными лицами останавливают меня? Мне никого не нужно! И что они тут делают? – Она отворила дверь, и яркий дневной свет в этой прежде полутемной комнате ужаснул ее. В комнате были женщины и няня. Они все отстранились от кровати, давая ей дорогу. Он лежал все так же на кровати; но строгий вид его спокойного лица остановил княжну Марью на пороге комнаты.
«Нет, он не умер, это не может быть! – сказала себе княжна Марья, подошла к нему и, преодолевая ужас, охвативший ее, прижала к щеке его свои губы. Но она тотчас же отстранилась от него. Мгновенно вся сила нежности к нему, которую она чувствовала в себе, исчезла и заменилась чувством ужаса к тому, что было перед нею. «Нет, нет его больше! Его нет, а есть тут же, на том же месте, где был он, что то чуждое и враждебное, какая то страшная, ужасающая и отталкивающая тайна… – И, закрыв лицо руками, княжна Марья упала на руки доктора, поддержавшего ее.
В присутствии Тихона и доктора женщины обмыли то, что был он, повязали платком голову, чтобы не закостенел открытый рот, и связали другим платком расходившиеся ноги. Потом они одели в мундир с орденами и положили на стол маленькое ссохшееся тело. Бог знает, кто и когда позаботился об этом, но все сделалось как бы само собой. К ночи кругом гроба горели свечи, на гробу был покров, на полу был посыпан можжевельник, под мертвую ссохшуюся голову была положена печатная молитва, а в углу сидел дьячок, читая псалтырь.
Как лошади шарахаются, толпятся и фыркают над мертвой лошадью, так в гостиной вокруг гроба толпился народ чужой и свой – предводитель, и староста, и бабы, и все с остановившимися испуганными глазами, крестились и кланялись, и целовали холодную и закоченевшую руку старого князя.


Богучарово было всегда, до поселения в нем князя Андрея, заглазное именье, и мужики богучаровские имели совсем другой характер от лысогорских. Они отличались от них и говором, и одеждой, и нравами. Они назывались степными. Старый князь хвалил их за их сносливость в работе, когда они приезжали подсоблять уборке в Лысых Горах или копать пруды и канавы, но не любил их за их дикость.
Последнее пребывание в Богучарове князя Андрея, с его нововведениями – больницами, школами и облегчением оброка, – не смягчило их нравов, а, напротив, усилило в них те черты характера, которые старый князь называл дикостью. Между ними всегда ходили какие нибудь неясные толки, то о перечислении их всех в казаки, то о новой вере, в которую их обратят, то о царских листах каких то, то о присяге Павлу Петровичу в 1797 году (про которую говорили, что тогда еще воля выходила, да господа отняли), то об имеющем через семь лет воцариться Петре Феодоровиче, при котором все будет вольно и так будет просто, что ничего не будет. Слухи о войне в Бонапарте и его нашествии соединились для них с такими же неясными представлениями об антихристе, конце света и чистой воле.