diff --git a/doc/ru/developers.html b/doc/ru/developers.html index 7418921d..6c4a006c 100644 --- a/doc/ru/developers.html +++ b/doc/ru/developers.html @@ -1,114 +1,114 @@ - - - - - - - - - - -FLAC: разработка - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|начало |новости |файлы |характеристики |цели |формат |
|id |сравнение | - разработка |документация |ссылки |авторы |
- -

- - - - - -
|english | - русский |

- - -

FLAC: разработка

- -

Проект FLAC

- -

FLAC - это открытый проект и нам будет очень приятно, если кто-либо захочет к нам присоединиться. Вы можете принимать участие в разработке через список рассылки, сообщая об ошибках или высказывая свои идеи, или как разработчик. В любом случае, почитайте список целей, стоящих перед проектом, потому что некоторые возможности, такие как защита от копирования и сжатие с потерями, мы добавлять не хотим.

- -

Список особенно важных задач:

- -

-
  • Тестирование. Енкодер, сжимающий файл без потерь, должен работать абсолютно качественно для любых входных данных. Набор тестов содержит образцы разработанных специально, чтобы заставить енкодер изрядно потрудиться, однако только ими нельзя ограничиваться. Чем больше будет тестов, тем лучше.
  • - -
  • Больше плагинов для плейеров. Сейчас есть плагины только для Winamp и XMMS. Хочется больше!
  • -

    - -

    Чего бы еще хотелось:

    - -

    -
  • Улучшить методы сжатия.
  • - -
  • Поправить мейкфайлы для MSVC, чтобы вместо libFLAC.lib на выходе получался libFLAC.dll.
  • - -
  • Обеспечить настраиваемую поддержку ID3v1 и ID3v2 в плагинах.
  • - -
  • Cделать поддержку для большего количества типов входных файлов (не только WAVE и raw).
  • - -
  • Нарисуйте классное лого!
  • -

    - - -

    Использование в других программах

    - -

    FLAC открыт для разработчиков, желающих добавить поддержку FLAC в своих программах. Все необходимые функции находятся в библиотеке libFLAC, распространяемой по лицензии LGPL. Соответствующая документация находится здесь:

    - - - -

    В исходных текстах проекта есть несколько примеров использования libFLAC. На странице файлы написано, как можно их получить.

    - -

     Copyright (c) 2001 Josh Coalson

    - - - + + + + + + + + + + +FLAC: разработка + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    |начало |новости |файлы |характеристики |цели |формат |
    |id |сравнение | + разработка |документация |ссылки |авторы |
    + +

    + + + + + +
    |english | + русский |

    + + +

    FLAC: разработка

    + +

    Проект FLAC

    + +

    FLAC - это открытый проект и нам будет очень приятно, если кто-либо захочет к нам присоединиться. Вы можете принимать участие в разработке через список рассылки, сообщая об ошибках или высказывая свои идеи, или как разработчик. В любом случае, почитайте список целей, стоящих перед проектом, потому что некоторые возможности, такие как защита от копирования и сжатие с потерями, мы добавлять не хотим.

    + +

    Список особенно важных задач:

    + +

    +
  • Тестирование. Енкодер, сжимающий файл без потерь, должен работать абсолютно качественно для любых входных данных. Набор тестов содержит образцы разработанных специально, чтобы заставить енкодер изрядно потрудиться, однако только ими нельзя ограничиваться. Чем больше будет тестов, тем лучше.
  • + +
  • Больше плагинов для плейеров. Сейчас есть плагины только для Winamp и XMMS. Хочется больше!
  • +

    + +

    Чего бы еще хотелось:

    + +

    +
  • Улучшить методы сжатия.
  • + +
  • Поправить мейкфайлы для MSVC, чтобы вместо libFLAC.lib на выходе получался libFLAC.dll.
  • + +
  • Обеспечить настраиваемую поддержку ID3v1 и ID3v2 в плагинах.
  • + +
  • Cделать поддержку для большего количества типов входных файлов (не только WAVE и raw).
  • + +
  • Нарисуйте классное лого!
  • +

    + + +

    Использование в других программах

    + +

    FLAC открыт для разработчиков, желающих добавить поддержку FLAC в своих программах. Все необходимые функции находятся в библиотеке libFLAC, распространяемой по лицензии LGPL. Соответствующая документация находится здесь:

    + + + +

    В исходных текстах проекта есть несколько примеров использования libFLAC. На странице файлы написано, как можно их получить.

    + +

     Copyright (c) 2001 Josh Coalson

    + + + diff --git a/doc/ru/documentation.html b/doc/ru/documentation.html index 2a5166af..95a77ecd 100644 --- a/doc/ru/documentation.html +++ b/doc/ru/documentation.html @@ -1,566 +1,566 @@ - - - - - - - - - - -FLAC: документация - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    |начало |новости |файлы |характеристики |цели |формат |
    |id |сравнение |разработка | - документация |ссылки |авторы |
    - -

    - - - - - -
    |english | - русский |

    - - -

    FLAC: документация

    - -

    Документация

    - -

    Эта страница разбита на следующие разделы:

    - -здесь находится документация для утилиты комадной строки flac, редактора метаданных metaflac и плагинов для плееров.

    - - - - -

    Помните, что онлайновая версия этого документа (на английском языке) включается в последний релиз.

    - - -

    Формат

    - -

    Опции по умолчанию для flac настроены на получение оптимального соотношения скорость/уровень сжатия для большинства типов входных файлов. Здесь описывается как можно попытаться увеличить уровень или скорость сжатия или с наибольшим эффектом использовать систему метаданных.

    - -

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

    - -

    - -

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

    - - -

    Метаданные

    - -

    FLAC определяет несколько типов блоков метаданных (все они перечислены на странице формат). Блоки метаданных могут быть любого размера, новые блоки могут быть легко добавлены. Декодер имеет возможность пропускать неизветные ему блоки метаданных. Обязателен только блок STREAMINFO. В нем содержится частота дискретизация, количество каналов и т.п., а также данные позволяющие декодеру настроить буфферы. Сюда также записывается подпись MD5 несжатых аудиоданных. Это полезно для проверки всего потока после его передачи.

    - -

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

    - -

    Если Вам нужен собственный блок метаданных, Вы можете определить его и запросить идентификатор здесь. Вы можете зарезервировать блок PADDING необходимого размера и записать на его место свои данные после кодирования. Полученнный поток будет отвечать формату FLAC, декодеры распознающие эти блоки смогут их использовать, остальные будут их пропускать.

    - - -

    Аудиоданные

    - -

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

    - - -

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

    - -

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

    - - -

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

    - -

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

    - - -

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

    - -

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

    - -

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

    - -

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

    - - -

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

    - -

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

    - -

    Кодирование Райса состоит из нахождения одного параметра, отвечающего распределению сигнала, а затем использования его для составления кодов. При изменении распределения меняется и оптимальный параметр, поэтому имеется метод позволяющий пересчитывать его по необходимости. Остаток может быть разбит на контексты или разделы, у каждого из которых будет свой параметр Райса. flac позволяет указать, как нужно производить разбиение, с помощью опции -r. Остаток может быть разбит на 2^n раздела, если использовать -r n,n. Параметр n называется порядком раздела. Также енкодер может искать в пределах от m до n порядка, выбирая лучший вариант, если указать -r m,n. Обычно выбор n не влияет на скорость кодирования. От разницы между m и n сильно зависит время работы, чем она больше, тем больше времени будет затрачиваться на поиск лучшего порядка. Выбор размера блока также влияет на оптимальный порядок раздела.

    - - -

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

    - -

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

    - - -

    Разное

    - -

    Чтобы поддерживать основные типы метаданных, базовый декодер умеет пропускать теги ID3V1 и ID3V2, поэтому их можно свободно добавлять. Теги ID3V2 должны располагаться перед маркером "fLaC", а теги ID3V1 - в конце файла.

    - -

    У flac есть опция (-V) для проверки выходных данных при кодировании. В этом случае декодер работает одновременно с енкодером и его выход сравнивается с оригинальным вводом. Если будет найдено отличие, flac закончит работу с сообщением об ошибке.

    - - - -

    flac

    - -

    flac - это кодек, работающий из командной строки. Входом для енкодера и выходом для декодера должен быть либо данные в формате RIFF WAVE, либо поток сэмплов без заголовка. flac использует только линейные PCM сэмплы (другими словами, A-LAW, uLAW, и т.п. не поддерживаются). Следующим ограничением является то, что во кодируемом файле сэмплы должны быть 8, 16 или 24-битными. Это не ограничение формата, просто так работают базовый енкодер и декодер.

    - -

    flac предполагает, что файлы RIFF WAVE имеют суффикс ".wav"; это умолчание может быть переопределено специальным ключом. Для данных, поступающих из потока, flac пытается определить тип, просматривая начало файла в поиске заголовка. В остальных случаях flac не делает предположений о суффиксах, хотя по соглашению файлы FLAC имеют суффикс ".flac" (или ".fla" на старых файловых системах таких как FAT-16).

    - -

    Перед полным описанием ключей, используемых flac, обратим внимание на то что: 1) по умолчанию flac сжимает файлы (для декодирования используйте ключ -d); 2) ключи -0..-9, управляющие уровнем сжатия, являются синонимами для различных групп настроек кодирования. Того же эффекта можно добиться, используя наборы соответствующих ключей; 3) модель обработки входных и выходных файлов у flac аналогична gzip.

    - -

    flac вызывается одним из четырех способов:

    - -

    - -

    В любом случае, если входной файл не указан, подразумевается стандартный ввод. Если указан только один входной файл, то это может быть "-" для стандартного ввода (stdin). Когда используется стандартный ввод, flac пишет в стандартный вывод (stdout). В остальных случаях flac выполнит указанные действия для каждого входного файла и запишет результаты в файлы с аналогичными именами (при кодировании суффикс будет заменен на ".flac" или, если его не было, будет добавлен; при декодировании суффиксы также изменяются в соответствии с типом выходных данных.) Оригинал удаляется, только если указан ключ --delete-input-file.

    - -

    Существуют особые формы вызова процедур кодирования/декодирования из стандандартного ввода в файл.

    - -

    - - -

    которые лучше чем

    - - -

    - -

    так как в первом случае сохраняется возможность произвести при необходимости последующую обработку файла, например для записи заголовков RIFF WAVE или STREAMINFO.

    - -

    Данные в стандартный вывод можно перенаправить с помощью ключа -c.

    - -

    Опции кодирования влияют на скорость работы и уровень сжатия. Настройки формата определяют расположение сэмплов, если на вход поступает файл без заголовка. Если у файла есть заголовок RIFF WAVE, то настойки формата не нужны, так как они берутся из файла.

    - -

    В режиме тестирования flac работает как и при декодировании, только выходной файл не записывается. Режимы декодирования и тестирования проверяют поток на наличие ошибок, а также сравнивают подпись MD5 декодированного потока с сохраненной подписью, даже если формат потока правильный.

    - -

    Основные ключи

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -dДекодирование (по умолчанию flac кодирует). flac завершит работу с кодом выхода 1, если будет встречена ошибка или контрольная сумма MD5 декодированного потока не совпадет с сохраненной. Если ошибок не будет, код возврата будет равен 0.
    -tТестирование (то же самое, что и декодирование, только выход не записывается в файл). Коды возврата те же.
    -aАнализ (то же самое, что и декодирование, только выходом является файл статистики). Коды возврата те же. Режим предназначен в основном для разработчиков. В выходной текстовый файл записывается информация о каждом фрейме и подфрейме.
    -cНаправить результат в стандартный вывод (stdout).
    -sНе показывать статистику при кодировании/декодировании.
    -o файлЯвно указать имя выходного файла, по умолчанию flac просто заменяет суффикс.
    --output-prefix строкаДобавляет префикс к каждому имени выходному файлу. Может имспользоваться для кодирования/декодирования файлов в другой каталог. Если указанная строка является частью пути, убедитесь, что она заканчивается слэшем '/'.
    --delete-input-fileПосле успешного окончания кодирования/декодирования входной файл будет удален. Если произойдет ошибка, исходный файл останется.
    --skip #Пропустить первые # сэмплов входного файла. Работает для кодирования и декодирования, но не для тестирования.
    - - -

    Опции анализа

    - - - - - - - -
    --a-rtextДобавляет в файл остаточный сигнал. Результирующий файл получается очень большим.
    --a-rgpСоздает файлы-диаграммы для каждого подфрейма. В каждом файле будет остаточное распределение для подфрейма. Будет создано очень много файлов.
    - - -

    Опции кодирования

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    --laxПозволяет енкодеру создавать файлы, отвечающие подмножеству формата FLAC. В результате работы будет получаться непотоковый файл, поэтому этот ключ следует использовать только для архивирования. Декодер будет поддерживать воспроизведение и поиск в таких файлах.
    --sector-align -

    При кодировании нескольких WAVE файлов формата CD-Audio выравнивать их на границу сектора. Эта опция применима только для кодирования нескольких WAVE файлов, каждый из которых должен иметь частоту дискретизации 44.1 кГц и два канала. Если будет указана эта опция енкодер выровняет потоки .flac так, -что их длины будут кратны размеру сектора CD-Audio (равны 1/75 секундам или 588 сэмплам). Это осуществляется переносом части сектора в конце каждого WAVE файла в начало следующего. Последний поток будет дополнен до границы выравнивания нулями.

    -

    Использование этой опции не приведет ни к чему, если файлы уже выровнены (например, если правильно скопированы с аудио-CD). flac может выровнять только несколько файлов за один вызов.

    - -

    ВНИМАНИЕ: Порядок файлов имеет значение! Если вы сделаете следующий вызов 'flac --sector-align *.wav', командный процессор может обработать шаблон не в том порядке, в каком вы рассчитываете. Поэтому лучше всего вызывать программу, явно указав список файлов, например, 'flac --sector-align 8.wav 9.wav 10.wav'. -

    -S {#|X|#x}Добавляет точки для поиска в таблицу SEEKTABLE. - -
      -
    • : создается точка поиска для сэмпла с определенным номером.
    • - -
    • : резервируемые точки (всегда помещаются в конце SEEKTABLE).
    • - -
    • #x : # равномерно распределенных точек поиска, первая соответствует 0 сэмплу.
    • -
    - -

    Опцию -S можно использовать несколько раз. В результате получится объединенная таблица, в которой будут присутствовать только уникальные значения.
    -По умолчанию flac использует -S 100x. Если таблица поиска не нужна, укажите -S-.
    -ПРИМЕЧАНИЕ: -S #x не будет работать, если енкодер не сможет определить размер входного файла в начале работы.
    -ПРИМЕЧАНИЕ: если # больше или равен количеству сэмплов во входном файле, то точки добавлены не будут, если размер можно определить до кодирования, в противном случае будут записаны резервируемые точки.

    -
    -P #Eнкодер запишет блок метаданных PADDING, указанного размера (в байтах), после блока STREAMINFO. -P 0 указывает, что блок PADDING не нужен (значение по умолчанию). Этот блок полезен, если вы собираетесь добавить тэг в файл позже. Вместо того, чтобы переписывать файл полностью, можно будет записать информацию вместо блока PADDING.
    -b #Устанавливает размер блока в сэмплах. По умолчанию 1152 для -l 0, иначе 4608. Стандартные потоки должны использовать одно из указаных значений: 192/576/1152/2304/4608/256/512/1024/2048/4096/8192/16384/32768. Сейчас енкодер использует постоянный размер блока для всего файла.
    -mВключает разностное кодирование (только для стерео потоков). Обычно увеличивает уровень сжатия на несколько процентов. Для каждого блока создается усредненная и стерео версия блока, сохраняется блок меньшего размера. Сейчас разностное кодирование доступно для файлов, где сэмпл имеет размер не больше 16 бит.
    -MВключает свободное разностное кодирование (только для стерео потоков). Работает аналогично -m, однако енкодер переключается между независимым и усредняющим кодированием адаптивно. Метод работает быстрее, но уровень сжатия меньше, так как -m производит полный перебор вариантов.
    -0..-9Быстрейшее сжатие ... максимальное сжатие. По умолчанию -5.
    -0Аналогично -l 0 -b 1152 -r 2,2.
    -1Аналогично -l 0 -b 1152 -r 2,2 -M.
    -2Аналогично -l 0 -b 1152 -r 3 -m.
    -3Аналогично -l 6 -b 4608 -r 3,3
    -4Аналогично -l 8 -b 4608 -r 3,3 -M.
    -5Аналогично -l 8 -b 4608 -r 3,3 -m.
    -6Аналогично -l 8 -b 4608 -r 4 -m.
    -7Аналогично -l 8 -b 4608 -r 6 -m -e.
    -8Аналогично -l 12 -b 4608 -r 6 -m -e.
    -9Аналогично -l 32 -b 4608 -r 16 -m -e -E -p. Работает очень медленно, но достигается максимальный уровень сжатия для данного размера блока.
    -eПолный поиск модели (работает медленно!). Обычно енкодер определяет лучшую модель и кодирует далее опираясь на нее. В данном режиме енкодер будет создавать подфреймы всех порядков и использовать наименьший. Если максимальное значение порядка LPC велико, время кодирования существенно возрастет. Выигрыш обычно составляет около 0.5%.
    -EИспользовать управляющие коды в кодере энтропии. Эта опция позволяет записывать незакодированное представление остатка в разделе, если его размер меньше. При этом время работы увеличивается, а уровень сжатия обычно улучшается примерно на 1%.
    -l #Определяет максимальный порядок LPC (коэффициентов линейного прогнозирования). Число должно быть меньше или равно 32. Если значение равно 0, енкодер будет использовать вместо общего линейного прогнозирования постоянные коэффициенты. Этот метод увеличивает скорость работы, но файлы получаются на 5-10% больше.
    -q #Определяет точность дискретных коэффициентов линейного прогнозирования в битах. По умолчанию -q 0, что позволяет енкодеру принимать решение в зависимости от сигнала. Лучше оставлять значение по умолчанию.
    -pПроизводить оптимизацию LPC. Переопределяет любую опцию -q. Сильно замедляет работу, и уменьшает размер файла на долю процента. -q не работает, когда используется -l 0.
    -r [#,]#Установить [min,]max порядок раздела. Если минимальное значение не указано, то оно устанавливается равным 0. По умолчанию енкодер один параметр Райса для всего остатка подфрейма. Если использовать эту опцию, остаток будет разделяться на 2^min# ... 2^max частей, для каждой из которых будет определен собственный параметр Райса. С увеличением параметра max выигрыш будет все меньше. Наиболее оптимальный вариант достигается при использовании -r 2,2 (и больших значений для больших размеров блоков). При этом сжатие обычно увеличивается на 1.5%. Выбор оптимального значения можно произвести по формуле размер_блока/(2^n)=128. Максимальный уровень сжатия достигается при использовании -r 0,16.
    -R #Установить пределы поиска параметра Райса. По умолчанию 0. Кодер остатков будет искать наилучший параметр Райса в указанном пределе для каждого раздела остатков. Использование этой опции не дает большого выигрыша, но сильно замедляет работу. В результате, опции -0 ... -9 не используют ее.
    -VПроверять процесс сжатия. В данном случае flac создает параллельный декодер, раскодирующий выход енкодера и сравнивает результат с оригиналом. Если будет найдено несоответствие, кодирование прекратится. Время работы с этой опцией увеличивается, однако, при этом гарантируется, что файл будет правильно декодирован.
     -S-, -m-, -V-, -e-, -E-, -p-, --lax-, --delete-input-file-, --sector-align используются для отключения соответствующих опций.
    - - -

    Настройки формата

    - - - - - - - - - - - - - - - - - - - - - - -
    -fb | -flОпределяет порядок байтов в файле без заголовка big-endian | little-endian.
    -fc nОпределяет количество каналов в файле без заголовка.
    -fp nОпределяет количество бит на сэмпл в файле без заголовка.
    -fs nОпределяет количество сэмплов в секунду в файле без заголовка.
    -fuУказывает, что сэмплы в файле без заголовка беззнаковые (по умолчанию знаковые).
    -frВоспринимать входной (или выходной при декодировании) файл как raw поток сэмплов вне зависимости от суффикса.
    -fwВоспринимать входной (или выходной при декодировании) файл как RIFF WAVE вне зависимости от суффикса.
    - - - -

    metaflac

    - -

    metaflac - это редактор метаданных, работающий из командной строки. Сейчас он только выводит содержимое блоков метаданных во .flac файле, но скоро с его помощью можно будет вставлять, удалять и редактировать блоки.

    - -

    Cейчас metaflac вызывается только одним способом:

    - -

    metaflac [-v] входной_файл

    - -

    Входным_файлом может быть "-" для стандартного ввода (stdin). если использовать -v, будет получен более подробный отчет.

    - - -
    -

    Плагин для XMMS

    - -

    Для его установки необходимо скопировать libxmms-flac.so в каталог, где находятся плагины ввода XMMS (обычно /usr/lib/xmms/Input). Больше ничего настраивать не надо. Для воспроизведения .flac файлов перезапустите XMMS.

    - - -
    -

    Плагин для Winamp

    - -

    Для его установки необходимо скопировать in_flac.dll в каталог, где находятся плагины ввода Winamp (обычно /Plugins). Больше ничего настраивать не надо. Для воспроизведения .flac файлов перезапустите Winamp.

    - - -
    -

    libFLAC

    - -

    Библиотека libFLAC является реализацией на C базового енкодера и декодера. Используя эту библиотеку и написав немного кода, можно добавить поддержку FLAC в свою программу. Условия распространения - LGPL. Исходные коды библиотеки libFLAC, также как и консольного кодека и плагинов доступны, и могут послужить хорошим примером для использования.

    - -

    libFLAC требует стандартную и математическую библиотеки для языка C. Потоки не используются, однако, так как libFLAC не использует глобальные переменные, библиотека должна быть thread-safe.

    - -

    Интерфейс libFLAC описан в публичных заголовочных файлах в каталоге include/FLAC. Для использования скомпилированной библиотеки нужны только публичные заголовки. Обратите внимание на то, что код из src/libFLAC/, включая защищенные заголовочные файлы из src/libFLAC/include/ не нужен.

    - -

    В основном использование libFLAC состоит в следующем:

    - -
      -
    1. Программа создает экземпляр енкодера или декодера с помощью функций *_new().
    2. - -
    3. Программа устанавливает параметры экземпляра и предоставляет ему обратные вызовы для чтения, записи, сообщения об ошибках и работы с метаданными с помощью функций *_set_*().
    4. - -
    5. Программа инициализирует экземпляр, проверяет параметры и готовится к кодированию/декодированию, используя функции *_init().
    6. - -
    7. Программа вызывает функции *_process_*() для кодирования или декодирования данных, которые в свою очередь делают обратные вызовы.
    8. - -
    9. Программа завершает работу экземпляра функцией *_finish(), которая сбрасывает буферы ввода и вывода.
    10. - -
    11. Экземпляр может быть использован снова либо удален функцией *_delete().
    12. - -
    - -

    Для декодирования libFLAC предоставляет два уровня доступа. На нижнем уровне находится декодер потоков, а на верхнем - файлов (являющийся в свою очередь оболочкой для потокового декодера). Интерфейсы описаны в файлах stream_decoder.h и file_decoder.h соответственно. Файловый декодер сам осуществляет обратные вызовы для чтения и предоставляет функции поиска. Енкодер пока что реализован только на потоковом уровне (stream_encoder.h).

    - -

    Структуры и константы, относящиеся к формату, определены в файле format.h.

    - - -

    ДЕКОДЕР ПОТОКОВ

    - -

    Сначала обсудим декодер потоков. Тип его экземпляра FLAC__StreamDecoder. Обычно в программе экземпляр создается вызовом FLAC__stream_decoder_new() и инициализируется FLAC__stream_decoder_init(). Программа также может предоставлять указатель client_data на FLAC__stream_decoder_init(), который будет использоваться для обратных вызовов.

    - - - -

    Когда декодер инициализирован, программа может вызвать одну из следующих функций для декодирования:

    - - - -

    Когда декодер заканчивает работу, экземпляр обрабатывается функцией FLAC__stream_decoder_finish(), которая проверяет состояние декодера и освобождает память. Затем экземпляр может быть удален функцией FLAC__stream_decoder_delete() или инициализирован заново для декодирования другого потока.

    - -

    Обратите внимание на то, что потоковый декодер не имеет представления о позиции в потоке, он только преобразовывает данные. Чтобы осуществлять поиск в потоке функции обратного вызова могут только сбрасывать данные декодера функцией FLAC__stream_decoder_flush() и начинать подавать данные с новой позиции с помощью обратного вызова для чтения. Декодер файлов поступает именно так.

    - - -

    ДЕКОДЕР ФАЙЛОВ

    - -

    Декодер файлов - это оболочка декодера потоков, призванная упростить процесс декодирования файлов. Тип его экземпляра - FLAC__FileDecoder. Отличие от потокового декодера состоит в том, что вместо обратного вызова для чтения (который обрабатывает сам декодер) при инициализации указывается путь к файлу. Остальные функции аналогичны эквивалентам в декодере потоков.

    - -

    Так как декодер файлов сам управляет входными данными, он может предоставить и поиск. Он осуществляется методом FLAC__file_decoder_seek_absolute(). В любой момент после инициализации декодера файлов программа может вызвать эту функцию для поиска сэмпла в файле. Впоследствии, при первом обратном вызове для записи он будет содержать (возжожно неполный) блок, начинающийся с этого сэмпла.

    - -

    Декодер файлов также предоставляет проверку подписи MD5. Если эта возможность будет включена перед инициализацией, FLAC__file_decoder_finish() сообщит, если подпись MD5 распакованных данных не совпадет с сохраненной в блоке STREAMINFO. Проверка MD5 автоматически выключается, если в блоке STREAMINFO нет подписи или при попытке осуществления поиска. - - -

    ЕНКОДЕР ПОТОКОВ

    - -

    Енкодер потоков работает аналогично декодеру, однако имеет меньше обратных вызовов и больше опций. Тип экземпляра - FLAC__StreamEncoder. Для создания нового экземпляра в программе нужно вызвать функцию FLAC__stream_encoder_new(), а чтобы проинициализировать его - FLAC__stream_encoder_init().

    - -

    В отличие от процесса декодирования кодирование в формат FLAC имеет множество опций, влияющих на скорость и уровень сжатия. Когда программа вызывает FLAC__stream_encoder_init(), енкодер проверяет значения, поэтому необходимо убедиться, что возвращемое этой функцией значение - FLAC__STREAM_ENCODER_OK. Для установки параметров нужно иметь некоторое представление о формате (см. описание формата для пользователя или его формальное описание). Список необходимых параметров приведен здесь:

    - - - -

    Программа должна предоставить FLAC__stream_encoder_init() адреса для следующих обратных вызовов: - -

    - -

    Вызов FLAC__stream_encoder_init() непосредственно производит обратный вызов для записи сигнатуры "fLaC" и всех определенных на данный момент метаданных.

    - -

    После инициализации экземпляра программа может передавать данные енкодеру двумя способами:

    - - - -

    Для завершения кодирования данных программа вызывает функцию FLAC__stream_encoder_finish(), которая кодирует оставшиеся данные из входного потока и делает обратный вызов для работы с метаданными с корректной статистикой о процессе кодирования. Экземпляр может быть удален функцией FLAC__stream_encoder_delete() или инициализирован снова для кодирования нового потока.

    - - -

    РАЗНОЕ

    - -

    Необходимо отметить, что когда передаются указатели на аудио данные, их порядок имеет значение только для стерео потоков. Канал 0 соответствует левому каналу, а 1 - правому.

    - - -

    МЕТАДАННЫЕ

    - -

    Программы, записывающие свои блоки метаданных APPLICATION, могут указать енкодеру, чтобы он записал блок метаданных PADDING нужного размера. В этом случае вместо перезаписи всего потока после кодирования программа сможет просто заменить блок PADDING на свой. Если известен только максимальный размер блока APPLICATION, программа может создать резервный блок чуть большего размера, а после кодирования разделить его на блоки APPLICATION и PADDING.

    - -

    Если размер блока метаданных APPLICATION известен заранее, размер резервируемой области может быть легко вычеслен. Если размер блока APPLICATION (не включая заголовок блока) равен N байтам, то экземпляру FLAC__StreamEncoder перед инициализацией нужно передать значение N+4. Это нужно, чтобы учесть дополнительное место необходимое для хранения идентификатора приложения.

    - -

    Когда известен только максимальный размер, скажем, N байт, нужно зарезервировать N+8 байт. Четыре для ID приложения и четыре для дополнительного блока PADDING, который заполнит оставшееся пространство. По окончании кодирования, когда размер блока данных APPLICATION становится известной и равной, допустим, M байтам, на место первоначального блока PADDING будет записан блок APPLICATION и блок PADDING длиной N-M байтов.

    - - - -

    Известные ошибки

    - -

    Отслеживание ошибок ведется на этой странице проекта, находящейся на SourceForge. Если Вы будете сообщать об ошибке, пожалуйста, оставьте e-mail для контакта.

    - -

     Copyright (c) 2001 Josh Coalson

    - - - + + + + + + + + + + +FLAC: документация + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    |начало |новости |файлы |характеристики |цели |формат |
    |id |сравнение |разработка | + документация |ссылки |авторы |
    + +

    + + + + + +
    |english | + русский |

    + + +

    FLAC: документация

    + +

    Документация

    + +

    Эта страница разбита на следующие разделы:

    + +здесь находится документация для утилиты комадной строки flac, редактора метаданных metaflac и плагинов для плееров.

    + + + + +

    Помните, что онлайновая версия этого документа (на английском языке) включается в последний релиз.

    + + +

    Формат

    + +

    Опции по умолчанию для flac настроены на получение оптимального соотношения скорость/уровень сжатия для большинства типов входных файлов. Здесь описывается как можно попытаться увеличить уровень или скорость сжатия или с наибольшим эффектом использовать систему метаданных.

    + +

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

    + +

    + +

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

    + + +

    Метаданные

    + +

    FLAC определяет несколько типов блоков метаданных (все они перечислены на странице формат). Блоки метаданных могут быть любого размера, новые блоки могут быть легко добавлены. Декодер имеет возможность пропускать неизветные ему блоки метаданных. Обязателен только блок STREAMINFO. В нем содержится частота дискретизация, количество каналов и т.п., а также данные позволяющие декодеру настроить буфферы. Сюда также записывается подпись MD5 несжатых аудиоданных. Это полезно для проверки всего потока после его передачи.

    + +

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

    + +

    Если Вам нужен собственный блок метаданных, Вы можете определить его и запросить идентификатор здесь. Вы можете зарезервировать блок PADDING необходимого размера и записать на его место свои данные после кодирования. Полученнный поток будет отвечать формату FLAC, декодеры распознающие эти блоки смогут их использовать, остальные будут их пропускать.

    + + +

    Аудиоданные

    + +

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

    + + +

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

    + +

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

    + + +

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

    + +

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

    + + +

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

    + +

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

    + +

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

    + +

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

    + + +

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

    + +

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

    + +

    Кодирование Райса состоит из нахождения одного параметра, отвечающего распределению сигнала, а затем использования его для составления кодов. При изменении распределения меняется и оптимальный параметр, поэтому имеется метод позволяющий пересчитывать его по необходимости. Остаток может быть разбит на контексты или разделы, у каждого из которых будет свой параметр Райса. flac позволяет указать, как нужно производить разбиение, с помощью опции -r. Остаток может быть разбит на 2^n раздела, если использовать -r n,n. Параметр n называется порядком раздела. Также енкодер может искать в пределах от m до n порядка, выбирая лучший вариант, если указать -r m,n. Обычно выбор n не влияет на скорость кодирования. От разницы между m и n сильно зависит время работы, чем она больше, тем больше времени будет затрачиваться на поиск лучшего порядка. Выбор размера блока также влияет на оптимальный порядок раздела.

    + + +

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

    + +

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

    + + +

    Разное

    + +

    Чтобы поддерживать основные типы метаданных, базовый декодер умеет пропускать теги ID3V1 и ID3V2, поэтому их можно свободно добавлять. Теги ID3V2 должны располагаться перед маркером "fLaC", а теги ID3V1 - в конце файла.

    + +

    У flac есть опция (-V) для проверки выходных данных при кодировании. В этом случае декодер работает одновременно с енкодером и его выход сравнивается с оригинальным вводом. Если будет найдено отличие, flac закончит работу с сообщением об ошибке.

    + + + +

    flac

    + +

    flac - это кодек, работающий из командной строки. Входом для енкодера и выходом для декодера должен быть либо данные в формате RIFF WAVE, либо поток сэмплов без заголовка. flac использует только линейные PCM сэмплы (другими словами, A-LAW, uLAW, и т.п. не поддерживаются). Следующим ограничением является то, что во кодируемом файле сэмплы должны быть 8, 16 или 24-битными. Это не ограничение формата, просто так работают базовый енкодер и декодер.

    + +

    flac предполагает, что файлы RIFF WAVE имеют суффикс ".wav"; это умолчание может быть переопределено специальным ключом. Для данных, поступающих из потока, flac пытается определить тип, просматривая начало файла в поиске заголовка. В остальных случаях flac не делает предположений о суффиксах, хотя по соглашению файлы FLAC имеют суффикс ".flac" (или ".fla" на старых файловых системах таких как FAT-16).

    + +

    Перед полным описанием ключей, используемых flac, обратим внимание на то что: 1) по умолчанию flac сжимает файлы (для декодирования используйте ключ -d); 2) ключи -0..-9, управляющие уровнем сжатия, являются синонимами для различных групп настроек кодирования. Того же эффекта можно добиться, используя наборы соответствующих ключей; 3) модель обработки входных и выходных файлов у flac аналогична gzip.

    + +

    flac вызывается одним из четырех способов:

    + +

    + +

    В любом случае, если входной файл не указан, подразумевается стандартный ввод. Если указан только один входной файл, то это может быть "-" для стандартного ввода (stdin). Когда используется стандартный ввод, flac пишет в стандартный вывод (stdout). В остальных случаях flac выполнит указанные действия для каждого входного файла и запишет результаты в файлы с аналогичными именами (при кодировании суффикс будет заменен на ".flac" или, если его не было, будет добавлен; при декодировании суффиксы также изменяются в соответствии с типом выходных данных.) Оригинал удаляется, только если указан ключ --delete-input-file.

    + +

    Существуют особые формы вызова процедур кодирования/декодирования из стандандартного ввода в файл.

    + +

    + + +

    которые лучше чем

    + + +

    + +

    так как в первом случае сохраняется возможность произвести при необходимости последующую обработку файла, например для записи заголовков RIFF WAVE или STREAMINFO.

    + +

    Данные в стандартный вывод можно перенаправить с помощью ключа -c.

    + +

    Опции кодирования влияют на скорость работы и уровень сжатия. Настройки формата определяют расположение сэмплов, если на вход поступает файл без заголовка. Если у файла есть заголовок RIFF WAVE, то настойки формата не нужны, так как они берутся из файла.

    + +

    В режиме тестирования flac работает как и при декодировании, только выходной файл не записывается. Режимы декодирования и тестирования проверяют поток на наличие ошибок, а также сравнивают подпись MD5 декодированного потока с сохраненной подписью, даже если формат потока правильный.

    + +

    Основные ключи

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    -dДекодирование (по умолчанию flac кодирует). flac завершит работу с кодом выхода 1, если будет встречена ошибка или контрольная сумма MD5 декодированного потока не совпадет с сохраненной. Если ошибок не будет, код возврата будет равен 0.
    -tТестирование (то же самое, что и декодирование, только выход не записывается в файл). Коды возврата те же.
    -aАнализ (то же самое, что и декодирование, только выходом является файл статистики). Коды возврата те же. Режим предназначен в основном для разработчиков. В выходной текстовый файл записывается информация о каждом фрейме и подфрейме.
    -cНаправить результат в стандартный вывод (stdout).
    -sНе показывать статистику при кодировании/декодировании.
    -o файлЯвно указать имя выходного файла, по умолчанию flac просто заменяет суффикс.
    --output-prefix строкаДобавляет префикс к каждому имени выходному файлу. Может имспользоваться для кодирования/декодирования файлов в другой каталог. Если указанная строка является частью пути, убедитесь, что она заканчивается слэшем '/'.
    --delete-input-fileПосле успешного окончания кодирования/декодирования входной файл будет удален. Если произойдет ошибка, исходный файл останется.
    --skip #Пропустить первые # сэмплов входного файла. Работает для кодирования и декодирования, но не для тестирования.
    + + +

    Опции анализа

    + + + + + + + +
    --a-rtextДобавляет в файл остаточный сигнал. Результирующий файл получается очень большим.
    --a-rgpСоздает файлы-диаграммы для каждого подфрейма. В каждом файле будет остаточное распределение для подфрейма. Будет создано очень много файлов.
    + + +

    Опции кодирования

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    --laxПозволяет енкодеру создавать файлы, отвечающие подмножеству формата FLAC. В результате работы будет получаться непотоковый файл, поэтому этот ключ следует использовать только для архивирования. Декодер будет поддерживать воспроизведение и поиск в таких файлах.
    --sector-align +

    При кодировании нескольких WAVE файлов формата CD-Audio выравнивать их на границу сектора. Эта опция применима только для кодирования нескольких WAVE файлов, каждый из которых должен иметь частоту дискретизации 44.1 кГц и два канала. Если будет указана эта опция енкодер выровняет потоки .flac так, +что их длины будут кратны размеру сектора CD-Audio (равны 1/75 секундам или 588 сэмплам). Это осуществляется переносом части сектора в конце каждого WAVE файла в начало следующего. Последний поток будет дополнен до границы выравнивания нулями.

    +

    Использование этой опции не приведет ни к чему, если файлы уже выровнены (например, если правильно скопированы с аудио-CD). flac может выровнять только несколько файлов за один вызов.

    + +

    ВНИМАНИЕ: Порядок файлов имеет значение! Если вы сделаете следующий вызов 'flac --sector-align *.wav', командный процессор может обработать шаблон не в том порядке, в каком вы рассчитываете. Поэтому лучше всего вызывать программу, явно указав список файлов, например, 'flac --sector-align 8.wav 9.wav 10.wav'. +

    -S {#|X|#x}Добавляет точки для поиска в таблицу SEEKTABLE. + +
      +
    • : создается точка поиска для сэмпла с определенным номером.
    • + +
    • : резервируемые точки (всегда помещаются в конце SEEKTABLE).
    • + +
    • #x : # равномерно распределенных точек поиска, первая соответствует 0 сэмплу.
    • +
    + +

    Опцию -S можно использовать несколько раз. В результате получится объединенная таблица, в которой будут присутствовать только уникальные значения.
    +По умолчанию flac использует -S 100x. Если таблица поиска не нужна, укажите -S-.
    +ПРИМЕЧАНИЕ: -S #x не будет работать, если енкодер не сможет определить размер входного файла в начале работы.
    +ПРИМЕЧАНИЕ: если # больше или равен количеству сэмплов во входном файле, то точки добавлены не будут, если размер можно определить до кодирования, в противном случае будут записаны резервируемые точки.

    +
    -P #Eнкодер запишет блок метаданных PADDING, указанного размера (в байтах), после блока STREAMINFO. -P 0 указывает, что блок PADDING не нужен (значение по умолчанию). Этот блок полезен, если вы собираетесь добавить тэг в файл позже. Вместо того, чтобы переписывать файл полностью, можно будет записать информацию вместо блока PADDING.
    -b #Устанавливает размер блока в сэмплах. По умолчанию 1152 для -l 0, иначе 4608. Стандартные потоки должны использовать одно из указаных значений: 192/576/1152/2304/4608/256/512/1024/2048/4096/8192/16384/32768. Сейчас енкодер использует постоянный размер блока для всего файла.
    -mВключает разностное кодирование (только для стерео потоков). Обычно увеличивает уровень сжатия на несколько процентов. Для каждого блока создается усредненная и стерео версия блока, сохраняется блок меньшего размера. Сейчас разностное кодирование доступно для файлов, где сэмпл имеет размер не больше 16 бит.
    -MВключает свободное разностное кодирование (только для стерео потоков). Работает аналогично -m, однако енкодер переключается между независимым и усредняющим кодированием адаптивно. Метод работает быстрее, но уровень сжатия меньше, так как -m производит полный перебор вариантов.
    -0..-9Быстрейшее сжатие ... максимальное сжатие. По умолчанию -5.
    -0Аналогично -l 0 -b 1152 -r 2,2.
    -1Аналогично -l 0 -b 1152 -r 2,2 -M.
    -2Аналогично -l 0 -b 1152 -r 3 -m.
    -3Аналогично -l 6 -b 4608 -r 3,3
    -4Аналогично -l 8 -b 4608 -r 3,3 -M.
    -5Аналогично -l 8 -b 4608 -r 3,3 -m.
    -6Аналогично -l 8 -b 4608 -r 4 -m.
    -7Аналогично -l 8 -b 4608 -r 6 -m -e.
    -8Аналогично -l 12 -b 4608 -r 6 -m -e.
    -9Аналогично -l 32 -b 4608 -r 16 -m -e -E -p. Работает очень медленно, но достигается максимальный уровень сжатия для данного размера блока.
    -eПолный поиск модели (работает медленно!). Обычно енкодер определяет лучшую модель и кодирует далее опираясь на нее. В данном режиме енкодер будет создавать подфреймы всех порядков и использовать наименьший. Если максимальное значение порядка LPC велико, время кодирования существенно возрастет. Выигрыш обычно составляет около 0.5%.
    -EИспользовать управляющие коды в кодере энтропии. Эта опция позволяет записывать незакодированное представление остатка в разделе, если его размер меньше. При этом время работы увеличивается, а уровень сжатия обычно улучшается примерно на 1%.
    -l #Определяет максимальный порядок LPC (коэффициентов линейного прогнозирования). Число должно быть меньше или равно 32. Если значение равно 0, енкодер будет использовать вместо общего линейного прогнозирования постоянные коэффициенты. Этот метод увеличивает скорость работы, но файлы получаются на 5-10% больше.
    -q #Определяет точность дискретных коэффициентов линейного прогнозирования в битах. По умолчанию -q 0, что позволяет енкодеру принимать решение в зависимости от сигнала. Лучше оставлять значение по умолчанию.
    -pПроизводить оптимизацию LPC. Переопределяет любую опцию -q. Сильно замедляет работу, и уменьшает размер файла на долю процента. -q не работает, когда используется -l 0.
    -r [#,]#Установить [min,]max порядок раздела. Если минимальное значение не указано, то оно устанавливается равным 0. По умолчанию енкодер один параметр Райса для всего остатка подфрейма. Если использовать эту опцию, остаток будет разделяться на 2^min# ... 2^max частей, для каждой из которых будет определен собственный параметр Райса. С увеличением параметра max выигрыш будет все меньше. Наиболее оптимальный вариант достигается при использовании -r 2,2 (и больших значений для больших размеров блоков). При этом сжатие обычно увеличивается на 1.5%. Выбор оптимального значения можно произвести по формуле размер_блока/(2^n)=128. Максимальный уровень сжатия достигается при использовании -r 0,16.
    -R #Установить пределы поиска параметра Райса. По умолчанию 0. Кодер остатков будет искать наилучший параметр Райса в указанном пределе для каждого раздела остатков. Использование этой опции не дает большого выигрыша, но сильно замедляет работу. В результате, опции -0 ... -9 не используют ее.
    -VПроверять процесс сжатия. В данном случае flac создает параллельный декодер, раскодирующий выход енкодера и сравнивает результат с оригиналом. Если будет найдено несоответствие, кодирование прекратится. Время работы с этой опцией увеличивается, однако, при этом гарантируется, что файл будет правильно декодирован.
     -S-, -m-, -V-, -e-, -E-, -p-, --lax-, --delete-input-file-, --sector-align используются для отключения соответствующих опций.
    + + +

    Настройки формата

    + + + + + + + + + + + + + + + + + + + + + + +
    -fb | -flОпределяет порядок байтов в файле без заголовка big-endian | little-endian.
    -fc nОпределяет количество каналов в файле без заголовка.
    -fp nОпределяет количество бит на сэмпл в файле без заголовка.
    -fs nОпределяет количество сэмплов в секунду в файле без заголовка.
    -fuУказывает, что сэмплы в файле без заголовка беззнаковые (по умолчанию знаковые).
    -frВоспринимать входной (или выходной при декодировании) файл как raw поток сэмплов вне зависимости от суффикса.
    -fwВоспринимать входной (или выходной при декодировании) файл как RIFF WAVE вне зависимости от суффикса.
    + + + +

    metaflac

    + +

    metaflac - это редактор метаданных, работающий из командной строки. Сейчас он только выводит содержимое блоков метаданных во .flac файле, но скоро с его помощью можно будет вставлять, удалять и редактировать блоки.

    + +

    Cейчас metaflac вызывается только одним способом:

    + +

    metaflac [-v] входной_файл

    + +

    Входным_файлом может быть "-" для стандартного ввода (stdin). если использовать -v, будет получен более подробный отчет.

    + + +
    +

    Плагин для XMMS

    + +

    Для его установки необходимо скопировать libxmms-flac.so в каталог, где находятся плагины ввода XMMS (обычно /usr/lib/xmms/Input). Больше ничего настраивать не надо. Для воспроизведения .flac файлов перезапустите XMMS.

    + + +
    +

    Плагин для Winamp

    + +

    Для его установки необходимо скопировать in_flac.dll в каталог, где находятся плагины ввода Winamp (обычно /Plugins). Больше ничего настраивать не надо. Для воспроизведения .flac файлов перезапустите Winamp.

    + + +
    +

    libFLAC

    + +

    Библиотека libFLAC является реализацией на C базового енкодера и декодера. Используя эту библиотеку и написав немного кода, можно добавить поддержку FLAC в свою программу. Условия распространения - LGPL. Исходные коды библиотеки libFLAC, также как и консольного кодека и плагинов доступны, и могут послужить хорошим примером для использования.

    + +

    libFLAC требует стандартную и математическую библиотеки для языка C. Потоки не используются, однако, так как libFLAC не использует глобальные переменные, библиотека должна быть thread-safe.

    + +

    Интерфейс libFLAC описан в публичных заголовочных файлах в каталоге include/FLAC. Для использования скомпилированной библиотеки нужны только публичные заголовки. Обратите внимание на то, что код из src/libFLAC/, включая защищенные заголовочные файлы из src/libFLAC/include/ не нужен.

    + +

    В основном использование libFLAC состоит в следующем:

    + +
      +
    1. Программа создает экземпляр енкодера или декодера с помощью функций *_new().
    2. + +
    3. Программа устанавливает параметры экземпляра и предоставляет ему обратные вызовы для чтения, записи, сообщения об ошибках и работы с метаданными с помощью функций *_set_*().
    4. + +
    5. Программа инициализирует экземпляр, проверяет параметры и готовится к кодированию/декодированию, используя функции *_init().
    6. + +
    7. Программа вызывает функции *_process_*() для кодирования или декодирования данных, которые в свою очередь делают обратные вызовы.
    8. + +
    9. Программа завершает работу экземпляра функцией *_finish(), которая сбрасывает буферы ввода и вывода.
    10. + +
    11. Экземпляр может быть использован снова либо удален функцией *_delete().
    12. + +
    + +

    Для декодирования libFLAC предоставляет два уровня доступа. На нижнем уровне находится декодер потоков, а на верхнем - файлов (являющийся в свою очередь оболочкой для потокового декодера). Интерфейсы описаны в файлах stream_decoder.h и file_decoder.h соответственно. Файловый декодер сам осуществляет обратные вызовы для чтения и предоставляет функции поиска. Енкодер пока что реализован только на потоковом уровне (stream_encoder.h).

    + +

    Структуры и константы, относящиеся к формату, определены в файле format.h.

    + + +

    ДЕКОДЕР ПОТОКОВ

    + +

    Сначала обсудим декодер потоков. Тип его экземпляра FLAC__StreamDecoder. Обычно в программе экземпляр создается вызовом FLAC__stream_decoder_new() и инициализируется FLAC__stream_decoder_init(). Программа также может предоставлять указатель client_data на FLAC__stream_decoder_init(), который будет использоваться для обратных вызовов.

    + + + +

    Когда декодер инициализирован, программа может вызвать одну из следующих функций для декодирования:

    + + + +

    Когда декодер заканчивает работу, экземпляр обрабатывается функцией FLAC__stream_decoder_finish(), которая проверяет состояние декодера и освобождает память. Затем экземпляр может быть удален функцией FLAC__stream_decoder_delete() или инициализирован заново для декодирования другого потока.

    + +

    Обратите внимание на то, что потоковый декодер не имеет представления о позиции в потоке, он только преобразовывает данные. Чтобы осуществлять поиск в потоке функции обратного вызова могут только сбрасывать данные декодера функцией FLAC__stream_decoder_flush() и начинать подавать данные с новой позиции с помощью обратного вызова для чтения. Декодер файлов поступает именно так.

    + + +

    ДЕКОДЕР ФАЙЛОВ

    + +

    Декодер файлов - это оболочка декодера потоков, призванная упростить процесс декодирования файлов. Тип его экземпляра - FLAC__FileDecoder. Отличие от потокового декодера состоит в том, что вместо обратного вызова для чтения (который обрабатывает сам декодер) при инициализации указывается путь к файлу. Остальные функции аналогичны эквивалентам в декодере потоков.

    + +

    Так как декодер файлов сам управляет входными данными, он может предоставить и поиск. Он осуществляется методом FLAC__file_decoder_seek_absolute(). В любой момент после инициализации декодера файлов программа может вызвать эту функцию для поиска сэмпла в файле. Впоследствии, при первом обратном вызове для записи он будет содержать (возжожно неполный) блок, начинающийся с этого сэмпла.

    + +

    Декодер файлов также предоставляет проверку подписи MD5. Если эта возможность будет включена перед инициализацией, FLAC__file_decoder_finish() сообщит, если подпись MD5 распакованных данных не совпадет с сохраненной в блоке STREAMINFO. Проверка MD5 автоматически выключается, если в блоке STREAMINFO нет подписи или при попытке осуществления поиска. + + +

    ЕНКОДЕР ПОТОКОВ

    + +

    Енкодер потоков работает аналогично декодеру, однако имеет меньше обратных вызовов и больше опций. Тип экземпляра - FLAC__StreamEncoder. Для создания нового экземпляра в программе нужно вызвать функцию FLAC__stream_encoder_new(), а чтобы проинициализировать его - FLAC__stream_encoder_init().

    + +

    В отличие от процесса декодирования кодирование в формат FLAC имеет множество опций, влияющих на скорость и уровень сжатия. Когда программа вызывает FLAC__stream_encoder_init(), енкодер проверяет значения, поэтому необходимо убедиться, что возвращемое этой функцией значение - FLAC__STREAM_ENCODER_OK. Для установки параметров нужно иметь некоторое представление о формате (см. описание формата для пользователя или его формальное описание). Список необходимых параметров приведен здесь:

    + + + +

    Программа должна предоставить FLAC__stream_encoder_init() адреса для следующих обратных вызовов: + +

    + +

    Вызов FLAC__stream_encoder_init() непосредственно производит обратный вызов для записи сигнатуры "fLaC" и всех определенных на данный момент метаданных.

    + +

    После инициализации экземпляра программа может передавать данные енкодеру двумя способами:

    + + + +

    Для завершения кодирования данных программа вызывает функцию FLAC__stream_encoder_finish(), которая кодирует оставшиеся данные из входного потока и делает обратный вызов для работы с метаданными с корректной статистикой о процессе кодирования. Экземпляр может быть удален функцией FLAC__stream_encoder_delete() или инициализирован снова для кодирования нового потока.

    + + +

    РАЗНОЕ

    + +

    Необходимо отметить, что когда передаются указатели на аудио данные, их порядок имеет значение только для стерео потоков. Канал 0 соответствует левому каналу, а 1 - правому.

    + + +

    МЕТАДАННЫЕ

    + +

    Программы, записывающие свои блоки метаданных APPLICATION, могут указать енкодеру, чтобы он записал блок метаданных PADDING нужного размера. В этом случае вместо перезаписи всего потока после кодирования программа сможет просто заменить блок PADDING на свой. Если известен только максимальный размер блока APPLICATION, программа может создать резервный блок чуть большего размера, а после кодирования разделить его на блоки APPLICATION и PADDING.

    + +

    Если размер блока метаданных APPLICATION известен заранее, размер резервируемой области может быть легко вычеслен. Если размер блока APPLICATION (не включая заголовок блока) равен N байтам, то экземпляру FLAC__StreamEncoder перед инициализацией нужно передать значение N+4. Это нужно, чтобы учесть дополнительное место необходимое для хранения идентификатора приложения.

    + +

    Когда известен только максимальный размер, скажем, N байт, нужно зарезервировать N+8 байт. Четыре для ID приложения и четыре для дополнительного блока PADDING, который заполнит оставшееся пространство. По окончании кодирования, когда размер блока данных APPLICATION становится известной и равной, допустим, M байтам, на место первоначального блока PADDING будет записан блок APPLICATION и блок PADDING длиной N-M байтов.

    + + + +

    Известные ошибки

    + +

    Отслеживание ошибок ведется на этой странице проекта, находящейся на SourceForge. Если Вы будете сообщать об ошибке, пожалуйста, оставьте e-mail для контакта.

    + +

     Copyright (c) 2001 Josh Coalson

    + + + diff --git a/doc/ru/features.html b/doc/ru/features.html index a7ad0a4e..f086f05f 100644 --- a/doc/ru/features.html +++ b/doc/ru/features.html @@ -1,132 +1,132 @@ - - - - - - - - - - -FLAC: характеристики - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    |начало |новости |файлы | - характеристики |цели |формат |
    |id |  -сравнение |  -разработка |документация |ссылки |авторы |
    - -

    - - - - - -
    |english | - русский |

    - - -

    FLAC: характеристики

    - -

    FLAC - это аббревиатура от free lossless audio codec (свободный кодек, обеспечивающий сжатие без потерь). Проект FLAC включает:

    - -

    - -

    "Свобода" означает, что спецификация потокового формата относится к категории public domain (проект FLAC оставляет за собой право устанавливать спецификации и сертифицировать относящиеся к нему продукты на совместимость), а также то, что ни формат, ни один из реализованных методов кодирования/декодирования не запатентованы. Это также значит, что исходники libFLAC доступны по лицензии LGPL, а исходники flac и плагинов - по GPL.

    - - -

    Характеристики FLAC:

    - -

    - -

    Некоторые дополнительные преимущества, вытекающие из приведенных выше характеристик:

    - -

    - -

    Чего нет во FLAC?

    - -

    - -

     Copyright (c) 2001 Josh Coalson

    - - - + + + + + + + + + + +FLAC: характеристики + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    |начало |новости |файлы | + характеристики |цели |формат |
    |id |  +сравнение |  +разработка |документация |ссылки |авторы |
    + +

    + + + + + +
    |english | + русский |

    + + +

    FLAC: характеристики

    + +

    FLAC - это аббревиатура от free lossless audio codec (свободный кодек, обеспечивающий сжатие без потерь). Проект FLAC включает:

    + +

    + +

    "Свобода" означает, что спецификация потокового формата относится к категории public domain (проект FLAC оставляет за собой право устанавливать спецификации и сертифицировать относящиеся к нему продукты на совместимость), а также то, что ни формат, ни один из реализованных методов кодирования/декодирования не запатентованы. Это также значит, что исходники libFLAC доступны по лицензии LGPL, а исходники flac и плагинов - по GPL.

    + + +

    Характеристики FLAC:

    + +

    + +

    Некоторые дополнительные преимущества, вытекающие из приведенных выше характеристик:

    + +

    + +

    Чего нет во FLAC?

    + +

    + +

     Copyright (c) 2001 Josh Coalson

    + + + diff --git a/doc/ru/format.html b/doc/ru/format.html index 3c8fca9b..7172180c 100644 --- a/doc/ru/format.html +++ b/doc/ru/format.html @@ -1,901 +1,901 @@ - - - - - - - - - - -FLAC: формат - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    |начало |новости |файлы |характеристики |цели | - формат |
    |id |сравнение |разработка |документация |ссылки |авторы |
    - -

    - - - - - -
    |english | - русский |

    - - -

    FLAC: формат

    - - -

    Формат

    - -

    Здесь приведено полное описание формата FLAC. Формат сейчас находится на стадии бета-тестирования. Это значит, что изменения, нарушающие обратную совместимость, будут вноситься только в случае обнаружения серьзных ошибок в формате. До первого официального релиза лучше воздержаться от использования FLAC для долговременного архивирования данных.

    - - -

    От автора

    - -

    Во-первых, как основной разработчик, я должен отметить, что не являюсь экспертом в области сжатия, поэтому чувствую себя обязанным поблагодарить многих людей, работавших над улучшением алгоритмов компрессии аудиоданных. Отдельную благодарность я выражаю:

    - -

    -
  • Э. Робинсону за работу над Shorten. Его код и статья послужили отправной точкой для нескольких основных методов, заложенных во FLAC. FLAC развил идею постоянных предикторов, используемую в Shorten.
  • - -
  • С. Голомбу и Роберту Райсу. Их универсальные коды используются кодером энтропии.
  • - -
  • Н. Левинсону и Дж. Дарбину. Базовый енкодер использует разработанный и улучшенный ими алгоритм для определения LPC коэффициентов из коэффициентов автокорреляции.
  • - -
  • И, конечно же, К. Шеннону.
  • -

    - -

    --Джош Колсон

    - - - -

    Область применения

    - -

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

    - -

    В области аудио существует множество возможных подразделов. Например, речь с низким битрейтом, многоканальная музыка с высокой частотой дискретизации и т.д. FLAC не нацелен на какой-либо подраздел, однако большинство параметров по умолчанию базового енкодера рассчитаны на CD-аудио (т.е. 44.1кГц, 2 канала, 16 бит на сэмпл). Влияние параметров кодирования на разные типы аудио будет рассмотрено позже.

    - -
    -

    Архитектура

    - -

    Подобно большинству программ подбного рода, енкодер FLAC выполняет следующие действия:

    - -

    -
  • Разбиение на блоки. Ввод разбивается на множество последовательных блоков, которые могут иметь различный размер. Оптимальный размер блока обычно зависит от многих факторов, таких как частота дискетизации, спектральная характеристика во времени и т.д. Несмотря на то, что формат FLAC позволяет использовать в потоке блоки различного размера, базовый енкодер использует постоянный размер.
  • - -
  • Межканальная декорреляция. В случае стереопотоков енкодер создает средний и разностный сигналы, основанные на среднем значении между левым и правым каналами и их разности соответственно. На следующий этап кодирования передается лучший из вариантов сжатого сигнала.
  • - -
  • Прогнозирование. Далее енкодер пытается найти математическое описание сигнала (обычно приблизительное). Зачастую оно значительно меньше самого сигнала. Так как методы предсказания известны и кодеру, и декодеру в потоке нужно указать только параметры предиктора. Сейчас FLAC использует четыре различных класса предикторов (описанных в разделе Прогнозирование), но в формате предусмотрено место для дополнительных методов. FLAC допускает изменение класса предиктора от блока к блоку и даже в пределах канала в блоке.
  • - -
  • Кодирование остатков. Если предиктор не описывает сигнал точно, разница между оригинальным сигналом и спрогнозированным (называемым еще ошибочным или остаточным) должна быть закодирована без потерь. Если предсказание эффективно, остаточный сигнал будет занимать меньше бит на сэмпл, чем оригинальный сигнал. Сейчас FLAC использует только один метод для кодирования остатков (см. раздел Кодирование остатков), однако в формате предусмотрено место для дополнительных методов. FLAC допускает изменение метода кодирования остатков от блока к блоку и даже в пределах канала в блоке.
  • -

    - -

    В дополнение ко всему определена система метаданных, позволяющая добавлять в начало потока произвольную информацию.

    - - - -

    Определения

    - -

    Многие термины, такие как "блок" и "фрейм", имеют различное значение в схемах кодирования. Например, фрейм в mp3 сооветствует многим сэмплам во всех каналах, в то время как фрейм S/PDIF представляет только один сэмпл для каждого канала. Обратите внимание на то, что, говоря о "блоках" и "подблоках", мы ссылаемся на незакодированные аудиоданные, а термины "фрейм" и "подфрейм" используем для данных сжатых FLAC.

    - -

    -
  • Блок - это один или более сэмплов, находящихся в нескольких каналах.
  • - -
  • Подблок - это один или более сэмплов из одного канала. Таким образом, блок содержит подблок для каждого канала и все подблоки в нем содержат одинаковое количество сэмплов.
  • - -
  • Размер блока - это количество сэмплов в любом из своих подблоков. Например, блок длиной в одну секунду с частотой дескретизации 44.1кГц имеет размер блока 44100 вне зависимости от количества каналов.
  • - -
  • Фрейм - это заголовок и один или несколько подфреймов.
  • - -
  • Подфрейм - это заголовок и один или несколько закодированных сэмплов из данного канала. Все подфреймы в данном фрейме содержат одинаковое количество сэмплов.
  • -

    - - -
    -

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

    - -

    Размер блоков сильно влияет на уровень сжатия. Если размер блока будет слишком мал, то в итоге получится очень много фреймов, а это значит, что на заголовки будет потрачено много битов. Если же размер блока большой, а характеристики сигнала сильно варьируются, енкодер не сможет найти хороший предиктор. Чтобы упростить кодек, FLAC определяет минимальный размер блока в 16 сэмплов, а максимальный в 65535 сэмплов. Этот интервал покрывает оптимальные размеры блоков для всех аудиоданных, поддерживаемых FLAC.

    - -

    Сейчас базовый енкодер использует постоянный размер блока, оптимизированный по частоте дискретизации ввода. Последующие версии смогут изменять размер блока в зависимости от характеристик сигнала.

    - -

    Разбитые на блоки данные передаются на стадию прогнозирования по одному подблоку. Каждый подблок кодируется в подфрейм независимо, а позже они объендиняются во фрейм. Так как каждый канал кодируется отдельно, это означает, что один канал стерео фрейма может сжиматься как постоянный подфрейм, а второй как LPC подфрейм.

    - - -
    -

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

    - -

    В большинстве случаев в стерео потоках существует достаточный уровень корреляции между левым и правым каналами. FLAC позволяет фреймам в стерео потоках иметь различное распределение каналов, а енкодер может использовать лучшее представление.

    - -

    -
  • Независимое. Левый и правый каналы кодируются независимо.
  • - -
  • Разностное. Левый и правый канал преобразовываются в средний и остаточный каналы. Средний канал - это среднее значение левого и правого сигналов, а остаточный - разница между ними (левый минус правый).
  • - -
  • Левостороннее. Кодируется левый и остаточный каналы.
  • - -
  • Правоостороннее. Кодируется правый и остаточный каналы.
  • -

    - -

    Оказывается, что левостороннее и правостороннее кодирование могут быть более эффективными во многих фреймах, несмотря на то, что необходимое для оригинального сигнала количество битов на сэмпл немного больше, чем для независимого или усредненного кодирования.

    - - -
    -

    Прогнозирование

    - -

    FLAC использует четыре метода для моделирования входного сигнала:

    - -

    -
  • Дословный. По существу это прогнозирование сигнала нулевого уровня. Предиктором сигнала является сам сигнал, потому сжатие не происходит. Это образец, с которым сверяются все остальные предикторы. Если передать енкодеру случайные данные, для всех подблоков скоре всего будет использован дословный предиктор. Так как необработанный сигнал не проходит стадию кодирования остатков, результаты не будут совпадать с линейным предиктором нулевого порядка.
  • - -
  • Постоянный. Этот предиктор используется, когда подблок содержит цифровую тишину, т.е. на вход поступает одна константа. Сигнал кодируется по всей длине и добавляется к потоку.
  • - -
  • Постоянный линейный предиктор. FLAC использует класс эффективно вычисляемых постоянных линейных предикторов (хорошее описание приведено у Shorten и AudioPak). FLAC добавляет предиктор четвертого уровня к использованным в Shorten предикторам от нулевого до третьего уровня. Так как предикторы постоянны, в сжатом потоке необходимо сохранить только порядок предиктора. Остаточный сигнал передается кодеру остатков.
  • - -
  • Линейное прогнозирование FIR. Для более точного моделирования (за счет медленной работы) FLAC поддерживает линейное прогнозирование FIR до 32 порядка (см. Shorten и AudioPak). Базовый енкодер использует метод Левинсона-Дарбина для расчета LPC коэффициентов из коэффициентов автокорреляции и коэффициенты разбиваются перед вычислением остатков. В то время как такие енкодеры как Shorten используют постоянное разбиение для всего ввода, FLAC позволяет для каждого фрейма менять точность коэффициента разбиения. Базовый енкодер FLAC оценивает оптимальную точность, основываясь на размере блока и диапазоне оригинального сигнала.
  • -

    - - -

    Кодирование остатков

    - -

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

    - -
      -
    1. Енкодер оценивает одиночный параметр Райса, основанный на разнице остатка и кодов Райса. Весь остаток кодируется с использованием этого параметра.
    2. - -
    3. Остаток делится на несколько интервалов одинаковой длины и каждый из них кодируется со своим параметром Райса, основанным на среднем значении для данного интервала.
    4. -
    - -

    Обратите внимание на то, что первый метод является частным случаем второго с одним интервалом. Отличие состоит в том, что в первом методе параметр Райса вычисляется для разницы остатка, а не для среднего значения.

    - -

    В формате FLAC зарезервировано место для других методов кодирования. Кто-нибудь может попытаться найти лучшее контекстное моделирование параметра Райса или кодирования Хаффмана. Описания нескольких универсальных кодов можно найти на страницах LOCO-I и pucrunch.

    - - - -

    Формат

    - -

    В этом разделе описывается формат файла. Формат FLAC не предусматривает поля для номера версии, однако содержит несколько зарезервированных позиций. Последующие версии смогут использовать это место без нарушения совместимости с предыдущими версиями. Более старые версии декодеров могут либо прекращать работу, либо пропускать данные, закодированные новыми методами. Кроме того зарезервированы некоторые специальные значения, которые не могут появиться ни в одной из версий формата. Это обычно делается для улучшения механизма синхронизации.

    - -

    Все числа в формате FLAC являются целыми, младший байт которых записывается вначале (big-endian). Числа являются беззнаковыми, кроме тех случаев, где явно указано обратное.

    - -
    -

    К потоку FLAC могут быть добавлены тэги ID3v1 (в конце) и ID3v2 (в начале). Эти данные не относятся к формату, однако декодер умеет пропускать их. Плагины ввода поддерживают тэги ID3v1.

    - -

    Перед полным описанием формата приведем его краткий обзор.

    - -

    -
  • Формат FLAC состоит из маркера "fLaC" в начале потока, за которым следует обязательный блок STREAMINFO, любое количество других блоков метаданных, а затем аудиофреймы.
  • - -
  • FLAC поддерживает до 128 блоков метаданных. Сейчас определены:
  • - -
    - -
  • Аудиопоток состоит из одного или нескольких фреймов. У каждого фрейма есть заголовок, состоящий из кода синхронизации, информации о фрейме (размер блока, частота дискретизации, количество каналов и т.п.) и восьмибитной контрольной суммы. Также в заголовке содержится либо номер первого сэмпла во фрейме относительно всего потока (для потоков с изменяющимся размером блока) или номер фрейма (для потоков с постоянным размером блока). Это позволяет производить быстрый и точный поиск. Далее следуют закодированные подфреймы (по одному на каждый канал) и, наконец, фрейм, дополненный нулями до границы байта. Каждый подфрейм имеет свой заголовок, определяющий способ его декодирования.
  • - -
  • Так как декодер может начать работу в середине потока, должен быть метод определения начала фрейма. Каждый фрейм начинается с 14-битного синхронизирующего кода. Этот код не может появляться ни в одном другом месте заголовка фрейма. Однако так как это код может появиться в подфреймах, у декодера есть два способа определить, что данная последовательность является началом фрейма. Сначала проверяется корректность данных во всем фрейме. Однако этот шаг не может гарантировать отсутствия ошибок, поэтому дополнительно производится расчет восьмибитной контрольной суммы заголовка фрейма и полученный результат сравнивается со значением, полученным при кодировании и записанным после заголовка фрейма.
  • - -
  • Каждый фрейм должен содержать основную информацию о потоке, так как декодер может не иметь доступа к блоку метаданных STREAMINFO в начале потока. Сюда входит частота дискретизации, количество бит на сэмпл, количество каналов и т.д. Так как заголовоки фреймов вносят дополнительные накладные расходы, то они влияют уровень сжатия. Чтобы сделать заголовки фреймов минимальными, FLAC использует таблицы поиска для наиболее часто используемых значений параметров фремов. Например, часть, отвечающая за частоту дискретизации, занимает 4 бита. Восемь предопределенных значений соответствуют наиболее самым распространенным частотам (8/16/22.05/24/32/44.1/48/96 кГц). Однако дополнительные частоты могут быть использованы с помощью специального набора битов, указывающего декодеру, что необходимое значение находится в конце заголовка. Такой же метод используется для указания размера блока и количества битов на сэмпл. В этом случае заголовок остается достаточно малым для наиболее распространенных типов аудиоданных.
  • - -
  • Подфреймы (по одному для каждого канала) кодируются во фрейме отдельно и хранятся в потоке последовательно. Это ведет к упрощению декодера, однако ценой этому является увеличение размеров буффера. У каждого подфрейма есть свой заголовок, определяющий его аттрибуты (метод и порядок прогнозирования, параметры кодирования остатков и т.д.). За заголовком следуют аудиоданные для этого канала.
  • - -
    -
  • Во FLAC определено специальное подмножество формата (Subset format). Все потоки сжатые этим методом на самом деле являются потоковыми, то есть декодер, который не может искать в потоке, имеет возможность перейти к любой его точке и начать воспроизведение. Для файлов, отвечающих этому подмножеству формата, значительно проще сделать аппаратный декодер. flac по умолчанию создает потоки, отвечающие этому подмножеству формата. Ключ --lax запрещает создание таких потоков. Чтобы файл отвечал данному подмножеству, для него должны выполняться следующие ограничения:
  • - - -

    - -

    В таблице приведено формальное описание формата FLAC. Числа в угловых скобках показывают количество битов, используемых данным полем.

    - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    ПОТОК
    <32>"fLaC", маркер потока FLAC в кодировке ASCII, означающий, что первыми четырьмя байтами потока являются 0x66, 0x4C, 0x61, 0x43
    БЛОК_МЕТАДАННЫХОбязательный блок метаданных STREAMINFO, содержащий основные свойства потока
    БЛОК_МЕТАДАННЫХ*Ноль или больше блоков метаданных
    ФРЕЙМ+Один или больше аудиофреймов

    - - -

    - - - - - - - - - - - - - - - -
    БЛОК_МЕТАДАННЫХ
    ЗАГОЛОВОК_БЛОКА_МЕТАДАННЫХЗаголовок, определяющий тип и размер блока метаданных
    СОДЕРЖИМОЕ_БЛОКА_МЕТАДАННЫХ 

    - - -

    - - - - - - - - - - - - - - - - - - - -
    ЗАГОЛОВОК_БЛОКА_МЕТАДАННЫХ
    <1>Флаг равный 1, если данный блок метаданных является последним перед аудиоблоками, 0 в противном случае
    <7>Тип блока: -
      -
    • 0 : STREAMINFO
    • -
    • 1 : PADDING
    • -
    • 2 : APPLICATION
    • -
    • 3 : SEEKTABLE
    • -
    • 4-127 : зарезервированы
    • -
    -
    <24>Длина в байтах соответствующего блока метаданных (не включает размер ЗАГОЛОВКА_БЛОКА_МЕТАДАННЫХ)

    - - -

    - - - - - - - - - - -
    СОДЕРЖИМОЕ_БЛОКА_МЕТАДАННЫХ
    БЛОК_МЕТАДАННЫХ_STREAMINFO || БЛОК_МЕТАДАННЫХ_PADDING || БЛОК_МЕТАДАННЫХ_APPLICATION || БЛОК_МЕТАДАННЫХ_SEEKTABLEСодержимое блока должно соответствовать типу блока, указанному в заголовке

    - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    БЛОК_МЕТАДАННЫХ_STREAMINFO
    <16>Минимальный размер блока в сэмплах в данном потоке.
    <16>Максимальный размер блока в сэмплах в данном потоке.
    <24>Минимальный размер фрейма в байтах в данном потоке. Если значение не известно, то 0
    <24>Максимальный размер фрейма в байтах в данном потоке. Если значение не известно, то 0
    <20>Частота дискретизации в Гц.
    <3>(Количество каналов) - 1. FLAC поддерживает от 1 до 8 каналов.
    <5>(Количество битов на сэмпл) - 1. FLAC поддерживает от 1 до 32 битов на сэмпл. Сейчас базовые декодер и енкодер поддерживают до 24 бит на сэмпл.
    <36>Количество сэмплов в потоке. Если здесь указан 0, то количество сэмплов не известно.
    <128>Подпись MD5 несжатых аудиоданных, которая позволяет декодеру обнаружить ошибку, даже если ее наличие не нарушает структуру потока.
     Примечания: -
      -
    • Во FLAC определен минимальный размер блока в 16 сэмплов и максимальный размер - 65535. Это значит, что значения от 0 до 15 в соответствующих полях являются ошибочными.
    • -
    -

    - - -

    - - - - - - - - - - -
    БЛОК_МЕТАДАННЫХ_PADDING
    <n>n бит со значением 0. n должно быть кратно 8.

    - - -

    - - - - - - - - - - - - - - - -
    БЛОК_МЕТАДАННЫХ_APPLICATION
    <32>Зарегистрированный id приложения (см. страницу регистрации)
    <n>Данные приложения. n должно быть кратно 8.

    - - -

    - - - - - - - - - - - - - - - -
    БЛОК_МЕТАДАННЫХ_SEEKTABLE
    SEEKPOINT+Одна или больше точек поиска.
     Примечания: -
      -
    • Количество точек поиска определяется в поле заголовка блока метаданных "длина" и равно длина / 18.
    • -
    -

    - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    БЛОК_МЕТАДАННЫХ_SEEKPOINT
    <64>Номер сэмпла в потоке первого сэмпла целевого фрейма или 0xFFFFFFFFFFFFFFFF для зарезервированной точки.
    <64>Смещение в байтах от первого байта первого заголовка фрейма до первого байта заголовка целевого фрейма.
    <16>Количество сэмплов в целевом фрейме.
     Примечания: -
      -
    • Для зарезервированных точек значения второго и третьего поля не определены.
    • -
    • Точки поиска должны быть отсортированы в таблице по возрастанию номера сэмпла.
    • -
    • Поля, содержащие номера первых сэмплов в целевом фрейме, должны быть уникальны для всех точек, за исключением зарезервированных.
    • -
    • Из двух предыдущих замечаний следует, что зарезервированных точек может быть любое количество, но они должны располагаться в конце таблицы.
    • -
    -

    - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    ФРЕЙМ
    ЗАГОЛОВОК_ФРЕЙМА 
    ПОДФРЕЙМ+Один подфрейм на канал
    <?>Выравнивание нулями на границу байта
    ЗАВЕРШЕНИЕ_ФРЕЙМА 

    - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ЗАГОЛОВОК_ФРЕЙМА
    <14>код синхронизации 11111111111110
    <2>Зарезервировано: -
      -
    • 00 : обязательное значение
    • -
    • 01-11 : зарезервировано для последующего использования
    • -
    -
    <4>Размер блока в сэмплах: -
      -
    • 0000 : получить из блока метаданных STREAMINFO
    • -
    • 0001 : 192 сэмпла
    • -
    • 0010-0101 : 576 * (2^(2-n)) сэмплов, т.е. 576/1152/2304/4608
    • -
    • 0110 : получить 8 битов (размер блока-1) из конца заголовка
    • -
    • 0111 : получить 16 битов (размер блока-1) из конца заголовка
    • -
    • 1000-1111 : 256 * (2^(n-8)) сэмплов, т.е. 256/512/1024/2048/4096/8192/16384/32768
    • -
    -
    <4>Частота дискретизации: -
      -
    • 0000 : получить из блока метаданных STREAMINFO
    • -
    • 0001-0011 : зарезервированы
    • -
    • 0100 : 8кГц
    • -
    • 0101 : 16кГц
    • -
    • 0110 : 22.05кГц
    • -
    • 0111 : 24кГц
    • -
    • 1000 : 32кГц
    • -
    • 1001 : 44.1кГц
    • -
    • 1010 : 48кГц
    • -
    • 1011 : 96кГц
    • -
    • 1100 : получить 8-битное значение частоты дискретизации (в кГц) из конца заголовка
    • -
    • 1101 : получить 16-битное значение частоты дискретизации (в Гц) из конца заголовка
    • -
    • 1110 : получить 16-битное значение частоты дискретизации (в дГц) из конца заголовка
    • -
    • 1111 : ошибочное значение, чтобы не допустить совпадение с кодом синхронизации
    • -
    -
    <4>Расположение каналов: -
      -
    • 0000-0111 : (количество независимых каналов)-1. Когда == 0001, канал 0 является левым, 1 - правым
    • -
    • 1000 : левостороннее стерео: канал 0 является левым, 1 - разностным
    • -
    • 1001 : правостороннее стерео: канал 0 является разностным, 1 - правым
    • -
    • 1010 : усредненное стерео: канал 0 является усредненным, 1 - разностным -
    • 1011-1111 : зарезервированы
    • -
    -
    <3>Количество битов на сэмпл: -
      -
    • 000 : получить из блока метаданных STREAMINFO
    • -
    • 001 : 8 бит на сэмпл
    • -
    • 010 : 12 бит на сэмпл
    • -
    • 011 : зарезервировано
    • -
    • 100 : 16 бит на сэмпл
    • -
    • 101 : 20 бит на сэмпл
    • -
    • 110 : 24 бит на сэмпл
    • -
    • 111 : зарезервировано
    • -
    -
    <1>Дополнение нулем до границы бита, чтобы не допустить ошибку синхронизации
    <?>Если (переменный размер блока)
    -    <8-56> : номер сэмпла в формате UTF-8 (размер декодируемого числа 36 бит)
    - иначе
    -    <8-48> : номер фрейма в формате UTF-8 (размер декодируемого числа 31 бит)
    <?>Если (битовая маска размера блока == 11x)
    -    8/16 бит (размер блока - 1)
    <?>Если (битовая маска частоты дискретизации == 11xx)
    -    частота дискретизации 8/16 бит
    <8>8-битная полиномальная контрольная сумма (x^8 + x^2 + x^1 + x^0) данных заголовка, включая код синхронизации (x инициализируется нулем).
     Примечания: -
      -
    • Биты размера блока 0000-0101 могут быть использованы только при постоянном их значении во всем блоке. Биты 0110-0111 могут использоваться в любом случае, декодер будет считать, что поток имеет переменную длину блока. Существует одно исключение: енкодер может использовать биты 0110-0111 в последнем фрейме потока с постоянным размером блока в том случае, если его длина не больше, чем используемая в всем потоке.
    • -
    -

    - - -

    - - - - - - - - - - -
    ЗАВЕРШЕНИЕ_ФРЕЙМА
    <16>16-битная полиномальная контрольная сумма (x^16 + x^15 + x^2 + x^0) всего фрейма (x инициализируется нулем).

    - - -

    - - - - - - - - - - - - - - - -
    ПОДФРЕЙМ
    ЗАГОЛОВОК_ПОДФРЕЙМА 
    ПОДФРЕЙМ_CONSTANT || ПОДФРЕЙМ_FIXED ||
    ПОДФРЕЙМ_LPC || ПОДФРЕЙМ_VERBATIM
    Тип подфрейма, определяемый в заголовке

    - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    ЗАГОЛОВОК_ПОДФРЕЙМА
    <1>Бит равный 0, чтобы предотвратить ошибку синхронизации.
    <6>Тип подфрейма: - -
    <1+k>Флаг 'неиспользуемые биты на сэмпл': -
      -
    • 0 : в исходном подблоке нет 'неиспользуемых битов', k=0
    • -
    • 1 : k 'неиспользуемых битов' в исходном подблоке, число записывается в унарном формате; т.е. для k=3 последовательность битов будет выглядеть так 001, для k=7 - 0000001.
    • -
    -
     Примечания: -
      -
    • 'Неиспользуемые биты' встречаются в блоке данных, если при заявленных n битах значимыми являются только m. Число k = n - m и будет определять количество 'неиспользуемых битов'. Например, если все 16-битные сэмплы в исходном подблоке выглядят как 'xxxxxxxxxxxxx000', то енкодер кодирует только 13 бит, и запоминает, что 3 бита являются 'неиспользуемыми'.
    • -
    -

    - - -

    - - - - - -
    - -ПОДФРЕЙМ_CONSTANT
    -<n>Несжатое постоянное значение подблока, n равно количеству битов на сэмпл во фрейме

    - - -

    - - - - - - - - - - - - - - - -
    ПОДФРЕЙМ_FIXED
    <n>Некодируемые начальные сэмплы (n равно количеству битов на сэмпл во фрейме, умноженному на порядок предиктора).
    ОСТАТОКЗакодированный остаток

    - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ПОДФРЕЙМ_LPC
    <n>Некодируемые начальные сэмплы (n равно количеству битов на сэмпл во фрейме, умноженному на порядок предиктора).
    <4>(точность дискретного коэффициета линейного прогнозирования (QLP)) - 1. Значение 1111 недопустимо.
    <5>Необходимый сдвиг дискретного коэффициета линейного прогнозирования в битах. (Примечание: это число - знаковое дополнение до двух).
    <n>Несжатые коэффициенты прогнозирования (n = точность QLP * порядок LPC) (Примечание: эти числа являются знаковыми дополнениями до двух).
    ОСТАТОКЗакодированный остаток

    - - -

    - - - - - - - - - - -
    ПОДФРЕЙМ_VERBATIM
    <n*i>Несжатый подблок, n равно количеству битов на сэмпл во фрейме, i - размеру блока

    - - -

    - - - - - - - - - - - - - - - - - - - - -
    ОСТАТОК
    <2>Метод кодирования остатков: -
      -
    • 00 : кодирование Райса
    • -
    • 01-11 : зарезервировано
    • -
    -
    ОСТАТКИ_СЖАТЫЕ_МЕТОДОМ_РАЙСА 
     Примечания: -
      -
    • Сейчас FLAC использует только один метод кодирования остатков
    • -
    -

    - - -

    - - - - - - - - - - - - - - - -
    ОСТАТКИ_СЖАТЫЕ_МЕТОДОМ_РАЙСА
    <4>Порядок раздела
    РАЗДЕЛ_РАЙСА+Далее следуют 2^порядок разделов

    - - -

    - - - - - - - - - - - - - - - -
    РАЗДЕЛ_РАЙСА
    <4(+5)>Параметр кодирования: -
      -
    • 0000-1110 : Параметр Райса.
    • -
    • 1111 : Код, означающий, что раздел является несжатым и в нем используются n битов на сэмпл. n представлено 5-битным числом. -
    -
    <?>Закодированный остаток. Количество сэмплов n в разделе определяется следующим образом: -
      -
    • Если порядок раздела равен 0, n равно размеру блока для фрейма.
    • -
    • иначе если это не первый раздел подфрейма, n = (размер блока для фрейма / (2^порядок раздела))
    • -
    • иначе n = (размер блока для фрейма / (2^порядок раздела)) - порядок предиктора
    • -
    -

    - - -

     Copyright (c) 2001 Josh Coalson

    - - - + + + + + + + + + + +FLAC: формат + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    |начало |новости |файлы |характеристики |цели | + формат |
    |id |сравнение |разработка |документация |ссылки |авторы |
    + +

    + + + + + +
    |english | + русский |

    + + +

    FLAC: формат

    + + +

    Формат

    + +

    Здесь приведено полное описание формата FLAC. Формат сейчас находится на стадии бета-тестирования. Это значит, что изменения, нарушающие обратную совместимость, будут вноситься только в случае обнаружения серьзных ошибок в формате. До первого официального релиза лучше воздержаться от использования FLAC для долговременного архивирования данных.

    + + +

    От автора

    + +

    Во-первых, как основной разработчик, я должен отметить, что не являюсь экспертом в области сжатия, поэтому чувствую себя обязанным поблагодарить многих людей, работавших над улучшением алгоритмов компрессии аудиоданных. Отдельную благодарность я выражаю:

    + +

    +
  • Э. Робинсону за работу над Shorten. Его код и статья послужили отправной точкой для нескольких основных методов, заложенных во FLAC. FLAC развил идею постоянных предикторов, используемую в Shorten.
  • + +
  • С. Голомбу и Роберту Райсу. Их универсальные коды используются кодером энтропии.
  • + +
  • Н. Левинсону и Дж. Дарбину. Базовый енкодер использует разработанный и улучшенный ими алгоритм для определения LPC коэффициентов из коэффициентов автокорреляции.
  • + +
  • И, конечно же, К. Шеннону.
  • +

    + +

    --Джош Колсон

    + + + +

    Область применения

    + +

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

    + +

    В области аудио существует множество возможных подразделов. Например, речь с низким битрейтом, многоканальная музыка с высокой частотой дискретизации и т.д. FLAC не нацелен на какой-либо подраздел, однако большинство параметров по умолчанию базового енкодера рассчитаны на CD-аудио (т.е. 44.1кГц, 2 канала, 16 бит на сэмпл). Влияние параметров кодирования на разные типы аудио будет рассмотрено позже.

    + +
    +

    Архитектура

    + +

    Подобно большинству программ подбного рода, енкодер FLAC выполняет следующие действия:

    + +

    +
  • Разбиение на блоки. Ввод разбивается на множество последовательных блоков, которые могут иметь различный размер. Оптимальный размер блока обычно зависит от многих факторов, таких как частота дискетизации, спектральная характеристика во времени и т.д. Несмотря на то, что формат FLAC позволяет использовать в потоке блоки различного размера, базовый енкодер использует постоянный размер.
  • + +
  • Межканальная декорреляция. В случае стереопотоков енкодер создает средний и разностный сигналы, основанные на среднем значении между левым и правым каналами и их разности соответственно. На следующий этап кодирования передается лучший из вариантов сжатого сигнала.
  • + +
  • Прогнозирование. Далее енкодер пытается найти математическое описание сигнала (обычно приблизительное). Зачастую оно значительно меньше самого сигнала. Так как методы предсказания известны и кодеру, и декодеру в потоке нужно указать только параметры предиктора. Сейчас FLAC использует четыре различных класса предикторов (описанных в разделе Прогнозирование), но в формате предусмотрено место для дополнительных методов. FLAC допускает изменение класса предиктора от блока к блоку и даже в пределах канала в блоке.
  • + +
  • Кодирование остатков. Если предиктор не описывает сигнал точно, разница между оригинальным сигналом и спрогнозированным (называемым еще ошибочным или остаточным) должна быть закодирована без потерь. Если предсказание эффективно, остаточный сигнал будет занимать меньше бит на сэмпл, чем оригинальный сигнал. Сейчас FLAC использует только один метод для кодирования остатков (см. раздел Кодирование остатков), однако в формате предусмотрено место для дополнительных методов. FLAC допускает изменение метода кодирования остатков от блока к блоку и даже в пределах канала в блоке.
  • +

    + +

    В дополнение ко всему определена система метаданных, позволяющая добавлять в начало потока произвольную информацию.

    + + + +

    Определения

    + +

    Многие термины, такие как "блок" и "фрейм", имеют различное значение в схемах кодирования. Например, фрейм в mp3 сооветствует многим сэмплам во всех каналах, в то время как фрейм S/PDIF представляет только один сэмпл для каждого канала. Обратите внимание на то, что, говоря о "блоках" и "подблоках", мы ссылаемся на незакодированные аудиоданные, а термины "фрейм" и "подфрейм" используем для данных сжатых FLAC.

    + +

    +
  • Блок - это один или более сэмплов, находящихся в нескольких каналах.
  • + +
  • Подблок - это один или более сэмплов из одного канала. Таким образом, блок содержит подблок для каждого канала и все подблоки в нем содержат одинаковое количество сэмплов.
  • + +
  • Размер блока - это количество сэмплов в любом из своих подблоков. Например, блок длиной в одну секунду с частотой дескретизации 44.1кГц имеет размер блока 44100 вне зависимости от количества каналов.
  • + +
  • Фрейм - это заголовок и один или несколько подфреймов.
  • + +
  • Подфрейм - это заголовок и один или несколько закодированных сэмплов из данного канала. Все подфреймы в данном фрейме содержат одинаковое количество сэмплов.
  • +

    + + +
    +

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

    + +

    Размер блоков сильно влияет на уровень сжатия. Если размер блока будет слишком мал, то в итоге получится очень много фреймов, а это значит, что на заголовки будет потрачено много битов. Если же размер блока большой, а характеристики сигнала сильно варьируются, енкодер не сможет найти хороший предиктор. Чтобы упростить кодек, FLAC определяет минимальный размер блока в 16 сэмплов, а максимальный в 65535 сэмплов. Этот интервал покрывает оптимальные размеры блоков для всех аудиоданных, поддерживаемых FLAC.

    + +

    Сейчас базовый енкодер использует постоянный размер блока, оптимизированный по частоте дискретизации ввода. Последующие версии смогут изменять размер блока в зависимости от характеристик сигнала.

    + +

    Разбитые на блоки данные передаются на стадию прогнозирования по одному подблоку. Каждый подблок кодируется в подфрейм независимо, а позже они объендиняются во фрейм. Так как каждый канал кодируется отдельно, это означает, что один канал стерео фрейма может сжиматься как постоянный подфрейм, а второй как LPC подфрейм.

    + + +
    +

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

    + +

    В большинстве случаев в стерео потоках существует достаточный уровень корреляции между левым и правым каналами. FLAC позволяет фреймам в стерео потоках иметь различное распределение каналов, а енкодер может использовать лучшее представление.

    + +

    +
  • Независимое. Левый и правый каналы кодируются независимо.
  • + +
  • Разностное. Левый и правый канал преобразовываются в средний и остаточный каналы. Средний канал - это среднее значение левого и правого сигналов, а остаточный - разница между ними (левый минус правый).
  • + +
  • Левостороннее. Кодируется левый и остаточный каналы.
  • + +
  • Правоостороннее. Кодируется правый и остаточный каналы.
  • +

    + +

    Оказывается, что левостороннее и правостороннее кодирование могут быть более эффективными во многих фреймах, несмотря на то, что необходимое для оригинального сигнала количество битов на сэмпл немного больше, чем для независимого или усредненного кодирования.

    + + +
    +

    Прогнозирование

    + +

    FLAC использует четыре метода для моделирования входного сигнала:

    + +

    +
  • Дословный. По существу это прогнозирование сигнала нулевого уровня. Предиктором сигнала является сам сигнал, потому сжатие не происходит. Это образец, с которым сверяются все остальные предикторы. Если передать енкодеру случайные данные, для всех подблоков скоре всего будет использован дословный предиктор. Так как необработанный сигнал не проходит стадию кодирования остатков, результаты не будут совпадать с линейным предиктором нулевого порядка.
  • + +
  • Постоянный. Этот предиктор используется, когда подблок содержит цифровую тишину, т.е. на вход поступает одна константа. Сигнал кодируется по всей длине и добавляется к потоку.
  • + +
  • Постоянный линейный предиктор. FLAC использует класс эффективно вычисляемых постоянных линейных предикторов (хорошее описание приведено у Shorten и AudioPak). FLAC добавляет предиктор четвертого уровня к использованным в Shorten предикторам от нулевого до третьего уровня. Так как предикторы постоянны, в сжатом потоке необходимо сохранить только порядок предиктора. Остаточный сигнал передается кодеру остатков.
  • + +
  • Линейное прогнозирование FIR. Для более точного моделирования (за счет медленной работы) FLAC поддерживает линейное прогнозирование FIR до 32 порядка (см. Shorten и AudioPak). Базовый енкодер использует метод Левинсона-Дарбина для расчета LPC коэффициентов из коэффициентов автокорреляции и коэффициенты разбиваются перед вычислением остатков. В то время как такие енкодеры как Shorten используют постоянное разбиение для всего ввода, FLAC позволяет для каждого фрейма менять точность коэффициента разбиения. Базовый енкодер FLAC оценивает оптимальную точность, основываясь на размере блока и диапазоне оригинального сигнала.
  • +

    + + +

    Кодирование остатков

    + +

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

    + +
      +
    1. Енкодер оценивает одиночный параметр Райса, основанный на разнице остатка и кодов Райса. Весь остаток кодируется с использованием этого параметра.
    2. + +
    3. Остаток делится на несколько интервалов одинаковой длины и каждый из них кодируется со своим параметром Райса, основанным на среднем значении для данного интервала.
    4. +
    + +

    Обратите внимание на то, что первый метод является частным случаем второго с одним интервалом. Отличие состоит в том, что в первом методе параметр Райса вычисляется для разницы остатка, а не для среднего значения.

    + +

    В формате FLAC зарезервировано место для других методов кодирования. Кто-нибудь может попытаться найти лучшее контекстное моделирование параметра Райса или кодирования Хаффмана. Описания нескольких универсальных кодов можно найти на страницах LOCO-I и pucrunch.

    + + + +

    Формат

    + +

    В этом разделе описывается формат файла. Формат FLAC не предусматривает поля для номера версии, однако содержит несколько зарезервированных позиций. Последующие версии смогут использовать это место без нарушения совместимости с предыдущими версиями. Более старые версии декодеров могут либо прекращать работу, либо пропускать данные, закодированные новыми методами. Кроме того зарезервированы некоторые специальные значения, которые не могут появиться ни в одной из версий формата. Это обычно делается для улучшения механизма синхронизации.

    + +

    Все числа в формате FLAC являются целыми, младший байт которых записывается вначале (big-endian). Числа являются беззнаковыми, кроме тех случаев, где явно указано обратное.

    + +
    +

    К потоку FLAC могут быть добавлены тэги ID3v1 (в конце) и ID3v2 (в начале). Эти данные не относятся к формату, однако декодер умеет пропускать их. Плагины ввода поддерживают тэги ID3v1.

    + +

    Перед полным описанием формата приведем его краткий обзор.

    + +

    +
  • Формат FLAC состоит из маркера "fLaC" в начале потока, за которым следует обязательный блок STREAMINFO, любое количество других блоков метаданных, а затем аудиофреймы.
  • + +
  • FLAC поддерживает до 128 блоков метаданных. Сейчас определены:
  • + +
    + +
  • Аудиопоток состоит из одного или нескольких фреймов. У каждого фрейма есть заголовок, состоящий из кода синхронизации, информации о фрейме (размер блока, частота дискретизации, количество каналов и т.п.) и восьмибитной контрольной суммы. Также в заголовке содержится либо номер первого сэмпла во фрейме относительно всего потока (для потоков с изменяющимся размером блока) или номер фрейма (для потоков с постоянным размером блока). Это позволяет производить быстрый и точный поиск. Далее следуют закодированные подфреймы (по одному на каждый канал) и, наконец, фрейм, дополненный нулями до границы байта. Каждый подфрейм имеет свой заголовок, определяющий способ его декодирования.
  • + +
  • Так как декодер может начать работу в середине потока, должен быть метод определения начала фрейма. Каждый фрейм начинается с 14-битного синхронизирующего кода. Этот код не может появляться ни в одном другом месте заголовка фрейма. Однако так как это код может появиться в подфреймах, у декодера есть два способа определить, что данная последовательность является началом фрейма. Сначала проверяется корректность данных во всем фрейме. Однако этот шаг не может гарантировать отсутствия ошибок, поэтому дополнительно производится расчет восьмибитной контрольной суммы заголовка фрейма и полученный результат сравнивается со значением, полученным при кодировании и записанным после заголовка фрейма.
  • + +
  • Каждый фрейм должен содержать основную информацию о потоке, так как декодер может не иметь доступа к блоку метаданных STREAMINFO в начале потока. Сюда входит частота дискретизации, количество бит на сэмпл, количество каналов и т.д. Так как заголовоки фреймов вносят дополнительные накладные расходы, то они влияют уровень сжатия. Чтобы сделать заголовки фреймов минимальными, FLAC использует таблицы поиска для наиболее часто используемых значений параметров фремов. Например, часть, отвечающая за частоту дискретизации, занимает 4 бита. Восемь предопределенных значений соответствуют наиболее самым распространенным частотам (8/16/22.05/24/32/44.1/48/96 кГц). Однако дополнительные частоты могут быть использованы с помощью специального набора битов, указывающего декодеру, что необходимое значение находится в конце заголовка. Такой же метод используется для указания размера блока и количества битов на сэмпл. В этом случае заголовок остается достаточно малым для наиболее распространенных типов аудиоданных.
  • + +
  • Подфреймы (по одному для каждого канала) кодируются во фрейме отдельно и хранятся в потоке последовательно. Это ведет к упрощению декодера, однако ценой этому является увеличение размеров буффера. У каждого подфрейма есть свой заголовок, определяющий его аттрибуты (метод и порядок прогнозирования, параметры кодирования остатков и т.д.). За заголовком следуют аудиоданные для этого канала.
  • + +
    +
  • Во FLAC определено специальное подмножество формата (Subset format). Все потоки сжатые этим методом на самом деле являются потоковыми, то есть декодер, который не может искать в потоке, имеет возможность перейти к любой его точке и начать воспроизведение. Для файлов, отвечающих этому подмножеству формата, значительно проще сделать аппаратный декодер. flac по умолчанию создает потоки, отвечающие этому подмножеству формата. Ключ --lax запрещает создание таких потоков. Чтобы файл отвечал данному подмножеству, для него должны выполняться следующие ограничения:
  • + + +

    + +

    В таблице приведено формальное описание формата FLAC. Числа в угловых скобках показывают количество битов, используемых данным полем.

    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    ПОТОК
    <32>"fLaC", маркер потока FLAC в кодировке ASCII, означающий, что первыми четырьмя байтами потока являются 0x66, 0x4C, 0x61, 0x43
    БЛОК_МЕТАДАННЫХОбязательный блок метаданных STREAMINFO, содержащий основные свойства потока
    БЛОК_МЕТАДАННЫХ*Ноль или больше блоков метаданных
    ФРЕЙМ+Один или больше аудиофреймов

    + + +

    + + + + + + + + + + + + + + + +
    БЛОК_МЕТАДАННЫХ
    ЗАГОЛОВОК_БЛОКА_МЕТАДАННЫХЗаголовок, определяющий тип и размер блока метаданных
    СОДЕРЖИМОЕ_БЛОКА_МЕТАДАННЫХ 

    + + +

    + + + + + + + + + + + + + + + + + + + +
    ЗАГОЛОВОК_БЛОКА_МЕТАДАННЫХ
    <1>Флаг равный 1, если данный блок метаданных является последним перед аудиоблоками, 0 в противном случае
    <7>Тип блока: +
      +
    • 0 : STREAMINFO
    • +
    • 1 : PADDING
    • +
    • 2 : APPLICATION
    • +
    • 3 : SEEKTABLE
    • +
    • 4-127 : зарезервированы
    • +
    +
    <24>Длина в байтах соответствующего блока метаданных (не включает размер ЗАГОЛОВКА_БЛОКА_МЕТАДАННЫХ)

    + + +

    + + + + + + + + + + +
    СОДЕРЖИМОЕ_БЛОКА_МЕТАДАННЫХ
    БЛОК_МЕТАДАННЫХ_STREAMINFO || БЛОК_МЕТАДАННЫХ_PADDING || БЛОК_МЕТАДАННЫХ_APPLICATION || БЛОК_МЕТАДАННЫХ_SEEKTABLEСодержимое блока должно соответствовать типу блока, указанному в заголовке

    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    БЛОК_МЕТАДАННЫХ_STREAMINFO
    <16>Минимальный размер блока в сэмплах в данном потоке.
    <16>Максимальный размер блока в сэмплах в данном потоке.
    <24>Минимальный размер фрейма в байтах в данном потоке. Если значение не известно, то 0
    <24>Максимальный размер фрейма в байтах в данном потоке. Если значение не известно, то 0
    <20>Частота дискретизации в Гц.
    <3>(Количество каналов) - 1. FLAC поддерживает от 1 до 8 каналов.
    <5>(Количество битов на сэмпл) - 1. FLAC поддерживает от 1 до 32 битов на сэмпл. Сейчас базовые декодер и енкодер поддерживают до 24 бит на сэмпл.
    <36>Количество сэмплов в потоке. Если здесь указан 0, то количество сэмплов не известно.
    <128>Подпись MD5 несжатых аудиоданных, которая позволяет декодеру обнаружить ошибку, даже если ее наличие не нарушает структуру потока.
     Примечания: +
      +
    • Во FLAC определен минимальный размер блока в 16 сэмплов и максимальный размер - 65535. Это значит, что значения от 0 до 15 в соответствующих полях являются ошибочными.
    • +
    +

    + + +

    + + + + + + + + + + +
    БЛОК_МЕТАДАННЫХ_PADDING
    <n>n бит со значением 0. n должно быть кратно 8.

    + + +

    + + + + + + + + + + + + + + + +
    БЛОК_МЕТАДАННЫХ_APPLICATION
    <32>Зарегистрированный id приложения (см. страницу регистрации)
    <n>Данные приложения. n должно быть кратно 8.

    + + +

    + + + + + + + + + + + + + + + +
    БЛОК_МЕТАДАННЫХ_SEEKTABLE
    SEEKPOINT+Одна или больше точек поиска.
     Примечания: +
      +
    • Количество точек поиска определяется в поле заголовка блока метаданных "длина" и равно длина / 18.
    • +
    +

    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    БЛОК_МЕТАДАННЫХ_SEEKPOINT
    <64>Номер сэмпла в потоке первого сэмпла целевого фрейма или 0xFFFFFFFFFFFFFFFF для зарезервированной точки.
    <64>Смещение в байтах от первого байта первого заголовка фрейма до первого байта заголовка целевого фрейма.
    <16>Количество сэмплов в целевом фрейме.
     Примечания: +
      +
    • Для зарезервированных точек значения второго и третьего поля не определены.
    • +
    • Точки поиска должны быть отсортированы в таблице по возрастанию номера сэмпла.
    • +
    • Поля, содержащие номера первых сэмплов в целевом фрейме, должны быть уникальны для всех точек, за исключением зарезервированных.
    • +
    • Из двух предыдущих замечаний следует, что зарезервированных точек может быть любое количество, но они должны располагаться в конце таблицы.
    • +
    +

    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    ФРЕЙМ
    ЗАГОЛОВОК_ФРЕЙМА 
    ПОДФРЕЙМ+Один подфрейм на канал
    <?>Выравнивание нулями на границу байта
    ЗАВЕРШЕНИЕ_ФРЕЙМА 

    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ЗАГОЛОВОК_ФРЕЙМА
    <14>код синхронизации 11111111111110
    <2>Зарезервировано: +
      +
    • 00 : обязательное значение
    • +
    • 01-11 : зарезервировано для последующего использования
    • +
    +
    <4>Размер блока в сэмплах: +
      +
    • 0000 : получить из блока метаданных STREAMINFO
    • +
    • 0001 : 192 сэмпла
    • +
    • 0010-0101 : 576 * (2^(2-n)) сэмплов, т.е. 576/1152/2304/4608
    • +
    • 0110 : получить 8 битов (размер блока-1) из конца заголовка
    • +
    • 0111 : получить 16 битов (размер блока-1) из конца заголовка
    • +
    • 1000-1111 : 256 * (2^(n-8)) сэмплов, т.е. 256/512/1024/2048/4096/8192/16384/32768
    • +
    +
    <4>Частота дискретизации: +
      +
    • 0000 : получить из блока метаданных STREAMINFO
    • +
    • 0001-0011 : зарезервированы
    • +
    • 0100 : 8кГц
    • +
    • 0101 : 16кГц
    • +
    • 0110 : 22.05кГц
    • +
    • 0111 : 24кГц
    • +
    • 1000 : 32кГц
    • +
    • 1001 : 44.1кГц
    • +
    • 1010 : 48кГц
    • +
    • 1011 : 96кГц
    • +
    • 1100 : получить 8-битное значение частоты дискретизации (в кГц) из конца заголовка
    • +
    • 1101 : получить 16-битное значение частоты дискретизации (в Гц) из конца заголовка
    • +
    • 1110 : получить 16-битное значение частоты дискретизации (в дГц) из конца заголовка
    • +
    • 1111 : ошибочное значение, чтобы не допустить совпадение с кодом синхронизации
    • +
    +
    <4>Расположение каналов: +
      +
    • 0000-0111 : (количество независимых каналов)-1. Когда == 0001, канал 0 является левым, 1 - правым
    • +
    • 1000 : левостороннее стерео: канал 0 является левым, 1 - разностным
    • +
    • 1001 : правостороннее стерео: канал 0 является разностным, 1 - правым
    • +
    • 1010 : усредненное стерео: канал 0 является усредненным, 1 - разностным +
    • 1011-1111 : зарезервированы
    • +
    +
    <3>Количество битов на сэмпл: +
      +
    • 000 : получить из блока метаданных STREAMINFO
    • +
    • 001 : 8 бит на сэмпл
    • +
    • 010 : 12 бит на сэмпл
    • +
    • 011 : зарезервировано
    • +
    • 100 : 16 бит на сэмпл
    • +
    • 101 : 20 бит на сэмпл
    • +
    • 110 : 24 бит на сэмпл
    • +
    • 111 : зарезервировано
    • +
    +
    <1>Дополнение нулем до границы бита, чтобы не допустить ошибку синхронизации
    <?>Если (переменный размер блока)
    +    <8-56> : номер сэмпла в формате UTF-8 (размер декодируемого числа 36 бит)
    + иначе
    +    <8-48> : номер фрейма в формате UTF-8 (размер декодируемого числа 31 бит)
    <?>Если (битовая маска размера блока == 11x)
    +    8/16 бит (размер блока - 1)
    <?>Если (битовая маска частоты дискретизации == 11xx)
    +    частота дискретизации 8/16 бит
    <8>8-битная полиномальная контрольная сумма (x^8 + x^2 + x^1 + x^0) данных заголовка, включая код синхронизации (x инициализируется нулем).
     Примечания: +
      +
    • Биты размера блока 0000-0101 могут быть использованы только при постоянном их значении во всем блоке. Биты 0110-0111 могут использоваться в любом случае, декодер будет считать, что поток имеет переменную длину блока. Существует одно исключение: енкодер может использовать биты 0110-0111 в последнем фрейме потока с постоянным размером блока в том случае, если его длина не больше, чем используемая в всем потоке.
    • +
    +

    + + +

    + + + + + + + + + + +
    ЗАВЕРШЕНИЕ_ФРЕЙМА
    <16>16-битная полиномальная контрольная сумма (x^16 + x^15 + x^2 + x^0) всего фрейма (x инициализируется нулем).

    + + +

    + + + + + + + + + + + + + + + +
    ПОДФРЕЙМ
    ЗАГОЛОВОК_ПОДФРЕЙМА 
    ПОДФРЕЙМ_CONSTANT || ПОДФРЕЙМ_FIXED ||
    ПОДФРЕЙМ_LPC || ПОДФРЕЙМ_VERBATIM
    Тип подфрейма, определяемый в заголовке

    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    ЗАГОЛОВОК_ПОДФРЕЙМА
    <1>Бит равный 0, чтобы предотвратить ошибку синхронизации.
    <6>Тип подфрейма: + +
    <1+k>Флаг 'неиспользуемые биты на сэмпл': +
      +
    • 0 : в исходном подблоке нет 'неиспользуемых битов', k=0
    • +
    • 1 : k 'неиспользуемых битов' в исходном подблоке, число записывается в унарном формате; т.е. для k=3 последовательность битов будет выглядеть так 001, для k=7 - 0000001.
    • +
    +
     Примечания: +
      +
    • 'Неиспользуемые биты' встречаются в блоке данных, если при заявленных n битах значимыми являются только m. Число k = n - m и будет определять количество 'неиспользуемых битов'. Например, если все 16-битные сэмплы в исходном подблоке выглядят как 'xxxxxxxxxxxxx000', то енкодер кодирует только 13 бит, и запоминает, что 3 бита являются 'неиспользуемыми'.
    • +
    +

    + + +

    + + + + + +
    + +ПОДФРЕЙМ_CONSTANT
    +<n>Несжатое постоянное значение подблока, n равно количеству битов на сэмпл во фрейме

    + + +

    + + + + + + + + + + + + + + + +
    ПОДФРЕЙМ_FIXED
    <n>Некодируемые начальные сэмплы (n равно количеству битов на сэмпл во фрейме, умноженному на порядок предиктора).
    ОСТАТОКЗакодированный остаток

    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ПОДФРЕЙМ_LPC
    <n>Некодируемые начальные сэмплы (n равно количеству битов на сэмпл во фрейме, умноженному на порядок предиктора).
    <4>(точность дискретного коэффициета линейного прогнозирования (QLP)) - 1. Значение 1111 недопустимо.
    <5>Необходимый сдвиг дискретного коэффициета линейного прогнозирования в битах. (Примечание: это число - знаковое дополнение до двух).
    <n>Несжатые коэффициенты прогнозирования (n = точность QLP * порядок LPC) (Примечание: эти числа являются знаковыми дополнениями до двух).
    ОСТАТОКЗакодированный остаток

    + + +

    + + + + + + + + + + +
    ПОДФРЕЙМ_VERBATIM
    <n*i>Несжатый подблок, n равно количеству битов на сэмпл во фрейме, i - размеру блока

    + + +

    + + + + + + + + + + + + + + + + + + + + +
    ОСТАТОК
    <2>Метод кодирования остатков: +
      +
    • 00 : кодирование Райса
    • +
    • 01-11 : зарезервировано
    • +
    +
    ОСТАТКИ_СЖАТЫЕ_МЕТОДОМ_РАЙСА 
     Примечания: +
      +
    • Сейчас FLAC использует только один метод кодирования остатков
    • +
    +

    + + +

    + + + + + + + + + + + + + + + +
    ОСТАТКИ_СЖАТЫЕ_МЕТОДОМ_РАЙСА
    <4>Порядок раздела
    РАЗДЕЛ_РАЙСА+Далее следуют 2^порядок разделов

    + + +

    + + + + + + + + + + + + + + + +
    РАЗДЕЛ_РАЙСА
    <4(+5)>Параметр кодирования: +
      +
    • 0000-1110 : Параметр Райса.
    • +
    • 1111 : Код, означающий, что раздел является несжатым и в нем используются n битов на сэмпл. n представлено 5-битным числом. +
    +
    <?>Закодированный остаток. Количество сэмплов n в разделе определяется следующим образом: +
      +
    • Если порядок раздела равен 0, n равно размеру блока для фрейма.
    • +
    • иначе если это не первый раздел подфрейма, n = (размер блока для фрейма / (2^порядок раздела))
    • +
    • иначе n = (размер блока для фрейма / (2^порядок раздела)) - порядок предиктора
    • +
    +

    + + +

     Copyright (c) 2001 Josh Coalson

    + + + diff --git a/doc/ru/goals.html b/doc/ru/goals.html index 3e7b8f5c..411f4e27 100644 --- a/doc/ru/goals.html +++ b/doc/ru/goals.html @@ -1,104 +1,104 @@ - - - - - - - - - - -FLAC: цели - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    |  -начало |новости |файлы |характеристики | - цели |формат |
    |id |сравнение |разработка |документация |ссылки |авторы |
    - -

    - - - - - -
    |english | - русский |

    - - -

    FLAC: цели

    - -

    Так как FLAC - это открытый проект, важно определить список целей, к чему нужно стремиться. Время от времени они могут немного изменяться, но всегда должны определять направление развития. изменения должны согласовываться с текущими целями и не пытаться включить в себя антицели.

    - -

    Цели

    - -

    - - -

    Антицели

    - -

    - -

     Copyright (c) 2001 Josh Coalson

    - - - + + + + + + + + + + +FLAC: цели + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    |  +начало |новости |файлы |характеристики | + цели |формат |
    |id |сравнение |разработка |документация |ссылки |авторы |
    + +

    + + + + + +
    |english | + русский |

    + + +

    FLAC: цели

    + +

    Так как FLAC - это открытый проект, важно определить список целей, к чему нужно стремиться. Время от времени они могут немного изменяться, но всегда должны определять направление развития. изменения должны согласовываться с текущими целями и не пытаться включить в себя антицели.

    + +

    Цели

    + +

    + + +

    Антицели

    + +

    + +

     Copyright (c) 2001 Josh Coalson

    + + + diff --git a/doc/ru/id.html b/doc/ru/id.html index 2e5a237f..f50c1887 100644 --- a/doc/ru/id.html +++ b/doc/ru/id.html @@ -1,122 +1,122 @@ - - - - - - - - - - -FLAC: регистрация id - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    |начало |новости |файлы |характеристики |цели |формат |
    | - id |сравнение |разработка |документация |ссылки |авторы |
    - -

    - - - - - -
    |english | - русский |

    - - -

    FLAC: регистрация id

    - -

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

    - -
    -
    - - - - - - - - - -
    * id приложения:
    * название приложения:
    * контактный e-mail:
    url приложения:
    url спецификации:
    - -

    Комментарий:

    - - -

    (* - обязательное поле)

    -
    - -

    id должен состоять из восьми символов [0..F] и не конфликтовать с существующими идентификаторами (внизу приведена таблица зарегистрированных id). Это 32-битное число будет сохранено в блоке в формате big-endian.

    - -

    Информация о приложении (но не e-mail) будет приведена в каталоге id. Вы можете предоставить также ссылку на страницу приложения и на спецификацию блока APPLICATION для вашего приложения.

    - -

    Подтверждение регистрации будет выслано Вам по почте.

    - -

    -
    - -

    Каталог id

    -

    Список зарегистрированных приложений и их id.

    - -

    - - - - - - - - - - -
    IDПриложение
    5346464C - "SFFL"Sound Font FLAC
    - - -

     Copyright (c) 2001 Josh Coalson

    - - - + + + + + + + + + + +FLAC: регистрация id + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    |начало |новости |файлы |характеристики |цели |формат |
    | + id |сравнение |разработка |документация |ссылки |авторы |
    + +

    + + + + + +
    |english | + русский |

    + + +

    FLAC: регистрация id

    + +

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

    + +
    +
    + + + + + + + + + +
    * id приложения:
    * название приложения:
    * контактный e-mail:
    url приложения:
    url спецификации:
    + +

    Комментарий:

    + + +

    (* - обязательное поле)

    +
    + +

    id должен состоять из восьми символов [0..F] и не конфликтовать с существующими идентификаторами (внизу приведена таблица зарегистрированных id). Это 32-битное число будет сохранено в блоке в формате big-endian.

    + +

    Информация о приложении (но не e-mail) будет приведена в каталоге id. Вы можете предоставить также ссылку на страницу приложения и на спецификацию блока APPLICATION для вашего приложения.

    + +

    Подтверждение регистрации будет выслано Вам по почте.

    + +

    +
    + +

    Каталог id

    +

    Список зарегистрированных приложений и их id.

    + +

    + + + + + + + + + + +
    IDПриложение
    5346464C - "SFFL"Sound Font FLAC
    + + +

     Copyright (c) 2001 Josh Coalson

    + + + diff --git a/doc/ru/links.html b/doc/ru/links.html index 20f78e93..46e346d3 100644 --- a/doc/ru/links.html +++ b/doc/ru/links.html @@ -1,110 +1,110 @@ - - - - - - - - - - -FLAC: начало - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    |начало |новости |файлы |характеристики |цели |формат |
    |id |сравнение |разработка |документация | - ссылки |авторы |
    - -

    - - - - - -
    |english | - русский |

    - - -

    FLAC: ссылки

    - -

    -
  • Документация FLAC на английском языке
  • - -
  • Страница проекта FLAC на SourceForge
  • - -
  • Страница на Freshmeat
  • - -
  • Основные принципы сжатия без потерь
  • - -
  • Утилиты для сжатия аудио
  • -

    - - -

    Программы, использующие FLAC:

    - -

    -
  • Baudline анализатор сигнала
  • - -
  • Split_wav WAV+CUE splitter
  • - -
  • rawrec/rawplay утилиты для записи и воспроизведения
  • - -
  • GStreamer система для потовой передачи медиа-файлов
    - -
  • Soepkip TNG плейер, управляемый через web-интерфейс
  • - - - -

    - -

     Copyright (c) 2001 Josh Coalson

    - - - + + + + + + + + + + +FLAC: начало + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    |начало |новости |файлы |характеристики |цели |формат |
    |id |сравнение |разработка |документация | + ссылки |авторы |
    + +

    + + + + + +
    |english | + русский |

    + + +

    FLAC: ссылки

    + +

    +
  • Документация FLAC на английском языке
  • + +
  • Страница проекта FLAC на SourceForge
  • + +
  • Страница на Freshmeat
  • + +
  • Основные принципы сжатия без потерь
  • + +
  • Утилиты для сжатия аудио
  • +

    + + +

    Программы, использующие FLAC:

    + +

    +
  • Baudline анализатор сигнала
  • + +
  • Split_wav WAV+CUE splitter
  • + +
  • rawrec/rawplay утилиты для записи и воспроизведения
  • + +
  • GStreamer система для потовой передачи медиа-файлов
    + +
  • Soepkip TNG плейер, управляемый через web-интерфейс
  • + + + +

    + +

     Copyright (c) 2001 Josh Coalson

    + + + diff --git a/doc/ru/news.html b/doc/ru/news.html index 5afbb2b3..ad5d8237 100644 --- a/doc/ru/news.html +++ b/doc/ru/news.html @@ -1,136 +1,136 @@ - - - - - - - - - - -FLAC: новости - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    |начало | - новости |файлы |характеристики |цели |формат |
    |id |сравнение |разработка |документация |ссылки |авторы |
    - -

    - - - - - -
    |english | - русский |

    - -

    FLAC: новости

    - -

  • 20.07.2001
    -Вышла версия FLAC 1.0! Добавлено несколько новых возможностей, но в основном исправления ошибок.

    - -

    - - -

  • 07.06.2001

  • -Вышла версия FLAC 0.10. Скорее всего это последняя бета версия. За последние два месяца было сделано много улучшений.

    - -

    - - -

  • 31.03.2001

  • -Вышла версия 0.9. Исправлены плагины для Winamp и XMMS. Изменен формат (надеюсь, последний раз). Потеряна совместимость со всеми предыдущими версиями.

    - - -

  • 24.03.2001

  • -Близится выход версии 0.9, в которой должен быть исправлен плагин для Winamp. Джош обратился через список рассылки, чтобы после выхода этой версии к нему обратились с пожеланиями (особенно радикальными, которые могут коснуться формата).

    - - -

  • 21.03.2001

  • -Текущая версия FLAC - 0.8. Начат перевод документации.

    - - -

  • 10.12.2000

  • -FLAC выложен на SourceForge. Посетите страницу проекта, чтобы подписаться на список расылки или стать разработчиком.

    - -

     Copyright (c) 2001 Josh Coalson

    - - - + + + + + + + + + + +FLAC: новости + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    |начало | + новости |файлы |характеристики |цели |формат |
    |id |сравнение |разработка |документация |ссылки |авторы |
    + +

    + + + + + +
    |english | + русский |

    + +

    FLAC: новости

    + +

  • 20.07.2001
    +Вышла версия FLAC 1.0! Добавлено несколько новых возможностей, но в основном исправления ошибок.

    + +

    + + +

  • 07.06.2001

  • +Вышла версия FLAC 0.10. Скорее всего это последняя бета версия. За последние два месяца было сделано много улучшений.

    + +

    + + +

  • 31.03.2001

  • +Вышла версия 0.9. Исправлены плагины для Winamp и XMMS. Изменен формат (надеюсь, последний раз). Потеряна совместимость со всеми предыдущими версиями.

    + + +

  • 24.03.2001

  • +Близится выход версии 0.9, в которой должен быть исправлен плагин для Winamp. Джош обратился через список рассылки, чтобы после выхода этой версии к нему обратились с пожеланиями (особенно радикальными, которые могут коснуться формата).

    + + +

  • 21.03.2001

  • +Текущая версия FLAC - 0.8. Начат перевод документации.

    + + +

  • 10.12.2000

  • +FLAC выложен на SourceForge. Посетите страницу проекта, чтобы подписаться на список расылки или стать разработчиком.

    + +

     Copyright (c) 2001 Josh Coalson

    + + +