FLAC

FLAC
Розширення

.flac

MIME

audio/x-flac

Тип формату

Аудіо

Стандарт (и)

Специфікація

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

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

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


1. Відомості про формат

1.1. Аудіопотік

Основними частинами потоку є:

  • Рядок з чотирьох байтів " fLaC "
  • Блок метаданих STREAMINFO
  • Інші необов'язкові блоки метаданих
  • Аудіо фрейми

Перші чотири байти ідентифікують потік FLAC. Наступні за ними метадані містять інформацію про потік, потім йдуть стислі аудіодані.

1.2. Метадані

Станом на 10.03.2010 в libflac-1.2.1 визначені наступні типи блоків: StreamInfo, Padding, Application, SeekTable, VorbisComment, CueSheet, Picture, Unknown. Блоки метаданих можуть бути будь-якого розміру, нові блоки можуть бути легко додані. Декодер має можливість пропускати невідомі йому блоки метаданих.

Блок STREAMINFO є обов'язковим. У ньому містяться дані, що дозволяють декодеру налаштувати буфери, частоту дискретизації, кількість каналів, кількість біт на семпл і кількість семплів. Також в блок записується підпис MD5 нестислих аудіоданих. Це корисно для перевірки всього потоку після його передачі.

Інші блоки призначені для резервування місця, зберігання таблиць точок пошуку, тегів, список розмітки аудіодисків, а також даних для конкретних програм. Опції для додавання блоків PADDING або точок пошуку приведені нижче. FLAC не потребує точках пошуку, проте вони дозволяють значно збільшити швидкість доступу, а також можуть бути використані для розстановки міток в аудіо редакторах.

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


1.3. Аудіодані

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

1.4. Розбиття на блоки

Розмір блоку - дуже важливий параметр для кодування. Якщо він дуже малий, то в потоці буде занадто багато заголовків фреймів, що зменшить рівень стиснення. Якщо розмір великий, то кодер не зможе підібрати ефективну модель стиснення. Розуміння процесу моделювання допоможе Вам збільшити рівень стиснення для деяких типів вхідних даних. Зазвичай при використанні лінійного прогнозування на аудіоданих з частотою дискретизації 44.1 кГц оптимальний розмір блоку лежить в діапазоні 2-6 тисяч семплів.


1.5. Міжканального декореляції

Якщо на вхід надходять стерео аудіо дані, вони можуть пройти через стадію міжканального декореляції. Правий і лівий канал перетворюються до середнього і разностному за формулами: середній = (лівий + правий) / 2, різницевий = лівий - правий. На відміну від joint stereo, використовуваному в lossy кодерах, в lossless кодуванні цей процес не призводить до втрат. Для даних з аудіо компакт-дисків це зазвичай призводить до значного збільшення рівня стиснення.

1.6. Моделювання

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

  • підгонка простого полінома до сигналу
  • загальне кодування з лінійними предикторами (LPC).

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

По-друге, параметри для постійних предикторів можуть бути описані трьома бітами, а параметри для моделі LPC залежать від кількості біт на семпл і порядку LPC. Це означає, що розмір заголовка фрейму залежить від обраного методу і порядку і може вплинути на оптимальний розмір блоку.


1.7. Залишковий кодування

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

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


1.8. Складання фреймів

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


1.9. Різне

Щоб підтримувати основні типи метаданих, базовий декодер вміє пропускати теги ID3v1 і ID3v2, тому їх можна вільно додавати. Теги ID3v2 повинні розташовуватися перед маркером "fLaC", а теги ID3v1 - в кінці файлу.

Існують модифікації FLAC кодера: Improved FLAC encoder і Flake.

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

Апаратно підтримується в багатьох пристроях. Серед них:


Примітки

  1. 1 2 Supported Hardware - flac.sourceforge.net / links.html # hardware (Англ.) . Читальний - www.webcitation.org/65LQU1yGO з першоджерела 10 лютого 2012.
  2. FLAC Joins Xiph! - xiph.org / ogg / flac.html (Англ.) . (Недоступна посилання - історія - web.archive.org / web / * / http://xiph.org/ogg/flac.html)