translation fixes

This commit is contained in:
Andrey Astafiev 2002-06-08 09:25:14 +00:00
parent cc68251f5a
commit 02783cd1d5

View File

@ -116,12 +116,12 @@
<H4>Аудиоданные</H4>
<P>За метаданным следуют сжатые аудиоданные. Метаданные и аудиоданные не чередуются. Как и большинство кодеков FLAC делит входной поток на блоки и кодирует их независимо друг от друга. Блок упаковыватся во фрейм и добавляется к потоку. Базовый енкодер использует блоки постоянного размера для всего потока, однако формат предусматривает наличие блоков разной длины в потоке.</P>
<P>За метаданным следуют сжатые аудиоданные. Метаданные и аудиоданные не чередуются. Как и большинство кодеков FLAC делит входной поток на блоки и кодирует их независимо друг от друга. Блок упаковыватся во фрейм и добавляется к потоку. Базовый кодер использует блоки постоянного размера для всего потока, однако формат предусматривает наличие блоков разной длины в потоке.</P>
<H4>Разбиение на блоки</H4>
<P>Размер блока - очень важный параметр для кодирования. Если он очень мал, то в потоке будет слишком заголовков фреймов, что уменьшит уровень сжатия. Если размер большой, то енкодер не сможет подобрать эффективную модель сжатия. Понимание процесса моделирования поможет Вам увеличить уровень сжатия для некоторых типов входных данных. Обычно при использовании линейного прогнозирования на аудиоданных с частотой дискретизации 44.1 кГц оптимальный размер блока лежит в диапазоне 2-6 тысяч сэмплов. В этом случае значение по умолчанию - 4608. Если использовать быстрые постоянные предикторы, предпочтительнее меньшие размеры блоков, так как в этом случае размеры заголовков фреймов меньше.</P>
<P>Размер блока - очень важный параметр для кодирования. Если он очень мал, то в потоке будет слишком заголовков фреймов, что уменьшит уровень сжатия. Если размер большой, то кодер не сможет подобрать эффективную модель сжатия. Понимание процесса моделирования поможет Вам увеличить уровень сжатия для некоторых типов входных данных. Обычно при использовании линейного прогнозирования на аудиоданных с частотой дискретизации 44.1 кГц оптимальный размер блока лежит в диапазоне 2-6 тысяч сэмплов. В этом случае значение по умолчанию - 4608. Если использовать быстрые постоянные предикторы, предпочтительнее меньшие размеры блоков, так как в этом случае размеры заголовков фреймов меньше.</P>
<H4>Межканальная декорреляция</H4>
@ -131,18 +131,18 @@
<H4>Моделирование</H4>
<P>На следующем этапе енкодер пытается аппроксимировать сигнал такой функцией, чтобы полученный после ее вычитания из оригинала результат (называемый разностью, остатком, ошибкой) можно было закодировать минимальным количеством битов. Параметры функций тоже должны записываться, поэтому они не должны занимать много места. FLAC использует два метода формирования аппроксимаций: 1) подгонка простого полинома к сигналу и 2) общее кодирование с линейными предикторами (LPC).</P>
<P>На следующем этапе кодер пытается аппроксимировать сигнал такой функцией, чтобы полученный после ее вычитания из оригинала результат (называемый разностью, остатком, ошибкой) можно было закодировать минимальным количеством битов. Параметры функций тоже должны записываться, поэтому они не должны занимать много места. FLAC использует два метода формирования аппроксимаций: 1) подгонка простого полинома к сигналу и 2) общее кодирование с линейными предикторами (LPC).</P>
<P>Во-первых, постоянное полиномиальное предсказание (<TT>-l 0</TT>) работает значительно быстрее, но менее точно, чем LPC. Чем выше порядок LPC, тем медленнее, но лучше будет модель. Однако с увеличением порядка выигрыш будет все менее значительным. В некоторой точке (обычно около 9) процедура енкодера, определяющая наилучший порядок, начинает ошибаться и размер получаемых фреймов возрастает. Чтобы преодолеть это, можно использовать полный перебор (опция <TT>-e</TT>), что приведет к значительному увеличению времени кодирования.</P>
<P>Во-первых, постоянное полиномиальное предсказание (<TT>-l 0</TT>) работает значительно быстрее, но менее точно, чем LPC. Чем выше порядок LPC, тем медленнее, но лучше будет модель. Однако с увеличением порядка выигрыш будет все менее значительным. В некоторой точке (обычно около 9) процедура кодера, определяющая наилучший порядок, начинает ошибаться и размер получаемых фреймов возрастает. Чтобы преодолеть это, можно использовать полный перебор (опция <TT>-e</TT>), что приведет к значительному увеличению времени кодирования.</P>
<P>Во-вторых, параметры для постоянных предикторов могут быть описаны тремя битами, а параметры для модели LPC зависят от количества бит на сэмпл и порядка LPC. Это значит, что размер заголовка фрейма зависит от выбранного метода и порядка и может повлиять на оптимальный размер блока.</P>
<H4>Остаточное кодирование</H4>
<P>Когда модель подобрана, енкодер вычитает приближение из оригинала, чтобы получить остаточный (ошибочный) сигнал, который затем кодируется без потерь. Для этого используется то обстоятельство, что разностный сигнал обычно имеет распределение Лапласа и есть набор специальный кодов Хаффмана, называемые кодами Райса, позволяющие эффективно и быстро кодировать эти сигналы без использования словаря.</P>
<P>Когда модель подобрана, кодер вычитает приближение из оригинала, чтобы получить остаточный (ошибочный) сигнал, который затем кодируется без потерь. Для этого используется то обстоятельство, что разностный сигнал обычно имеет распределение Лапласа и есть набор специальный кодов Хаффмана, называемые кодами Райса, позволяющие эффективно и быстро кодировать эти сигналы без использования словаря.</P>
<P>Кодирование Райса состоит из нахождения одного параметра, отвечающего распределению сигнала, а затем использования его для составления кодов. При изменении распределения меняется и оптимальный параметр, поэтому имеется метод позволяющий пересчитывать его по необходимости. Остаток может быть разбит на <I>контексты</I> или <I>разделы</I>, у каждого из которых будет свой параметр Райса. <B><TT>flac</TT></B> позволяет указать, как нужно производить разбиение, с помощью опции <TT>-r</TT>. Остаток может быть разбит на <I>2^n</I> раздела, если использовать <TT>-r n,n</TT>. Параметр <I>n</I> называется порядком раздела. Также енкодер может искать в пределах от <I>m</I> до <I>n</I> порядка, выбирая лучший вариант, если указать <TT>-r m,n</TT>. Обычно выбор <I>n</I> не влияет на скорость кодирования. От разницы между <I>m</I> и <I>n</I> сильно зависит время работы, чем она больше, тем больше времени будет затрачиваться на поиск лучшего порядка. Выбор размера блока также влияет на оптимальный порядок раздела.</P>
<P>Кодирование Райса состоит из нахождения одного параметра, отвечающего распределению сигнала, а затем использования его для составления кодов. При изменении распределения меняется и оптимальный параметр, поэтому имеется метод позволяющий пересчитывать его по необходимости. Остаток может быть разбит на <I>контексты</I> или <I>разделы</I>, у каждого из которых будет свой параметр Райса. <B><TT>flac</TT></B> позволяет указать, как нужно производить разбиение, с помощью опции <TT>-r</TT>. Остаток может быть разбит на <I>2^n</I> раздела, если использовать <TT>-r n,n</TT>. Параметр <I>n</I> называется порядком раздела. Также кодер может искать в пределах от <I>m</I> до <I>n</I> порядка, выбирая лучший вариант, если указать <TT>-r m,n</TT>. Обычно выбор <I>n</I> не влияет на скорость кодирования. От разницы между <I>m</I> и <I>n</I> сильно зависит время работы, чем она больше, тем больше времени будет затрачиваться на поиск лучшего порядка. Выбор размера блока также влияет на оптимальный порядок раздела.</P>
<H4>Составление фреймов</H4>
@ -154,13 +154,13 @@
<P>Чтобы поддерживать основные типы метаданных, базовый декодер умеет пропускать теги ID3V1 и ID3V2, поэтому их можно свободно добавлять. Теги ID3V2 должны располагаться перед маркером &quot;fLaC&quot;, а теги ID3V1 - в конце файла.</P>
<P>У <B><TT>flac</TT></B> есть опция (<TT>-V</TT>) для проверки выходных данных при кодировании. В этом случае декодер работает одновременно с енкодером и его выход сравнивается с оригинальным вводом. Если будет найдено отличие, <B><TT>flac</TT></B> закончит работу с сообщением об ошибке.</P>
<P>У <B><TT>flac</TT></B> есть опция (<TT>-V</TT>) для проверки выходных данных при кодировании. В этом случае декодер работает одновременно с кодером и его выход сравнивается с оригинальным вводом. Если будет найдено отличие, <B><TT>flac</TT></B> закончит работу с сообщением об ошибке.</P>
<A NAME="flac">
<H3><B><TT>flac</TT></B></H3>
<P><B><TT>flac</TT></B> - это кодек, работающий из командной строки. Входом для енкодера и выходом для декодера должен быть либо данные в формате RIFF WAVE, либо поток сэмплов без заголовка. <B><TT>flac</TT></B> использует только линейные PCM сэмплы (другими словами, A-LAW, uLAW, и т.п. не поддерживаются). Следующим ограничением является то, что во кодируемом файле сэмплы должны быть 8, 16 или 24-битными. Это не ограничение формата, просто так работают базовый енкодер и декодер.</P>
<P><B><TT>flac</TT></B> - это кодек, работающий из командной строки. Входом для кодера и выходом для декодера должен быть либо данные в формате RIFF WAVE, либо поток сэмплов без заголовка. <B><TT>flac</TT></B> использует только линейные PCM сэмплы (другими словами, A-LAW, uLAW, и т.п. не поддерживаются). Следующим ограничением является то, что во кодируемом файле сэмплы должны быть 8, 16 или 24-битными. Это не ограничение формата, просто так работают базовый кодер и декодер.</P>
<P><B><TT>flac</TT></B> предполагает, что файлы RIFF WAVE имеют суффикс ".wav"; это умолчание может быть переопределено специальным ключом. Также предполагается, что файлы с суффиком ".ogg" имеют формат Ogg-FLAC. В остальных случаях <B><TT>flac</TT></B> не делает предположений о суффиксах, хотя по соглашению файлы FLAC имеют суффикс ".flac" (или ".fla" на старых файловых системах таких как FAT-16).</P>
@ -243,7 +243,6 @@
<H4><a name="analysis_options">Опции анализа</H4>
<TABLE border=1>
<TR><TD width=15%><TT>--a-rtext</TT></TD>
<TD width=85%>Добавляет в файл остаточный сигнал. Результирующий файл получается <B>очень большим</B>.</TD></TR>
@ -252,6 +251,7 @@
</TABLE>
<H4><a name="decoding_options">Опции декодирования</H4>
<TABLE border=1>
<TR><TD width=15%><TT>-F</TT></TD>
<TD width=85%>По умолчанию <B><TT>flac</TT></B> прекращает декодирование
в случае ошибки в потоке и удаляет частично декодированный файл.
@ -270,11 +270,11 @@
<P>При декодировании формат ввода однозначно определяется как Ogg-FLAC. Это полезно при получении данных со стандартного ввода или если у файла суффикс не '.ogg'.</P></TD></TR>
<TR><TD><TT>--lax</TT></TD>
<TD>Позволяет енкодеру создавать файлы, отвечающие подмножеству формата FLAC. В результате работы будет получаться непотоковый файл, поэтому этот ключ следует использовать только для архивирования. Декодер будет поддерживать воспроизведение и поиск в таких файлах.</TD></TR>
<TD>Позволяет кодеру создавать файлы, отвечающие подмножеству формата FLAC. В результате работы будет получаться непотоковый файл, поэтому этот ключ следует использовать только для архивирования. Декодер будет поддерживать воспроизведение и поиск в таких файлах.</TD></TR>
<TR><TD><TT>--sector-align</TT></TD>
<TD>
<P>При кодировании нескольких WAVE файлов формата CD-Audio выравнивать их на границу сектора. Эта опция применима только для кодирования нескольких WAVE файлов, каждый из которых должен иметь частоту дискретизации 44.1 кГц и два канала. Если будет указана эта опция енкодер выровняет потоки .flac так,
<P>При кодировании нескольких WAVE файлов формата CD-Audio выравнивать их на границу сектора. Эта опция применима только для кодирования нескольких WAVE файлов, каждый из которых должен иметь частоту дискретизации 44.1 кГц и два канала. Если будет указана эта опция кодер выровняет потоки .flac так,
что их длины будут кратны размеру сектора CD-Audio (равны 1/75 секундам или 588 сэмплам). Это осуществляется переносом части сектора в конце каждого WAVE файла в начало следующего. Последний поток будет дополнен до границы выравнивания нулями.</P>
<P>Использование этой опции не приведет ни к чему, если файлы уже выровнены (например, если правильно скопированы с аудио-CD). <TT><B>flac</B></TT> может выровнять только несколько файлов за один вызов.</P>
@ -294,7 +294,7 @@
<P>Опцию <TT>-S</TT> можно использовать несколько раз. В результате получится объединенная таблица, в которой будут присутствовать только уникальные значения.<BR>
По умолчанию <B><TT>flac</TT></B> использует <TT>-S 100x</TT>. Если таблица поиска не нужна, укажите <TT>-S-</TT>.<BR>
<B>ПРИМЕЧАНИЕ</B>: <TT>-S #x</TT> не будет работать, если енкодер не сможет определить размер входного файла в начале работы.<BR>
<B>ПРИМЕЧАНИЕ</B>: <TT>-S #x</TT> не будет работать, если кодер не сможет определить размер входного файла в начале работы.<BR>
<B>ПРИМЕЧАНИЕ</B>: если <I>#</I> больше или равен количеству сэмплов во входном файле, то точки добавлены не будут, если размер можно определить до кодирования, в противном случае будут записаны резервируемые точки.</P>
</TD></TR>
@ -302,13 +302,13 @@
<TD>Eнкодер запишет блок метаданных <TT>PADDING</TT>, указанного размера (в байтах), после блока <TT>STREAMINFO</TT>. Ключи <TT>-P 0</TT> или <TT>-P-</TT> указывают, что блок <TT>PADDING</TT> не нужен (значение по умолчанию). Этот блок полезен, если вы собираетесь добавить тэг в файл позже. Вместо того, чтобы переписывать файл полностью, можно будет записать информацию вместо блока <TT>PADDING</TT>. Обратите внимание на то, что общий размер блока <TT>PADDING</TT> будет на 4 байта больше, так как 4 байта занимает заголовок.</TD></TR>
<TR><TD><TT>-b #</TT></TD>
<TD>Устанавливает размер блока в сэмплах. По умолчанию <TT>1152</TT> для <TT>-l 0</TT>, иначе <TT>4608</TT>. Стандартные потоки должны использовать одно из указаных значений: <TT>192/576/1152/2304/4608/256/512/1024/2048/4096/8192/16384/32768</TT>. Сейчас енкодер использует постоянный размер блока для всего файла.</TD></TR>
<TD>Устанавливает размер блока в сэмплах. По умолчанию <TT>1152</TT> для <TT>-l 0</TT>, иначе <TT>4608</TT>. Стандартные потоки должны использовать одно из указаных значений: <TT>192/576/1152/2304/4608/256/512/1024/2048/4096/8192/16384/32768</TT>. Сейчас кодер использует постоянный размер блока для всего файла.</TD></TR>
<TR><TD><TT>-m</TT></TD>
<TD>Включает разностное кодирование (только для стерео потоков). Обычно увеличивает уровень сжатия на несколько процентов. Для каждого блока создается усредненная и стерео версия блока, сохраняется блок меньшего размера. Сейчас разностное кодирование доступно для файлов, где сэмпл имеет размер не больше 16 бит.</TD></TR>
<TR><TD><TT>-M</TT></TD>
<TD>Включает свободное разностное кодирование (только для стерео потоков). Работает аналогично <TT>-m</TT>, однако енкодер переключается между независимым и усредняющим кодированием адаптивно. Метод работает быстрее, но уровень сжатия меньше, так как <TT>-m</TT> производит полный перебор вариантов.</TD></TR>
<TD>Включает свободное разностное кодирование (только для стерео потоков). Работает аналогично <TT>-m</TT>, однако кодер переключается между независимым и усредняющим кодированием адаптивно. Метод работает быстрее, но уровень сжатия меньше, так как <TT>-m</TT> производит полный перебор вариантов.</TD></TR>
<TR><TD><TT>-0..-8</TT></TD>
<TD>Быстрейшее сжатие ... максимальное сжатие. По умолчанию <TT>-5</TT>.</TD></TR>
@ -347,25 +347,25 @@
<TD>Максимальное сжатие. Аналогично <TT>-8</TT>.</TD></TR>
<TR><TD><TT>-e</TT></TD>
<TD>Полный поиск модели (работает медленно!). Обычно енкодер определяет лучшую модель и кодирует далее опираясь на нее. В данном режиме енкодер будет создавать подфреймы всех порядков и использовать наименьший. Если максимальное значение порядка LPC велико, время кодирования существенно возрастет. Выигрыш обычно составляет около 0.5%.</TD></TR>
<TD>Полный поиск модели (работает медленно!). Обычно кодер определяет лучшую модель и кодирует далее опираясь на нее. В данном режиме кодер будет создавать подфреймы всех порядков и использовать наименьший. Если максимальное значение порядка LPC велико, время кодирования существенно возрастет. Выигрыш обычно составляет около 0.5%.</TD></TR>
<TR><TD><TT>-E</TT></TD>
<TD>Использовать управляющие коды в кодере энтропии. Эта опция позволяет записывать незакодированное представление остатка в разделе, если его размер меньше. При этом время работы увеличивается, а уровень сжатия обычно улучшается примерно на 1%.</TD></TR>
<TR><TD><TT>-l #</TT></TD>
<TD>Определяет максимальный порядок LPC (коэффициентов линейного прогнозирования). Число должно быть меньше или равно <TT>32</TT>. Если значение равно <TT>0</TT>, енкодер будет использовать вместо общего линейного прогнозирования постоянные коэффициенты. Этот метод увеличивает скорость работы, но файлы получаются на 5-10% больше.</TD></TR>
<TD>Определяет максимальный порядок LPC (коэффициентов линейного прогнозирования). Число должно быть меньше или равно <TT>32</TT>. Если значение равно <TT>0</TT>, кодер будет использовать вместо общего линейного прогнозирования постоянные коэффициенты. Этот метод увеличивает скорость работы, но файлы получаются на 5-10% больше.</TD></TR>
<TR><TD><TT>-q #</TT></TD>
<TD>Определяет точность дискретных коэффициентов линейного прогнозирования в битах. По умолчанию <TT>-q 0</TT>, что позволяет енкодеру принимать решение в зависимости от сигнала. Лучше оставлять значение по умолчанию.</TD></TR>
<TD>Определяет точность дискретных коэффициентов линейного прогнозирования в битах. По умолчанию <TT>-q 0</TT>, что позволяет кодеру принимать решение в зависимости от сигнала. Лучше оставлять значение по умолчанию.</TD></TR>
<TR><TD><TT>-p</TT></TD>
<TD>Производить оптимизацию LPC. Переопределяет любую опцию <TT>-q</TT>. Сильно замедляет работу, и уменьшает размер файла на долю процента. <TT>-q</TT> не работает, когда используется <TT>-l 0</TT>.</TD></TR>
<TR><TD><TT>-r [#,]#</TT></TD>
<TD>Установить <I>[min,]max</I> порядок раздела. Если минимальное значение не указано, то оно устанавливается равным 0. По умолчанию енкодер один параметр Райса для всего остатка подфрейма. Если использовать эту опцию, остаток будет разделяться на <I>2^min#</I> ... <I>2^max</I> частей, для каждой из которых будет определен собственный параметр Райса. С увеличением параметра <I>max</I> выигрыш будет все меньше. Наиболее оптимальный вариант достигается при использовании <TT>-r 2,2</TT> (и больших значений для больших размеров блоков). При этом сжатие обычно увеличивается на 1.5%. Выбор оптимального значения можно произвести по формуле <TT>размер_блока/(2^n)=128</TT>. Максимальный уровень сжатия достигается при использовании <TT>-r 0,16</TT>.</TD></TR>
<TD>Установить <I>[min,]max</I> порядок раздела. Если минимальное значение не указано, то оно устанавливается равным 0. По умолчанию кодер один параметр Райса для всего остатка подфрейма. Если использовать эту опцию, остаток будет разделяться на <I>2^min#</I> ... <I>2^max</I> частей, для каждой из которых будет определен собственный параметр Райса. С увеличением параметра <I>max</I> выигрыш будет все меньше. Наиболее оптимальный вариант достигается при использовании <TT>-r 2,2</TT> (и больших значений для больших размеров блоков). При этом сжатие обычно увеличивается на 1.5%. Выбор оптимального значения можно произвести по формуле <TT>размер_блока/(2^n)=128</TT>. Максимальный уровень сжатия достигается при использовании <TT>-r 0,16</TT>.</TD></TR>
<TR><TD><TT>-V</TT></TD>
<TD>Проверять процесс сжатия. В данном случае <B><TT>flac</TT></B> создает параллельный декодер, раскодирующий выход енкодера и сравнивает результат с оригиналом. Если будет найдено несоответствие, кодирование прекратится. Время работы с этой опцией увеличивается, однако, при этом гарантируется, что файл будет правильно декодирован.</TD></TR>
<TD>Проверять процесс сжатия. В данном случае <B><TT>flac</TT></B> создает параллельный декодер, раскодирующий выход кодера и сравнивает результат с оригиналом. Если будет найдено несоответствие, кодирование прекратится. Время работы с этой опцией увеличивается, однако, при этом гарантируется, что файл будет правильно декодирован.</TD></TR>
<TR><TD>&nbsp;</TD>
<TD><TT>-F-</TT>, <TT>-S-</TT>, <TT>-P-</TT>, <TT>-m-</TT>, <TT>-e-</TT>, <TT>-E-</TT>, <TT>-p-</TT>, <TT>-V-</TT>, <TT>--lax-</TT>, <TT>--delete-input-file-</TT>, <TT>--sector-align-</TT> используются для отключения соответствующих опций.</TD></TR>
@ -425,7 +425,7 @@
<A NAME="libflac">
<H3><B><TT>libFLAC</TT></B></H3>
<P>Библиотека <B><TT>libFLAC</TT></B> является реализацией на C базового енкодера и декодера. Используя эту библиотеку и написав немного кода, можно добавить поддержку FLAC в свою программу. Условия ее распространения - <A HREF="http://www.gnu.org/copyleft/lesser.html">LGPL</A>. Исходные тексты библиотеки <B><TT>libFLAC</TT></B>, также как и консольного кодека и плагинов, доступны, и могут послужить хорошим примером для использования.</P>
<P>Библиотека <B><TT>libFLAC</TT></B> является реализацией на C базового кодера и декодера. Используя эту библиотеку и написав немного кода, можно добавить поддержку FLAC в свою программу. Условия ее распространения - <A HREF="http://www.gnu.org/copyleft/lesser.html">LGPL</A>. Исходные тексты библиотеки <B><TT>libFLAC</TT></B>, также как и консольного кодека и плагинов, доступны, и могут послужить хорошим примером для использования.</P>
<P><B><TT>libFLAC</TT></B> требует стандартную и математическую библиотеки для языка C. Программные потоки не используются, однако, так как <B><TT>libFLAC</TT></B> не использует глобальные переменные, библиотека должна быть thread-safe.</P>
@ -434,7 +434,7 @@
<P>В основном использование <B><TT>libFLAC</TT></B> состоит в следующем:</P>
<OL>
<LI>Программа создает экземпляр енкодера или декодера с помощью функций <TT>*_new()</TT>.</LI>
<LI>Программа создает экземпляр кодера или декодера с помощью функций <TT>*_new()</TT>.</LI>
<LI>Программа устанавливает параметры экземпляра и предоставляет ему обратные вызовы для чтения, записи, сообщения об ошибках и работы с метаданными с помощью функций <TT>*_set_*()</TT>.</LI>
@ -452,7 +452,7 @@
<P>Потоковый декодер рассчитывает на обратные вызовы для получения входных и выходных данных. Декодер с возможностью поиска является оберткой потокового декодера, предоставляющий возможность поиска, однако для его выполнения вам необходимо добавить обратные вызовы. Файловый декодер сам осуществляет обратные вызовы для чтения и предоставляет функции поиска.</P>
<P>Енкодер пока что реализован только на потоковом уровне (<TT>stream_encoder.h</TT>).</P>
<P>кодер пока что реализован только на потоковом уровне (<TT>stream_encoder.h</TT>).</P>
<P>Структуры и константы, относящиеся к формату, определены в файле <TT>format.h</TT>.</P>
@ -510,11 +510,11 @@
<P>От декодера потоков с возможностью поиска также наследуется проверка подписи MD5. Если эта возможность будет включена перед инициализацией, <TT>FLAC__file_decoder_finish()</TT> сообщит, если подпись MD5 распакованных данных не совпадет с сохраненной в блоке STREAMINFO. Проверка MD5 автоматически выключается, если в блоке STREAMINFO нет подписи или при попытке осуществления поиска.
<P><B>ЕНКОДЕР ПОТОКОВ</B></P>
<P><B>кодер ПОТОКОВ</B></P>
<P>Енкодер потоков работает аналогично декодеру, однако имеет меньше обратных вызовов и больше опций. Тип экземпляра - <TT>FLAC__StreamEncoder</TT>. Для создания нового экземпляра в программе нужно вызвать функцию <TT>FLAC__stream_encoder_new()</TT>, а чтобы проинициализировать его - <TT>FLAC__stream_encoder_init()</TT>.</P>
<P>кодер потоков работает аналогично декодеру, однако имеет меньше обратных вызовов и больше опций. Тип экземпляра - <TT>FLAC__StreamEncoder</TT>. Для создания нового экземпляра в программе нужно вызвать функцию <TT>FLAC__stream_encoder_new()</TT>, а чтобы проинициализировать его - <TT>FLAC__stream_encoder_init()</TT>.</P>
<P>В отличие от процесса декодирования кодирование в формат FLAC имеет множество опций, влияющих на скорость и уровень сжатия. Когда программа вызывает <TT>FLAC__stream_encoder_init()</TT>, енкодер проверяет значения, поэтому необходимо убедиться, что возвращемое этой функцией значение - <TT>FLAC__STREAM_ENCODER_OK</TT>. Для установки параметров нужно иметь некоторое представление о формате (см. <A HREF="#format">описание формата для пользователя</A> или его <A HREF="format.html">формальное описание</A>). Список необходимых параметров приведен здесь:</P>
<P>В отличие от процесса декодирования кодирование в формат FLAC имеет множество опций, влияющих на скорость и уровень сжатия. Когда программа вызывает <TT>FLAC__stream_encoder_init()</TT>, кодер проверяет значения, поэтому необходимо убедиться, что возвращемое этой функцией значение - <TT>FLAC__STREAM_ENCODER_OK</TT>. Для установки параметров нужно иметь некоторое представление о формате (см. <A HREF="#format">описание формата для пользователя</A> или его <A HREF="format.html">формальное описание</A>). Список необходимых параметров приведен здесь:</P>
<UL>
<LI><B><TT>streamable_subset</TT></B> - <TT>истина</TT>, если необходимо, чтобы выход соответствовал потоковому <A HREF="format.html#subset">подмножеству формата</A>, иначе <TT>ложь</TT>.</LI>
@ -531,9 +531,9 @@
<LI><B><TT>blocksize</TT></B> (размер блока) - должен быть между <TT>FLAC__MIN_BLOCKSIZE</TT> и <TT>FLAC__MAX_BLOCKSIZE</TT>.</LI>
<LI><B><TT>max_lpc_order</TT></B> (максимальный порядок коэффициентов линейного прогнозирования) - <TT>0</TT> указывает, что енкодер не должен использовать LPC, а только постоянные предикторы. Должно быть &lt;= <TT>FLAC__MAX_LPC_ORDER</TT>.</LI>
<LI><B><TT>max_lpc_order</TT></B> (максимальный порядок коэффициентов линейного прогнозирования) - <TT>0</TT> указывает, что кодер не должен использовать LPC, а только постоянные предикторы. Должно быть &lt;= <TT>FLAC__MAX_LPC_ORDER</TT>.</LI>
<LI><B><TT>qlp_coeff_precision</TT></B> - должно быть &gt;= <TT>FLAC__MIN_QLP_COEFF_PRECISION</TT>, или <TT>0</TT>, чтобы енкодер мог выбирать коэффициенты в зависимости от размера блока. В текущей реализации сумма <TT>qlp_coeff_precision</TT>+<TT>bits_per_sample</TT> должна быть &lt; <TT>32</TT>.</LI>
<LI><B><TT>qlp_coeff_precision</TT></B> - должно быть &gt;= <TT>FLAC__MIN_QLP_COEFF_PRECISION</TT>, или <TT>0</TT>, чтобы кодер мог выбирать коэффициенты в зависимости от размера блока. В текущей реализации сумма <TT>qlp_coeff_precision</TT>+<TT>bits_per_sample</TT> должна быть &lt; <TT>32</TT>.</LI>
<LI><B><TT>do_qlp_coeff_prec_search</TT></B> - <TT>ложь</TT>, чтобы использовать заданное значение <TT>qlp_coeff_precision</TT>; <TT>истина</TT> для поиска и выбора лучшего значения <TT>qlp_coeff_precision</TT>.</LI>
@ -545,7 +545,7 @@
<LI><B><TT>rice_parameter_search_dist</TT></B> (интервал для поиска параметра Райса) - <TT>0</TT>, чтобы использовать только вычисленный параметр <TT>k</TT>; иначе пытаться кодировать со всеми параметрами из интервала [<TT>k</TT>-<TT>rice_parameter_search_dist</TT>..<TT>k</TT>+<TT>rice_parameter_search_dist</TT>] и выбирать лучший вариант.</LI>
<LI><B><TT>total_samples_estimate</TT></B> (количество сэмплов) - Может равняться <TT>0</TT>, если неизвестно. Иначе указывается количество сэмплов, которое нужно закодировать. Это позволяет создавать более точный блок <TT>STREAMINFO</TT> при первом же проходе в случае, когда енкодер не может вернуться к началу вывода, чтобы обновить блок <TT>STREAMINFO</TT>.</LI>
<LI><B><TT>total_samples_estimate</TT></B> (количество сэмплов) - Может равняться <TT>0</TT>, если неизвестно. Иначе указывается количество сэмплов, которое нужно закодировать. Это позволяет создавать более точный блок <TT>STREAMINFO</TT> при первом же проходе в случае, когда кодер не может вернуться к началу вывода, чтобы обновить блок <TT>STREAMINFO</TT>.</LI>
<LI><B><TT>seek_table</TT></B> (таблица для поиска) - создать необязательную таблицу для поиска в файле. <TT>NULL</TT> указывает, что таблица не нужна.</LI>
@ -557,12 +557,12 @@
<UL>
<LI>Обратный вызов для записи. Вызывается, когда появляются закодированные данные для записи. Это могут быть метаданные смешанные с аудио фреймами, причем не гарантируется, что данные будут выровнены на границу блока метаданных или фрейма.</LI>
<LI>Обратный вызов для работы с метаданными. Вызывается однажды по завершении кодирования с populated структурой <TT>STREAMINFO</TT>. Это нужно для того, чтобы енкодеры файлов могли вернуться к началу файла и записать в блок <TT>STREAMINFO</TT> корректные данные о кодировании, например минимальный и максимальный размер фрейма.</LI>
<LI>Обратный вызов для работы с метаданными. Вызывается однажды по завершении кодирования с populated структурой <TT>STREAMINFO</TT>. Это нужно для того, чтобы кодеры файлов могли вернуться к началу файла и записать в блок <TT>STREAMINFO</TT> корректные данные о кодировании, например минимальный и максимальный размер фрейма.</LI>
</UL>
<P>Вызов <TT>FLAC__stream_encoder_init()</TT> непосредственно производит обратный вызов для записи сигнатуры &quot;fLaC&quot; и всех определенных на данный момент метаданных.</P>
<P>После инициализации экземпляра программа может передавать данные енкодеру двумя способами:</P>
<P>После инициализации экземпляра программа может передавать данные кодеру двумя способами:</P>
<UL>
<LI>Разделенными по каналам через <B><TT>FLAC__stream_encoder_process()</TT></B>. В этом случае нужно определить массив указателей на буфферы одинакового размера, по одному на каждый канал. Выравнивать сэмплы на границу блока не нужно.</LI>
@ -580,7 +580,7 @@
<P><B>МЕТАДАННЫЕ</B></P>
<P>Программы, записывающие свои блоки метаданных <TT>APPLICATION</TT>, могут указать енкодеру, чтобы он записал блок метаданных <TT>PADDING</TT> нужного размера. В этом случае вместо перезаписи всего потока после кодирования программа сможет просто заменить блок <TT>PADDING</TT> на свой. Если известен только максимальный размер блока <TT>APPLICATION</TT>, программа может создать резервный блок чуть большего размера, а после кодирования разделить его на блоки <TT>APPLICATION</TT> и <TT>PADDING</TT>.</P>
<P>Программы, записывающие свои блоки метаданных <TT>APPLICATION</TT>, могут указать кодеру, чтобы он записал блок метаданных <TT>PADDING</TT> нужного размера. В этом случае вместо перезаписи всего потока после кодирования программа сможет просто заменить блок <TT>PADDING</TT> на свой. Если известен только максимальный размер блока <TT>APPLICATION</TT>, программа может создать резервный блок чуть большего размера, а после кодирования разделить его на блоки <TT>APPLICATION</TT> и <TT>PADDING</TT>.</P>
<P>Если размер блока метаданных <TT>APPLICATION</TT> известен заранее, размер резервируемой области может быть легко вычеслен. Если размер блока <TT>APPLICATION</TT> (не включая заголовок блока) равен <TT>N</TT> байтам, то экземпляру FLAC__StreamEncoder перед инициализацией нужно передать значение <TT>N+4</TT>. Это нужно, чтобы учесть дополнительное место необходимое для хранения идентификатора приложения.</P>
@ -595,12 +595,12 @@
<A NAME="monkey">
<H3>monkey</H3>
<P>Monkey's Audio поставляется с удобным пользовательским интерфейсом. Он поддерживает несколько внешних енкодеров, в число которых не входит FLAC. Однако дистрибутив FLAC для Windows поставляется с утилитой, позволяющей заменить один из поддерживаемых внешних кодеков на FLAC. Это можно сделать так:</P>
<P>Monkey's Audio поставляется с удобным пользовательским интерфейсом. Он поддерживает несколько внешних кодеров, в число которых не входит FLAC. Однако дистрибутив FLAC для Windows поставляется с утилитой, позволяющей заменить один из поддерживаемых внешних кодеков на FLAC. Это можно сделать так:</P>
<UL>
<LI>Скопируйте <B><TT>flac.exe</TT></B> и <B><TT>flac_ren.exe</TT></B> в каталог <B><TT>External/</TT></B> установки Monkey's Audio.</LI>
<LI>Выберите, какой поддерживаемый енкодер заменить:
<LI>Выберите, какой поддерживаемый кодер заменить:
<UL>
<LI>Shorten - скопируйте <B><TT>flac_mac.exe</TT></B> поверх <B><TT>External/shortn32.exe</TT></B></LI>
<LI>WavPack - скопируйте <B><TT>flac_mac.exe</TT></B> поверх <B><TT>External/wavpack.exe</TT></B> и <B><TT>External/wvunpack.exe</TT></B></LI>