annotate src/flac-1.2.1/doc/html/ru/format.html @ 23:619f715526df sv_v2.1

Update Vamp plugin SDK to 2.5
author Chris Cannam
date Thu, 09 May 2013 10:52:46 +0100
parents 05aa0afa9217
children
rev   line source
Chris@1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//RU">
Chris@1 2 <!-- Copyright (c) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson -->
Chris@1 3 <!-- Permission is granted to copy, distribute and/or modify this document -->
Chris@1 4 <!-- under the terms of the GNU Free Documentation License, Version 1.1 -->
Chris@1 5 <!-- or any later version published by the Free Software Foundation; -->
Chris@1 6 <!-- with no invariant sections. -->
Chris@1 7 <!-- A copy of the license can be found at http://www.gnu.org/copyleft/fdl.html -->
Chris@1 8 <HTML>
Chris@1 9 <HEAD>
Chris@1 10 <META CHARSET="windows-1251">
Chris@1 11 <TITLE>FLAC: формат</TITLE>
Chris@1 12 </HEAD>
Chris@1 13
Chris@1 14 <BODY>
Chris@1 15 <CENTER><TABLE cellpadding=0 cellspacing=0 border=0>
Chris@1 16 <TR>
Chris@1 17 <TD align=center>|</TD>
Chris@1 18 <TD height=22 align=center nowrap>
Chris@1 19 &nbsp;<A HREF="index.html">начало</A>&nbsp;</TD>
Chris@1 20 <TD align=center>|</TD>
Chris@1 21 <TD align=center nowrap>
Chris@1 22 &nbsp;<A HREF="news.html">новости</A>&nbsp;</TD>
Chris@1 23 <TD align=center>|</TD>
Chris@1 24 <TD align=center nowrap>
Chris@1 25 &nbsp;<A HREF="download.html">файлы</A>&nbsp;</TD>
Chris@1 26 <TD align=center>|</TD>
Chris@1 27 <TD align=center nowrap>
Chris@1 28 &nbsp;<A HREF="features.html">характеристики</A>&nbsp;</TD>
Chris@1 29 <TD align=center>|</TD>
Chris@1 30 <TD align=center nowrap>
Chris@1 31 &nbsp;<A HREF="goals.html">цели</A>&nbsp;</TD>
Chris@1 32 <TD align=center>|</TD>
Chris@1 33 <TD align=center nowrap>
Chris@1 34 &nbsp;формат&nbsp;</TD>
Chris@1 35 <TD align=center>|</TD></TR>
Chris@1 36
Chris@1 37 <TR>
Chris@1 38 <TD align=center>|</TD>
Chris@1 39 <TD align=center nowrap>
Chris@1 40 &nbsp;<A HREF="id.html">id</A>&nbsp;</TD>
Chris@1 41 <TD align=center>|</TD>
Chris@1 42 <TD align=center nowrap>
Chris@1 43 &nbsp;<A HREF="comparison.html">сравнение</A>&nbsp;</TD>
Chris@1 44 <TD align=center>|</TD>
Chris@1 45 <TD align=center nowrap>
Chris@1 46 &nbsp;<A HREF="developers.html">разработка</A>&nbsp;</TD>
Chris@1 47 <TD align=center>|</TD>
Chris@1 48 <TD align=center nowrap>
Chris@1 49 &nbsp;<A HREF="documentation.html">документация</A>&nbsp;</TD>
Chris@1 50 <TD align=center>|</TD>
Chris@1 51 <TD align=center nowrap>
Chris@1 52 &nbsp;<A HREF="links.html">ссылки</A>&nbsp;</TD>
Chris@1 53 <TD align=center>|</TD>
Chris@1 54 <TD align=center nowrap>
Chris@1 55 &nbsp;<A HREF="authors.html">авторы</A>&nbsp;</TD>
Chris@1 56 <TD align=center>|</TD></TR>
Chris@1 57 </TABLE></CENTER>
Chris@1 58
Chris@1 59 <P><CENTER><TABLE cellpadding=0 cellspacing=0 border=0>
Chris@1 60 <TR><TD align=center>|</TD>
Chris@1 61 <TD height=22 align=center nowrap>
Chris@1 62 &nbsp;<A HREF="../format.html">english</A>&nbsp;</TD>
Chris@1 63 <TD align=center>|</TD>
Chris@1 64 <TD align=center nowrap>
Chris@1 65 &nbsp;русский</A>&nbsp;</TD>
Chris@1 66 <TD align=center>|</TD></TR>
Chris@1 67 </TABLE></CENTER></P>
Chris@1 68
Chris@1 69
Chris@1 70 <CENTER><H2>FLAC: формат</H2></CENTER>
Chris@1 71
Chris@1 72
Chris@1 73 <H3>Формат</H3>
Chris@1 74
Chris@1 75 <P>Здесь приведено полное описание формата FLAC.</P>
Chris@1 76
Chris@1 77
Chris@1 78 <H4>От автора</H4>
Chris@1 79
Chris@1 80 <P>Во-первых, как основной разработчик, я должен отметить, что не являюсь экспертом в области сжатия, поэтому чувствую себя обязанным поблагодарить многих людей, работавших над улучшением алгоритмов компрессии аудиоданных. Отдельную благодарность я выражаю:</P>
Chris@1 81
Chris@1 82 <P><BLOCKQUOTE>
Chris@1 83 <LI><A HREF="http://www-svr.eng.cam.ac.uk/reports/abstracts/robinson_tr156.html">Э. Робинсону</A> за работу над Shorten. Его статья послужила отправной точкой для нескольких основных методов, заложенных во FLAC. FLAC развил идею постоянных предикторов, используемую в Shorten.</LI>
Chris@1 84
Chris@1 85 <LI><A HREF="http://commsci.usc.edu/faculty/golomb.html">С. Голомбу</A> и Роберту Райсу. Их универсальные коды используются кодером энтропии.</LI>
Chris@1 86
Chris@1 87 <LI>Н. Левинсону и Дж. Дарбину. Базовый кодер использует разработанный и улучшенный ими алгоритм для определения LPC коэффициентов из коэффициентов автокорреляции.</LI>
Chris@1 88
Chris@1 89 <LI>И, конечно же, <A HREF="http://www.digitalcentury.com/encyclo/update/shannon.html">К. Шеннону.</A></LI>
Chris@1 90 </BLOCKQUOTE></P>
Chris@1 91
Chris@1 92 <P>--Джош Колсон</P>
Chris@1 93
Chris@1 94
Chris@1 95 <a name="scope">
Chris@1 96 <H4><u>Область применения</u></H4>
Chris@1 97
Chris@1 98 <P>Общеизвестно, что нет алгоритма, способного сжать без потерь входные данные любого типа. Большинство архиваторов позиционируются для работы с данными определенного вида и оптимизируются для этой области. FLAC предназначен для сжатия аудиоданных. Несмотря на то, что он может сжать без потерь данные любого типа, только определенный ввод архивируется хорошо. FLAC использует тот факт, что обычно аудиоданные имеют высокий порядок корреляции между сэмплами.</P>
Chris@1 99
Chris@1 100 <P>В области аудио существует множество возможных подразделов. Например, речь с низким битрейтом, многоканальная музыка с высокой частотой дискретизации и т.д. FLAC не нацелен на какой-либо подраздел, однако большинство параметров по умолчанию базового кодера рассчитаны на CD-аудио (т.е. 44.1кГц, 2 канала, 16 бит на сэмпл). Влияние параметров кодирования на разные типы аудио будет рассмотрено позже.</P>
Chris@1 101
Chris@1 102 <a name="architecture">
Chris@1 103 <H4><u>Архитектура</u></H4>
Chris@1 104
Chris@1 105 <P>Подобно большинству программ такого рода, кодер FLAC выполняет следующие действия:</P>
Chris@1 106
Chris@1 107 <P><BLOCKQUOTE>
Chris@1 108 <LI><A HREF="format.html#blocking">Разбиение на блоки</A>. Ввод разбивается на множество последовательных блоков, которые могут иметь различный размер. Оптимальный размер блока обычно зависит от многих факторов, таких как частота дискетизации, спектральная характеристика во времени и т.д. Несмотря на то, что формат FLAC позволяет использовать в потоке блоки различного размера, базовый кодер использует постоянный размер.</LI>
Chris@1 109
Chris@1 110 <LI><A HREF="format.html#interchannel">Межканальная декорреляция</A>. В случае стереопотоков кодер создает средний и разностный сигналы, основанные на среднем значении между левым и правым каналами и их разности соответственно. На следующий этап кодирования передается лучший из вариантов сжатого сигнала.</LI>
Chris@1 111
Chris@1 112 <LI><A HREF="format.html#prediction">Прогнозирование</A>. Далее кодер пытается найти математическое описание сигнала (обычно приблизительное). Зачастую оно значительно меньше самого сигнала. Так как методы предсказания известны и кодеру, и декодеру в потоке нужно указать только параметры предиктора. Сейчас FLAC использует четыре различных класса предикторов (описанных в разделе <A HREF="format.html#prediction">Прогнозирование</A>), но в формате предусмотрено место для дополнительных методов. FLAC допускает изменение класса предиктора от блока к блоку и даже в пределах канала в блоке.</LI>
Chris@1 113
Chris@1 114 <LI><A HREF="format.html#residualcoding">Кодирование остатков</A>. Если предиктор не описывает сигнал точно, разница между оригинальным сигналом и спрогнозированным (называемым еще ошибочным или остаточным) должна быть закодирована без потерь. Если предсказание эффективно, остаточный сигнал будет занимать меньше бит на сэмпл, чем оригинальный сигнал. Сейчас FLAC использует только один метод для кодирования остатков (см. раздел <A HREF="format.html#residualcoding">Кодирование остатков</A>), однако в формате предусмотрено место для дополнительных методов. FLAC допускает изменение метода кодирования остатков от блока к блоку и даже в пределах канала в блоке.</LI>
Chris@1 115 </BLOCKQUOTE></P>
Chris@1 116
Chris@1 117 <P>В дополнение ко всему определена система метаданных, позволяющая добавлять в начало потока произвольную информацию.</P>
Chris@1 118
Chris@1 119
Chris@1 120 <a name="definitions">
Chris@1 121 <H4><u>Определения</u></H4>
Chris@1 122
Chris@1 123 <P>Многие термины, такие как "блок" и "фрейм", имеют различное значение в схемах кодирования. Например, фрейм в mp3 сооветствует многим сэмплам во всех каналах, в то время как фрейм S/PDIF представляет только один сэмпл для каждого канала. Обратите внимание на то, что, говоря о "блоках" и "подблоках", мы ссылаемся на незакодированные аудиоданные, а термины "фрейм" и "подфрейм" используем для данных сжатых FLAC.</P>
Chris@1 124
Chris@1 125 <P><BLOCKQUOTE>
Chris@1 126 <LI><B>Блок</B> - это один или более сэмплов, находящихся в нескольких каналах.</LI>
Chris@1 127
Chris@1 128 <LI><B>Подблок</B> - это один или более сэмплов из одного канала. Таким образом, блок содержит подблок для каждого канала и все подблоки в нем содержат одинаковое количество сэмплов.</LI>
Chris@1 129
Chris@1 130 <LI><B>Размер блока</B> - это количество сэмплов в любом из своих подблоков. Например, блок длиной в одну секунду с частотой дескретизации 44.1кГц имеет размер блока 44100 вне зависимости от количества каналов.</LI>
Chris@1 131
Chris@1 132 <LI><B>Фрейм</B> - это заголовок и один или несколько подфреймов.</LI>
Chris@1 133
Chris@1 134 <LI><B>Подфрейм</B> - это заголовок и один или несколько закодированных сэмплов из данного канала. Все подфреймы в данном фрейме содержат одинаковое количество сэмплов.</LI>
Chris@1 135 </BLOCKQUOTE></P>
Chris@1 136
Chris@1 137
Chris@1 138 <a name="blocking">
Chris@1 139 <H4><u>Разбиение на блоки</u></H4>
Chris@1 140
Chris@1 141 <P>Размер блоков сильно влияет на уровень сжатия. Если размер блока будет слишком мал, то в итоге получится очень много фреймов, а это значит, что на заголовки будет потрачено много битов. Если же размер блока большой, а характеристики сигнала сильно варьируются, кодер не сможет найти хороший предиктор. Чтобы упростить кодек, FLAC определяет минимальный размер блока в 16 сэмплов, а максимальный в 65535 сэмплов. Этот интервал покрывает оптимальные размеры блоков для всех аудиоданных, поддерживаемых FLAC.</P>
Chris@1 142
Chris@1 143 <P>Сейчас базовый кодер использует постоянный размер блока, оптимизированный по частоте дискретизации ввода. Последующие версии смогут изменять размер блока в зависимости от характеристик сигнала.</P>
Chris@1 144
Chris@1 145 <P>Разбитые на блоки данные передаются на стадию прогнозирования по одному подблоку. Каждый подблок кодируется в подфрейм независимо, а позже они объендиняются во фрейм. Так как каждый канал кодируется отдельно, это означает, что один канал стерео фрейма может сжиматься как постоянный подфрейм, а второй как LPC подфрейм.</P>
Chris@1 146
Chris@1 147
Chris@1 148 <a name="interchannel">
Chris@1 149 <H4><u>Межканальная декорреляция</u></H4>
Chris@1 150
Chris@1 151 <P>В большинстве случаев в стерео потоках существует достаточный уровень корреляции между левым и правым каналами. FLAC позволяет фреймам в стерео потоках иметь различное распределение каналов, а кодер может использовать лучшее представление.</P>
Chris@1 152
Chris@1 153 <P><BLOCKQUOTE>
Chris@1 154 <LI><B>Независимое</B>. Левый и правый каналы кодируются независимо.</LI>
Chris@1 155
Chris@1 156 <LI><B>Разностное</B>. Левый и правый канал преобразовываются в средний и остаточный каналы. Средний канал - это среднее значение левого и правого сигналов, а остаточный - разница между ними (левый минус правый).</LI>
Chris@1 157
Chris@1 158 <LI><B>Левостороннее</B>. Кодируется левый и остаточный каналы.</LI>
Chris@1 159
Chris@1 160 <LI><B>Правоостороннее</B>. Кодируется правый и остаточный каналы.</LI>
Chris@1 161 </BLOCKQUOTE></P>
Chris@1 162
Chris@1 163 <P>Оказывается, что левостороннее и правостороннее кодирование могут быть более эффективными во многих фреймах, несмотря на то, что необходимое для оригинального сигнала количество битов на сэмпл немного больше, чем для независимого или усредненного кодирования.</P>
Chris@1 164
Chris@1 165
Chris@1 166 <a name="prediction">
Chris@1 167 <H4><u>Прогнозирование</u></H4>
Chris@1 168
Chris@1 169 <P>FLAC использует четыре метода для моделирования входного сигнала:</P>
Chris@1 170
Chris@1 171 <P><BLOCKQUOTE>
Chris@1 172 <LI><B>Дословный</B>. По существу это прогнозирование сигнала нулевого уровня. Предиктором сигнала является сам сигнал, потому сжатие не происходит. Это образец, с которым сверяются все остальные предикторы. Если передать кодеру случайные данные, для всех подблоков скоре всего будет использован дословный предиктор. Так как необработанный сигнал не проходит стадию кодирования остатков, результаты не будут совпадать с линейным предиктором нулевого порядка.</LI>
Chris@1 173
Chris@1 174 <LI><B>Постоянный</B>. Этот предиктор используется, когда подблок содержит цифровую тишину, т.е. на вход поступает одна константа. Сигнал кодируется по всей длине и добавляется к потоку.</LI>
Chris@1 175
Chris@1 176 <LI><B>Постоянный линейный предиктор</B>. FLAC использует класс эффективно вычисляемых постоянных линейных предикторов (хорошее описание приведено у <A HREF="http://svr-www.eng.cam.ac.uk/~ajr/GroupPubs/Robinson94-tr156/index.html">Shorten</A> и <A HREF="http://www.hpl.hp.com/techreports/1999/HPL-1999-144.pdf">AudioPak</A>). FLAC добавляет предиктор четвертого уровня к использованным в Shorten предикторам от нулевого до третьего уровня. Так как предикторы постоянны, в сжатом потоке необходимо сохранить только порядок предиктора. Остаточный сигнал передается кодеру остатков.</LI>
Chris@1 177
Chris@1 178 <LI><B>Линейное прогнозирование FIR</B>. Для более точного моделирования (за счет медленной работы) FLAC поддерживает линейное прогнозирование FIR до 32 порядка (см. <A HREF="http://svr-www.eng.cam.ac.uk/~ajr/GroupPubs/Robinson94-tr156/index.html">Shorten</A> и <A HREF="http://www.hpl.hp.com/techreports/1999/HPL-1999-144.pdf">AudioPak</A>). Базовый кодер использует метод Левинсона-Дарбина для расчета LPC коэффициентов из коэффициентов автокорреляции и коэффициенты разбиваются перед вычислением остатков. В то время как такие кодеры как Shorten используют постоянное разбиение для всего ввода, FLAC позволяет для каждого фрейма менять точность коэффициента разбиения. Базовый кодер FLAC оценивает оптимальную точность, основываясь на размере блока и диапазоне оригинального сигнала.</LI>
Chris@1 179 </BLOCKQUOTE></P>
Chris@1 180
Chris@1 181 <a name="residualcoding">
Chris@1 182 <H4><u>Кодирование остатков</u></H4>
Chris@1 183
Chris@1 184 <P>Для кодирования остаточного сигнала от стадии прогнозирования FLAC использует два похожих метода. Остаточный сигнал сжимается с использованием кодов Райса следующими способами:</P>
Chris@1 185
Chris@1 186 <BLOCKQUOTE><ol>
Chris@1 187 <LI>Кодер оценивает одиночный параметр Райса, основанный на разнице остатка и кодов Райса. Весь остаток кодируется с использованием этого параметра.</LI>
Chris@1 188
Chris@1 189 <LI>Остаток делится на несколько интервалов одинаковой длины и каждый из них кодируется со своим параметром Райса, основанным на среднем значении для данного интервала.</LI>
Chris@1 190 </ol></BLOCKQUOTE>
Chris@1 191
Chris@1 192 <P>Обратите внимание на то, что первый метод является частным случаем второго с одним интервалом. Отличие состоит в том, что в первом методе параметр Райса вычисляется для разницы остатка, а не для среднего значения.</P>
Chris@1 193
Chris@1 194 <P>В формате FLAC зарезервировано место для других методов кодирования. Кто-нибудь может попытаться найти лучшее контекстное моделирование параметра Райса или кодирования Хаффмана. Описания нескольких универсальных кодов можно найти на страницах <A HREF="http://www.hpl.hp.com/techreports/98/HPL-98-193.html">LOCO-I</A> и <A HREF="http://www.cs.tut.fi/~albert/Dev/pucrunch/packing.html">pucrunch</A>.</P>
Chris@1 195
Chris@1 196
Chris@1 197 <a name="prediction">
Chris@1 198 <H4><u>Формат</u></H4>
Chris@1 199
Chris@1 200 <P>В этом разделе описывается формат файла. Формат FLAC не предусматривает поля для номера версии, однако содержит несколько зарезервированных позиций. Последующие версии смогут использовать это место без нарушения совместимости с предыдущими версиями. Более старые версии декодеров могут либо прекращать работу, либо пропускать данные, закодированные новыми методами. Кроме того зарезервированы некоторые специальные значения, которые не могут появиться ни в одной из версий формата. Это обычно делается для улучшения механизма синхронизации.</P>
Chris@1 201
Chris@1 202 <P>Все числа в формате FLAC являются целыми, младший байт которых записывается вначале (big-endian). Числа являются беззнаковыми, кроме тех случаев, где явно указано обратное.</P>
Chris@1 203
Chris@1 204 <a name="overview">
Chris@1 205 <P>К потоку FLAC могут быть добавлены тэги ID3v1 (в конце) и ID3v2 (в начале). Эти данные не относятся к формату, однако декодер умеет пропускать их.</P>
Chris@1 206
Chris@1 207 <P>Перед полным описанием формата приведем его краткий обзор.</P>
Chris@1 208
Chris@1 209 <P><BLOCKQUOTE>
Chris@1 210 <LI>Формат FLAC состоит из маркера "fLaC" в начале потока, за которым следует обязательный блок STREAMINFO, любое количество других блоков метаданных, а затем аудиофреймы.</LI>
Chris@1 211
Chris@1 212 <LI>FLAC поддерживает до 128 блоков метаданных. Сейчас определены:</LI>
Chris@1 213
Chris@1 214 <UL>
Chris@1 215 <A NAME="def_STREAMINFO">
Chris@1 216 <LI><TT>STREAMINFO</TT>: Этот блок содержит информацию обо всем потоке (частоту дискретизации, количество каналов, количество сэмплов и т.д.). Он всегда должен быть первым блоком метаданных в потоке. Следующие блоки должны следовать за ним, и могут быть пропущены декодером.</LI>
Chris@1 217
Chris@1 218 <A NAME="def_APPLICATION">
Chris@1 219 <LI><TT>APPLICATION</TT>: Этот блок предназначен для использования приложениями третьих лиц. Единственным обязательным полем является 32-битный идентификатор, который выдается разработчиками FLAC. Формат оставшейся части блока определяется зарегистрированным под этим номером приложением. Чтобы получить id для своего приложения, посетите <A HREF="id.html">страницу регистрации</A>.</LI>
Chris@1 220
Chris@1 221 <A NAME="def_PADDING">
Chris@1 222 <LI><TT>PADDING</TT>: Этот блок предназначен для резервирования места. Содержимое блока <TT>PADDING</TT> не имеет значения. Он полезен в том случае, если известно, что блок после кодирования будет добавлен блок <TT>APPLICATION</TT>. Пользователь может зарезервировать необходимое пространство с помощью блока <TT>PADDING</TT>, чтобы приложение смогло записать на его место блок <TT>APPLICATION</TT>. Эта операция займет намного меньше времени, чем вставка блока в начало файла, так как в втором случае потребуется его полная перезапись.</LI>
Chris@1 223
Chris@1 224 <A NAME="def_SEEKTABLE">
Chris@1 225 <LI><TT>SEEKTABLE</TT>: Это необязательный блок для хранения точек поиска. В потоке FLAC можно найти любой сэмпл без этой таблицы, однако задержка может быть непредсказуемой, так как битрейт в потоке может существенно меняться. С помощью таблицы точек поиска пауза может быть существенно сокращена. Каждая точка занимает 18 байтов, поэтому для быстрого поиска с точностью до 1% необходимо всего 2кб. В потоке может быть только одни блок <TT>SEEKTABLE</TT>, но в нем может быть любое количество точек поиска. Также существуют резервируемые точки, которые пропускаются декодером, но могут использоваться для последующих вставок реальных точек поиска.</LI>
Chris@1 226
Chris@1 227 <A NAME="def_VORBIS_COMMENT">
Chris@1 228 <LI><TT>VORBIS_COMMENT</TT>: Этот блок предназначен для хранения списка в удобном для чтения формате (параметр=значение). Значения записываются в кодировке UTF-8. Используется реализация <A HREF="http://xiph.org/ogg/vorbis/doc/v-comment.html">спецификации комментария Vorbis</A>. Это единственный официально поддерживаемый механизм работы с тегами в FLAC. В потоке может быть только один блок <TT>VORBIS_COMMENT</TT>.</LI>
Chris@1 229
Chris@1 230 <A NAME="def_CUESHEET">
Chris@1 231 <LI><TT>CUESHEET</TT>: В этом блоке записывается информация из списка разбиения аудиодиска. Сделана поддержка треков и индекса, совместимая со стандартом Red Book CD для аудиодисков, а также других метаданных, таких как номер в каталоге дисков. Этот блок особенно полезен для архивирования аудиодисков, но также может использоваться как механизм для поиска при воспроизведении.</LI>
Chris@1 232 </UL>
Chris@1 233
Chris@1 234 <LI>Аудиопоток состоит из одного или нескольких фреймов. У каждого фрейма есть заголовок, состоящий из кода синхронизации, информации о фрейме (размер блока, частота дискретизации, количество каналов и т.п.) и восьмибитной контрольной суммы. Также в заголовке содержится либо номер первого сэмпла во фрейме относительно всего потока (для потоков с изменяющимся размером блока) или номер фрейма (для потоков с постоянным размером блока). Это позволяет производить быстрый и точный поиск. Далее следуют закодированные подфреймы (по одному на каждый канал) и, наконец, фрейм, дополненный нулями до границы байта. Каждый подфрейм имеет свой заголовок, определяющий способ его декодирования.</LI>
Chris@1 235
Chris@1 236 <LI>Так как декодер может начать работу в середине потока, должен быть метод определения начала фрейма. Каждый фрейм начинается с 14-битного синхронизирующего кода. Этот код не может появляться ни в одном другом месте заголовка фрейма. Однако так как это код может появиться в подфреймах, у декодера есть два способа определить, что данная последовательность является началом фрейма. Сначала проверяется корректность данных во всем фрейме. Однако этот шаг не может гарантировать отсутствия ошибок, поэтому дополнительно производится расчет восьмибитной контрольной суммы заголовка фрейма и полученный результат сравнивается со значением, полученным при кодировании и записанным после заголовка фрейма.</LI>
Chris@1 237
Chris@1 238 <LI>Каждый фрейм должен содержать основную информацию о потоке, так как декодер может не иметь доступа к блоку метаданных <TT>STREAMINFO</TT> в начале потока. Сюда входит частота дискретизации, количество бит на сэмпл, количество каналов и т.д. Так как заголовоки фреймов вносят дополнительные накладные расходы, то они влияют уровень сжатия. Чтобы сделать заголовки фреймов минимальными, FLAC использует таблицы поиска для наиболее часто используемых значений параметров фремов. Например, часть, отвечающая за частоту дискретизации, занимает 4 бита. Восемь предопределенных значений соответствуют наиболее самым распространенным частотам (8/16/22.05/24/32/44.1/48/96 кГц). Однако дополнительные частоты могут быть использованы с помощью специального набора битов, указывающего декодеру, что необходимое значение находится в конце заголовка. Такой же метод используется для указания размера блока и количества битов на сэмпл. В этом случае заголовок остается достаточно малым для наиболее распространенных типов аудиоданных.</LI>
Chris@1 239
Chris@1 240 <LI>Подфреймы (по одному для каждого канала) кодируются во фрейме отдельно и хранятся в потоке последовательно. Это ведет к упрощению декодера, однако ценой этому является увеличение размеров буффера. У каждого подфрейма есть свой заголовок, определяющий его аттрибуты (метод и порядок прогнозирования, параметры кодирования остатков и т.д.). За заголовком следуют аудиоданные для этого канала.</LI>
Chris@1 241
Chris@1 242 <A NAME="subset">
Chris@1 243 <LI>Во FLAC определено специальное подмножество формата (Subset format). Все потоки сжатые этим методом на самом деле являются потоковыми, то есть декодер, который не может искать в потоке, имеет возможность перейти к любой его точке и начать воспроизведение. Для файлов, отвечающих этому подмножеству формата, значительно проще сделать аппаратный декодер. <B><TT>flac</TT></B> по умолчанию создает потоки, отвечающие этому подмножеству формата. Ключ <TT>--lax</TT> запрещает создание таких потоков. Чтобы файл отвечал данному подмножеству, для него должны выполняться следующие ограничения:</LI>
Chris@1 244
Chris@1 245 <UL>
Chris@1 246 <LI>Значение битов, отвечающих за размер блока, должно быть в пределах 0001-0101 или 1000-1110. Поток должен состоять из блоков одинакового небольшого размера (за исключением последнего), а в блоке метаданных <TT>STREAMINFO</TT> должны быть указаны равные значения для минимального и максимального размера блока.</LI>
Chris@1 247 <LI>Частота дискретизации в заголовке фрейма должна описываться следующим диапазоном битов 0001-1011.</LI>
Chris@1 248 <LI>Количество бит на сэмпл в заголовке фрейма должно описываться следующим диапазоном битов 001-111.</LI>
Chris@1 249 </UL>
Chris@1 250 </BLOCKQUOTE></P>
Chris@1 251
Chris@1 252 <P>В таблице приведено формальное описание формата FLAC. Числа в угловых скобках показывают количество битов, используемых данным полем.</P>
Chris@1 253
Chris@1 254
Chris@1 255 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 256
Chris@1 257 <TR>
Chris@1 258 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="stream"><FONT SIZE="+2"><B><TT>ПОТОК</TT></B></FONT></A></TD>
Chris@1 259 </TR>
Chris@1 260
Chris@1 261 <TR>
Chris@1 262 <TD VALIGN="TOP">&lt;32&gt;</TD>
Chris@1 263 <TD>"fLaC", маркер потока FLAC в кодировке ASCII, означающий, что первыми четырьмя байтами потока являются 0x66, 0x4C, 0x61, 0x43</TD>
Chris@1 264 </TR>
Chris@1 265
Chris@1 266 <TR>
Chris@1 267 <TD VALIGN="TOP"><A HREF="format.html#metadata_block_streaminfo"><TT>БЛОК_МЕТАДАННЫХ</TT></A></TD>
Chris@1 268 <TD>Обязательный блок метаданных <TT>STREAMINFO</TT>, содержащий основные свойства потока</TD>
Chris@1 269 </TR>
Chris@1 270
Chris@1 271 <TR>
Chris@1 272 <TD VALIGN="TOP"><A HREF="format.html#metadata_block"><TT>БЛОК_МЕТАДАННЫХ</TT></A>*</TD>
Chris@1 273 <TD>Ноль или больше блоков метаданных</TD>
Chris@1 274 </TR>
Chris@1 275
Chris@1 276 <TR>
Chris@1 277 <TD VALIGN="TOP"><A HREF="format.html#frame"><TT>ФРЕЙМ</TT></A>+</TD>
Chris@1 278 <TD>Один или больше аудиофреймов</TD>
Chris@1 279 </TR>
Chris@1 280
Chris@1 281 </TABLE></P>
Chris@1 282
Chris@1 283
Chris@1 284 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 285
Chris@1 286 <TR>
Chris@1 287 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block"><FONT SIZE="+2"><B><TT>БЛОК_МЕТАДАННЫХ</TT></B></FONT></A></TD>
Chris@1 288 </TR>
Chris@1 289
Chris@1 290 <TR>
Chris@1 291 <TD VALIGN="TOP"><A HREF="format.html#metadata_block_header"><TT>ЗАГОЛОВОК_БЛОКА_МЕТАДАННЫХ</TT></A></TD>
Chris@1 292 <TD>Заголовок, определяющий тип и размер блока метаданных</TD>
Chris@1 293 </TR>
Chris@1 294
Chris@1 295 <TR>
Chris@1 296 <TD VALIGN="TOP"><A HREF="format.html#metadata_block_data"><TT>СОДЕРЖИМОЕ_БЛОКА_МЕТАДАННЫХ</TT></A></TD>
Chris@1 297 <TD>&nbsp;</TD>
Chris@1 298 </TR>
Chris@1 299
Chris@1 300 </TABLE></P>
Chris@1 301
Chris@1 302
Chris@1 303 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 304
Chris@1 305 <TR>
Chris@1 306 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_header"><FONT SIZE="+2"><B><TT>ЗАГОЛОВОК_БЛОКА_МЕТАДАННЫХ</TT></B></FONT></A></TD>
Chris@1 307 </TR>
Chris@1 308
Chris@1 309 <TR>
Chris@1 310 <TD VALIGN="TOP">&lt;1&gt;</TD><TD>Флаг равный <TT>1</TT>, если данный блок метаданных является последним перед аудиоблоками, <TT>0</TT> в противном случае</TD>
Chris@1 311 </TR>
Chris@1 312
Chris@1 313 <TR>
Chris@1 314 <TD VALIGN="TOP">&lt;7&gt;</TD>
Chris@1 315 <TD>Тип блока:
Chris@1 316 <UL>
Chris@1 317 <LI>0 : <TT>STREAMINFO</TT></LI>
Chris@1 318 <LI>1 : <TT>PADDING</TT></LI>
Chris@1 319 <LI>2 : <TT>APPLICATION</TT></LI>
Chris@1 320 <LI>3 : <TT>SEEKTABLE</TT></LI>
Chris@1 321 <LI>4 : <TT>VORBIS_COMMENT</TT></LI>
Chris@1 322 <LI>5 : <TT>CUESHEET</TT></LI>
Chris@1 323 <LI>6-127 : зарезервированы</LI>
Chris@1 324 </UL>
Chris@1 325 </TD>
Chris@1 326 </TR>
Chris@1 327
Chris@1 328 <TR>
Chris@1 329 <TD VALIGN="TOP">&lt;24&gt;</TD>
Chris@1 330 <TD>Длина в байтах соответствующего блока метаданных (не включает размер <TT>ЗАГОЛОВКА_БЛОКА_МЕТАДАННЫХ</TT>)</TD>
Chris@1 331 </TR>
Chris@1 332
Chris@1 333 </TABLE></P>
Chris@1 334
Chris@1 335
Chris@1 336 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 337
Chris@1 338 <TR>
Chris@1 339 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_data"><FONT SIZE="+2"><B><TT>СОДЕРЖИМОЕ_БЛОКА_МЕТАДАННЫХ</TT></B></FONT></A></TD>
Chris@1 340 </TR>
Chris@1 341
Chris@1 342 <TR>
Chris@1 343 <TD VALIGN="TOP"><A HREF="format.html#metadata_block_streaminfo"><TT>БЛОК_МЕТАДАННЫХ_STREAMINFO</TT></A> || <A HREF="format.html#metadata_block_padding"><TT>БЛОК_МЕТАДАННЫХ_PADDING</TT></A> || <A HREF="format.html#metadata_block_application"><TT>БЛОК_МЕТАДАННЫХ_APPLICATION</TT></A> || <A HREF="format.html#metadata_block_seektable"><TT>БЛОК_МЕТАДАННЫХ_SEEKTABLE</TT></A> || <A HREF="#metadata_block_vorbis_comment"><TT>БЛОК_МЕТАДАННЫХ_VORBIS_COMMENT</TT></A> || <A HREF="#metadata_block_cuesheet"><TT>METADATA_BLOCK_CUESHEET</TT></A></TD>
Chris@1 344 <TD>Содержимое блока должно соответствовать типу блока, указанному в заголовке</TD>
Chris@1 345 </TR>
Chris@1 346
Chris@1 347 </TABLE></P>
Chris@1 348
Chris@1 349 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 350
Chris@1 351 <TR>
Chris@1 352 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_streaminfo"><FONT SIZE="+2"><B><TT>БЛОК_МЕТАДАННЫХ_STREAMINFO</TT></B></FONT></A></TD>
Chris@1 353 </TR>
Chris@1 354
Chris@1 355 <TR>
Chris@1 356 <TD VALIGN="TOP">&lt;16&gt;</TD>
Chris@1 357 <TD>Минимальный размер блока в сэмплах в данном потоке.</TD>
Chris@1 358 </TR>
Chris@1 359
Chris@1 360 <TR>
Chris@1 361 <TD VALIGN="TOP">&lt;16&gt;</TD>
Chris@1 362 <TD>Максимальный размер блока в сэмплах в данном потоке.</TD>
Chris@1 363 </TR>
Chris@1 364
Chris@1 365 <TR>
Chris@1 366 <TD VALIGN="TOP">&lt;24&gt;</TD>
Chris@1 367 <TD>Минимальный размер фрейма в байтах в данном потоке. Если значение не известно, то <TT>0</TT></TD>
Chris@1 368 </TR>
Chris@1 369
Chris@1 370 <TR>
Chris@1 371 <TD VALIGN="TOP">&lt;24&gt;</TD>
Chris@1 372 <TD>Максимальный размер фрейма в байтах в данном потоке. Если значение не известно, то <TT>0</TT></TD>
Chris@1 373 </TR>
Chris@1 374
Chris@1 375 <TR>
Chris@1 376 <TD VALIGN="TOP">&lt;20&gt;</TD>
Chris@1 377 <TD>Частота дискретизации в Гц.</TD>
Chris@1 378 </TR>
Chris@1 379
Chris@1 380 <TR>
Chris@1 381 <TD VALIGN="TOP">&lt;3&gt;</TD>
Chris@1 382 <TD><TT>(Количество каналов) - 1</TT>. FLAC поддерживает от 1 до 8 каналов.</TD>
Chris@1 383 </TR>
Chris@1 384
Chris@1 385 <TR>
Chris@1 386 <TD VALIGN="TOP">&lt;5&gt;</TD>
Chris@1 387 <TD><TT>(Количество битов на сэмпл) - 1</TT>. FLAC поддерживает от 1 до 32 битов на сэмпл. Сейчас базовые декодер и кодер поддерживают до 24 бит на сэмпл.</TD>
Chris@1 388 </TR>
Chris@1 389
Chris@1 390 <TR>
Chris@1 391 <TD VALIGN="TOP">&lt;36&gt;</TD>
Chris@1 392 <TD>Количество сэмплов в потоке. Если здесь указан <TT>0</TT>, то количество сэмплов не известно.</TD>
Chris@1 393 </TR>
Chris@1 394
Chris@1 395 <TR>
Chris@1 396 <TD VALIGN="TOP">&lt;128&gt;</TD>
Chris@1 397 <TD>Подпись MD5 несжатых аудиоданных, которая позволяет декодеру обнаружить ошибку, даже если ее наличие не нарушает структуру потока.</TD>
Chris@1 398 </TR>
Chris@1 399
Chris@1 400 <TR>
Chris@1 401 <TD VALIGN="TOP">&nbsp;</TD>
Chris@1 402 <TD><B>Примечания</B>:
Chris@1 403 <UL>
Chris@1 404 <LI>Во FLAC определен минимальный размер блока в <TT>16</TT> сэмплов и максимальный размер - <TT>65535</TT>. Это значит, что значения от <TT>0</TT> до <TT>15</TT> в соответствующих полях являются ошибочными.</LI>
Chris@1 405 </UL>
Chris@1 406 </TD>
Chris@1 407 </TR>
Chris@1 408
Chris@1 409 </TABLE></P>
Chris@1 410
Chris@1 411
Chris@1 412 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 413
Chris@1 414 <TR>
Chris@1 415 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_padding"><FONT SIZE="+2"><B><TT>БЛОК_МЕТАДАННЫХ_PADDING</TT></B></FONT></A></TD>
Chris@1 416 </TR>
Chris@1 417
Chris@1 418 <TR>
Chris@1 419 <TD VALIGN="TOP">&lt;n&gt;</TD>
Chris@1 420 <TD><TT>n</TT> бит со значением <TT>0</TT>. <TT>n</TT> должно быть кратно 8.</TD>
Chris@1 421 </TR>
Chris@1 422
Chris@1 423 </TABLE></P>
Chris@1 424
Chris@1 425
Chris@1 426 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 427
Chris@1 428 <TR>
Chris@1 429 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_application"><FONT SIZE="+2"><B><TT>БЛОК_МЕТАДАННЫХ_APPLICATION</TT></B></FONT></A></TD>
Chris@1 430 </TR>
Chris@1 431
Chris@1 432 <TR>
Chris@1 433 <TD VALIGN="TOP">&lt;32&gt;</TD>
Chris@1 434 <TD>Зарегистрированный id приложения (см. страницу <A HREF="id.html">регистрации</A>)</TD>
Chris@1 435 </TR>
Chris@1 436
Chris@1 437 <TR>
Chris@1 438 <TD VALIGN="TOP">&lt;n&gt;</TD>
Chris@1 439 <TD>Данные приложения. <TT>n</TT> должно быть кратно 8.</TD>
Chris@1 440 </TR>
Chris@1 441
Chris@1 442 </TABLE></P>
Chris@1 443
Chris@1 444
Chris@1 445 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 446
Chris@1 447 <TR>
Chris@1 448 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_seektable"><FONT SIZE="+2"><B><TT>БЛОК_МЕТАДАННЫХ_SEEKTABLE</TT></B></FONT></A></TD>
Chris@1 449 </TR>
Chris@1 450
Chris@1 451 <TR>
Chris@1 452 <TD VALIGN="TOP"><A HREF="format.html#metadata_block_seekpoint"><TT>SEEKPOINT</TT></A>+</TD>
Chris@1 453 <TD>Одна или больше точек поиска.</TD>
Chris@1 454 </TR>
Chris@1 455
Chris@1 456 <TR>
Chris@1 457 <TD VALIGN="TOP">&nbsp;</TD>
Chris@1 458 <TD><B>Примечания</B>:
Chris@1 459 <UL>
Chris@1 460 <LI>Количество точек поиска определяется в поле заголовка блока метаданных &quot;длина&quot; и равно <TT>длина / 18</TT>.</LI>
Chris@1 461 </UL>
Chris@1 462 </TD>
Chris@1 463 </TR>
Chris@1 464
Chris@1 465 </TABLE></P>
Chris@1 466
Chris@1 467
Chris@1 468 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 469
Chris@1 470 <TR>
Chris@1 471 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_seekpoint"><FONT SIZE="+2"><B><TT>БЛОК_МЕТАДАННЫХ_SEEKPOINT</TT></B></FONT></A></TD>
Chris@1 472 </TR>
Chris@1 473
Chris@1 474 <TR>
Chris@1 475 <TD VALIGN="TOP">&lt;64&gt;</TD>
Chris@1 476 <TD>Номер сэмпла в потоке первого сэмпла целевого фрейма или 0xFFFFFFFFFFFFFFFF для зарезервированной точки.</TD>
Chris@1 477 </TR>
Chris@1 478
Chris@1 479 <TR>
Chris@1 480 <TD VALIGN="TOP">&lt;64&gt;</TD>
Chris@1 481 <TD>Смещение в байтах от первого байта первого заголовка фрейма до первого байта заголовка целевого фрейма.</TD>
Chris@1 482 </TR>
Chris@1 483
Chris@1 484 <TR>
Chris@1 485 <TD VALIGN="TOP">&lt;16&gt;</TD>
Chris@1 486 <TD>Количество сэмплов в целевом фрейме.</TD>
Chris@1 487 </TR>
Chris@1 488
Chris@1 489 <TR>
Chris@1 490 <TD VALIGN="TOP">&nbsp;</TD>
Chris@1 491 <TD><B>Примечания</B>:
Chris@1 492 <UL>
Chris@1 493 <LI>Для зарезервированных точек значения второго и третьего поля не определены.</LI>
Chris@1 494 <LI>Точки поиска должны быть отсортированы в таблице по возрастанию номера сэмпла.</LI>
Chris@1 495 <LI>Поля, содержащие номера первых сэмплов в целевом фрейме, должны быть уникальны для всех точек, за исключением зарезервированных.</LI>
Chris@1 496 <LI>Из двух предыдущих замечаний следует, что зарезервированных точек может быть любое количество, но они должны располагаться в конце таблицы.</LI>
Chris@1 497 </UL>
Chris@1 498 </TD>
Chris@1 499 </TR>
Chris@1 500 </TABLE></P>
Chris@1 501
Chris@1 502
Chris@1 503 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 504
Chris@1 505 <TR>
Chris@1 506 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_vorbis_comment"><FONT SIZE="+2"><B><TT>БЛОК_МЕТАДАННЫХ_VORBIS_COMMENT</TT></B></FONT></A></TD>
Chris@1 507 </TR>
Chris@1 508
Chris@1 509 <TR>
Chris@1 510 <TD VALIGN="TOP">&lt;n&gt;</TD>
Chris@1 511 <TD>Содержимое комметария в формате Vorbis, как оно описано <A HREF="http://www.xiph.org/ogg/vorbis/doc/v-comment.html">здесь</A>. Обратите внимание на то, что спецификация Vorbis ограничивает размер этого блока 2 ^ 64 байтами, в то время как блок метаданных FLAC может иметь размер не больше 2 ^ 24 байтов. В соответствии со спецификацией Vorbis 32-битные данные, записанные в прямом порядке, в отличие от целых, записанных в обратном порядке, используемых в остальных частях FLAC.</TD>
Chris@1 512 </TR>
Chris@1 513 </TABLE></P>
Chris@1 514
Chris@1 515 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 516
Chris@1 517 <TR>
Chris@1 518 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="metadata_block_cuesheet"><FONT SIZE="+2"><B><TT>БЛОК_МЕТАДАННЫХ_CUESHEET</TT></B></FONT></A></TD>
Chris@1 519 </TR>
Chris@1 520
Chris@1 521
Chris@1 522 <TR>
Chris@1 523 <TD>&lt;128*8&gt;</TD>
Chris@1 524 <TD>Номер в мультимедийном каталоге, в котором используются только символы ASCII из диапазона 0x20-0x7e. В общем случае этот номер может иметь размер от 0 до 128 байтов, а символы справа, оставшиеся неиспользованными, должны быть заполнены байтом 0x00. На аудиодисках номер состоит из 13 цифр, за которыми следуют 115 пустых символов.</TD></TR>
Chris@1 525
Chris@1 526 <TR>
Chris@1 527 <TD>&lt;64&gt;</TD>
Chris@1 528 <TD>Количество начальных сэмплов. Это поле имеет значение только для оглавлений аудиодисков, для остальных целей должно быть установлено значение 0. Для аудиодисков начальной является зона помеченная как TRACK 00, где хранится оглавление. Более точно определение для данного поля выглядело бы так: это число сэмплов от первого сэмпла на диске до первого сэмпла превой индексной точки первого трека. В соответствии со стандартом Red Book начальная зона должна содержать тишину, поэтому программы для копирования с аудиодиска обычно не сохраняют ее. Кроме того начальная зона должна занимать не меньше двух секунд. Поэтому здесь хранится длина начальной зоны, чтобы потом моджно было вычислить абсолютную позицию первого трека. Обратите внимание на то, что число сэмплов указывается до первой индексной точки первого трека, а не обязательно до точки INDEX 01 первого трека, так как на первом треке могут быть данные с индексом INDEX 00.</TD></TR>
Chris@1 529
Chris@1 530 <TR>
Chris@1 531 <TD>&lt;1&gt;</TD>
Chris@1 532 <TD><TT>1</TT>, если CUESHEET соответствует компакт диску, иначе <TT>0</TT>.</TD></TR>
Chris@1 533
Chris@1 534 <TR>
Chris@1 535 <TD>&lt;7+258*8&gt;</TD>
Chris@1 536 <TD>Зарезервировано. Все биты должны быть равны 0.</TD></TR>
Chris@1 537
Chris@1 538 <TR>
Chris@1 539 <TD>&lt;8&gt;</TD>
Chris@1 540 <TD>Количество треков. Для аудиодисков это число должно быть не больше, чем 100 (99 обычных треков и завершающий трек).</TD></TR>
Chris@1 541
Chris@1 542 <TR>
Chris@1 543 <TD><A HREF="#cuesheet_track"><TT>CUESHEET_TRACK</TT></A>+</TD>
Chris@1 544 <TD>Один или больше треков. В блоке CUESHEET обязательно должен быть завершающий трек@@@@. По спецификации Red Book на аудиодисках номер завершающего трека должен равняться 170.</TD></TR>
Chris@1 545 </TABLE></P>
Chris@1 546
Chris@1 547 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 548
Chris@1 549 <TR>
Chris@1 550 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="cuesheet_track"><FONT SIZE="+1"><B><TT>CUESHEET_TRACK</TT></B></FONT></A></TD>
Chris@1 551 </TR>
Chris@1 552
Chris@1 553
Chris@1 554 <TR>
Chris@1 555 <TD>&lt;64&gt;</TD>
Chris@1 556 <TD>Смещение трека в сэмплах относительно начала аудиопотока FLAC. Это смещение для первой индексной точки трека. (Обратите внимание на отличие от аудиодиска, где смещение трека в содержании хранится в INDEX 01, даже если есть INDEX 00.) В аудиодиске смещение всегда кратно 588 (588 сэмплов = 44100 сэмплов/сек. * 1/75 сек.).</TD></TR>
Chris@1 557
Chris@1 558 <TR>
Chris@1 559 <TD>&lt;8&gt;</TD>
Chris@1 560 <TD>Номер трека. Номер трека 0 недопустим, чтобы избежать конфликта со спецификацией аудиодиска, которая резервирует этот номер для начального трека. Для аудиодиска номер должен быть от 1 до 99 или 170 для завершающего трека. Не является необходимым, но рекомендуется начинать нумерацию с 1 и увеличивать номера последовательно. Номера треков в списке должны быть уникальными.</TD></TR>
Chris@1 561
Chris@1 562 <TR>
Chris@1 563 <TD>&lt;12*8&gt;</TD>
Chris@1 564 <TD>Международный стандартный код записи (ISRC) для трека. Это 12-символьный код, состоящий только из цифр; см. <A HREF="http://www.ifpi.org/isrc/isrc_handbook.html">здесь</A> и <A HREF="http://www.discusa.com/cdref/cdaudio/isrc.htm">здесь</A>. Значение из 12 пустых символов ASCII можно использовать, чтобы указать на отсутствие ISRC.</TD></TR>
Chris@1 565
Chris@1 566 <TR>
Chris@1 567 <TD>&lt;1&gt;</TD>
Chris@1 568 <TD>Тип трека: 0 - для аудио, 1 - для остальных типов данных. Это поле соответствует третьему контольному биту Q-канала аудиодиска.</TD></TR>
Chris@1 569
Chris@1 570 <TR>
Chris@1 571 <TD>&lt;1&gt;</TD>
Chris@1 572 <TD>Флаг предварительной корелляции: 0 -- если ее нет, иначе 1. Соответствует 5 контрольному биту Q-канала аудиодиска; см. <A HREF="http://www.chipchapin.com/CDMedia/cdda9.php3">здесь</A>.</TD></TR>
Chris@1 573
Chris@1 574 <TR>
Chris@1 575 <TD>&lt;6+13*8&gt;</TD>
Chris@1 576 <TD>Зарезервировано. Все биты должны быть равны 0.</TD></TR>
Chris@1 577
Chris@1 578 <TR>
Chris@1 579 <TD>&lt;8&gt;</TD>
Chris@1 580 <TD>Число индексных точек трека. Для каждого трека должен быть хотя бы один индекс, кроме завершающего, у которого нет индекса. У аудиодиска это число не должно быть больше 100.</TD></TR>
Chris@1 581
Chris@1 582 <TR>
Chris@1 583 <TD><A HREF="#cuesheet_track_index"><TT>ИНДЕКС_ТРЕКА_В_СПИСКЕ</TT></A>+</TD>
Chris@1 584 <TD>Одна или больше индексных точек для трека.</TD></TR>
Chris@1 585 </TABLE></P>
Chris@1 586
Chris@1 587
Chris@1 588 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 589 <TR>
Chris@1 590 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="cuesheet_track_index"><FONT SIZE="+1"><B>ИНДЕКС_ТРЕКА_В_СПИСКЕ</B></FONT></A></TD></TR>
Chris@1 591
Chris@1 592 <TR>
Chris@1 593 <TD>&lt;64&gt;</TD>
Chris@1 594 <TD>Смещение в сэмплах индексной точки относительно смещения трека. Для аудиодиска смещение должно быть кратно 588 (588 сэмплов = 44100 сэмплов/сек. * 1/75 сек.). Обратите внимание на то, что смещение берется от начала трека, а не от начала аудиоданных.</TD></TR>
Chris@1 595
Chris@1 596 <TR>
Chris@1 597 <TD>&lt;8&gt;</TD>
Chris@1 598 <TD>Номер индексной точки. Первый индекс трека должен иметь номер 0 или 1, а далее номера индексов должны последовательно увеличиваться на 1. Номера индексов для трека должны быть уникальны.</TD></TR>
Chris@1 599
Chris@1 600 <TR>
Chris@1 601 <TD>&lt;3*8&gt;</TD>
Chris@1 602 <TD>Зарезервировано. Все биты должны быть равны 0.</TD></TR>
Chris@1 603 </TABLE></P>
Chris@1 604
Chris@1 605 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 606
Chris@1 607 <TR>
Chris@1 608 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="frame"><FONT SIZE="+2"><B><TT>ФРЕЙМ</TT></B></FONT></A></TD>
Chris@1 609 </TR>
Chris@1 610
Chris@1 611 <TR>
Chris@1 612 <TD VALIGN="TOP"><A HREF="format.html#frame_header"><TT>ЗАГОЛОВОК_ФРЕЙМА</TT></A></TD>
Chris@1 613 <TD>&nbsp;</TD>
Chris@1 614 </TR>
Chris@1 615
Chris@1 616 <TR>
Chris@1 617 <TD VALIGN="TOP"><A HREF="format.html#subframe"><TT>ПОДФРЕЙМ</TT></A>+</TD>
Chris@1 618 <TD>Один подфрейм на канал</TD>
Chris@1 619 </TR>
Chris@1 620
Chris@1 621 <TR>
Chris@1 622 <TD VALIGN="TOP">&lt;?&gt;</TD>
Chris@1 623 <TD>Выравнивание нулями на границу байта</TD>
Chris@1 624 </TR>
Chris@1 625
Chris@1 626 <TR>
Chris@1 627 <TD VALIGN="TOP"><A HREF="format.html#frame_footer"><TT>ЗАВЕРШЕНИЕ_ФРЕЙМА</TT></A></TD>
Chris@1 628 <TD>&nbsp;</TD>1</TR>
Chris@1 629
Chris@1 630 </TABLE></P>
Chris@1 631
Chris@1 632
Chris@1 633 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 634
Chris@1 635 <TR>
Chris@1 636 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="frame_header"><FONT SIZE="+2"><B><TT>ЗАГОЛОВОК_ФРЕЙМА</TT></B></FONT></A></TD>
Chris@1 637 </TR>
Chris@1 638
Chris@1 639 <TR>
Chris@1 640 <TD VALIGN="TOP">&lt;14&gt;</TD>
Chris@1 641 <TD>код синхронизации <TT>11111111111110</TT></TD>
Chris@1 642 </TR>
Chris@1 643
Chris@1 644 <TR>
Chris@1 645 <TD VALIGN="TOP">&lt;2&gt;</TD>
Chris@1 646 <TD>Зарезервировано:
Chris@1 647 <UL>
Chris@1 648 <LI>00 : обязательное значение</LI>
Chris@1 649 <LI>01-11 : зарезервировано для последующего использования</LI>
Chris@1 650 </UL>
Chris@1 651 </TD>
Chris@1 652 </TR>
Chris@1 653
Chris@1 654 <TR>
Chris@1 655 <TD VALIGN="TOP">&lt;4&gt;</TD>
Chris@1 656 <TD>Размер блока в сэмплах:
Chris@1 657 <UL>
Chris@1 658 <LI>0000 : получить из блока метаданных <TT>STREAMINFO</TT></LI>
Chris@1 659 <LI>0001 : <TT>192</TT> сэмпла</LI>
Chris@1 660 <LI>0010-0101 : <TT>576 * (2^(2-n))</TT> сэмплов, т.е. <TT>576/1152/2304/4608</TT></LI>
Chris@1 661 <LI>0110 : получить 8 битов (размер блока-1) из конца заголовка</LI>
Chris@1 662 <LI>0111 : получить 16 битов (размер блока-1) из конца заголовка</LI>
Chris@1 663 <LI>1000-1111 : <TT>256 * (2^(n-8))</TT> сэмплов, т.е. <TT>256/512/1024/2048/4096/8192/16384/32768</TT></LI>
Chris@1 664 </UL>
Chris@1 665 </TD>
Chris@1 666 </TR>
Chris@1 667
Chris@1 668 <TR>
Chris@1 669 <TD VALIGN="TOP">&lt;4&gt;</TD>
Chris@1 670 <TD>Частота дискретизации:
Chris@1 671 <UL>
Chris@1 672 <LI><TT>0000</TT> : получить из блока метаданных <TT>STREAMINFO</TT></LI>
Chris@1 673 <LI><TT>0001-0011</TT> : зарезервированы</LI>
Chris@1 674 <LI><TT>0100</TT> : 8кГц</LI>
Chris@1 675 <LI><TT>0101</TT> : 16кГц</LI>
Chris@1 676 <LI><TT>0110</TT> : 22.05кГц</LI>
Chris@1 677 <LI><TT>0111</TT> : 24кГц</LI>
Chris@1 678 <LI><TT>1000</TT> : 32кГц</LI>
Chris@1 679 <LI><TT>1001</TT> : 44.1кГц</LI>
Chris@1 680 <LI><TT>1010</TT> : 48кГц</LI>
Chris@1 681 <LI><TT>1011</TT> : 96кГц</LI>
Chris@1 682 <LI><TT>1100</TT> : получить 8-битное значение частоты дискретизации (в кГц) из конца заголовка</LI>
Chris@1 683 <LI><TT>1101</TT> : получить 16-битное значение частоты дискретизации (в Гц) из конца заголовка</LI>
Chris@1 684 <LI><TT>1110</TT> : получить 16-битное значение частоты дискретизации (в дГц) из конца заголовка</LI>
Chris@1 685 <LI><TT>1111</TT> : ошибочное значение, чтобы не допустить совпадение с кодом синхронизации</LI>
Chris@1 686 </UL>
Chris@1 687 </TD>
Chris@1 688 </TR>
Chris@1 689
Chris@1 690 <TR>
Chris@1 691 <TD VALIGN="TOP">&lt;4&gt;</TD>
Chris@1 692 <TD>Расположение каналов:
Chris@1 693 <UL>
Chris@1 694 <LI><TT>0000-0111</TT> : <TT>(количество независимых каналов)-1</TT>. Когда == <TT>0001</TT>, канал <TT>0</TT> является левым, <TT>1</TT> - правым</LI>
Chris@1 695 <LI><TT>1000</TT> : левостороннее стерео: канал <TT>0</TT> является левым, <TT>1</TT> - разностным</LI>
Chris@1 696 <LI><TT>1001</TT> : правостороннее стерео: канал <TT>0</TT> является разностным, <TT>1</TT> - правым</LI>
Chris@1 697 <LI><TT>1010</TT> : усредненное стерео: канал <TT>0</TT> является усредненным, <TT>1</TT> - разностным
Chris@1 698 <LI><TT>1011-1111</TT> : зарезервированы</LI>
Chris@1 699 </UL>
Chris@1 700 </TD>
Chris@1 701 </TR>
Chris@1 702
Chris@1 703 <TR>
Chris@1 704 <TD VALIGN="TOP">&lt;3&gt;</TD>
Chris@1 705 <TD>Количество битов на сэмпл:
Chris@1 706 <UL>
Chris@1 707 <LI><TT>000</TT> : получить из блока метаданных <TT>STREAMINFO</TT></LI>
Chris@1 708 <LI><TT>001</TT> : 8 бит на сэмпл</LI>
Chris@1 709 <LI><TT>010</TT> : 12 бит на сэмпл</LI>
Chris@1 710 <LI><TT>011</TT> : зарезервировано</LI>
Chris@1 711 <LI><TT>100</TT> : 16 бит на сэмпл</LI>
Chris@1 712 <LI><TT>101</TT> : 20 бит на сэмпл</LI>
Chris@1 713 <LI><TT>110</TT> : 24 бит на сэмпл</LI>
Chris@1 714 <LI><TT>111</TT> : зарезервировано</LI>
Chris@1 715 </UL>
Chris@1 716 </TD>
Chris@1 717 </TR>
Chris@1 718
Chris@1 719 <TR>
Chris@1 720 <TD VALIGN="TOP">&lt;1&gt;</TD>
Chris@1 721 <TD>Дополнение нулем до границы бита, чтобы не допустить ошибку синхронизации</TD>
Chris@1 722 </TR>
Chris@1 723
Chris@1 724 <TR>
Chris@1 725 <TD VALIGN="TOP">&lt;?&gt;</TD>
Chris@1 726 <TD>Если <TT>(переменный размер блока)</TT><BR>
Chris@1 727 &nbsp;&nbsp;&nbsp;<8-56> : номер сэмпла в формате UTF-8 (размер декодируемого числа 36 бит)<BR>
Chris@1 728 иначе<BR>
Chris@1 729 &nbsp;&nbsp;&nbsp;<8-48> : номер фрейма в формате UTF-8 (размер декодируемого числа 31 бит)</TD>
Chris@1 730 </TR>
Chris@1 731
Chris@1 732 <TR>
Chris@1 733 <TD VALIGN="TOP">&lt;?&gt;</TD>
Chris@1 734 <TD>Если <TT>(битовая маска размера блока == 11x)</TT><BR>
Chris@1 735 &nbsp;&nbsp;&nbsp;8/16 бит <TT>(размер блока - 1)</TT></TD>
Chris@1 736 </TR>
Chris@1 737
Chris@1 738 <TR>
Chris@1 739 <TD VALIGN="TOP">&lt;?&gt;</TD>
Chris@1 740 <TD>Если <TT>(битовая маска частоты дискретизации == 11xx)</TT><BR>
Chris@1 741 &nbsp;&nbsp;&nbsp;частота дискретизации 8/16 бит</TD>
Chris@1 742 </TR>
Chris@1 743
Chris@1 744 <TR>
Chris@1 745 <TD VALIGN="TOP">&lt;8&gt;</TD>
Chris@1 746 <TD>8-битная полиномальная контрольная сумма <TT>(x^8 + x^2 + x^1 + x^0)</TT> данных заголовка, включая код синхронизации (<TT>x</TT> инициализируется нулем).</TD>
Chris@1 747 </TR>
Chris@1 748
Chris@1 749 <TR>
Chris@1 750 <TD VALIGN="TOP">&nbsp;</TD>
Chris@1 751 <TD><B>Примечания</B>:
Chris@1 752 <UL>
Chris@1 753 <LI>Биты размера блока <TT>0000-0101</TT> могут быть использованы только при постоянном их значении во всем блоке. Биты <TT>0110-0111</TT> могут использоваться в любом случае, декодер будет считать, что поток имеет переменную длину блока. Существует одно исключение: кодер может использовать биты <TT>0110-0111</TT> в последнем фрейме потока с постоянным размером блока в том случае, если его длина не больше, чем используемая в всем потоке.</LI>
Chris@1 754 </UL>
Chris@1 755 </TD>
Chris@1 756 </TR>
Chris@1 757
Chris@1 758 </TABLE></P>
Chris@1 759
Chris@1 760
Chris@1 761 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 762
Chris@1 763 <TR>
Chris@1 764 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="frame_footer"><FONT SIZE="+2"><B><TT>ЗАВЕРШЕНИЕ_ФРЕЙМА</TT></B></FONT></A></TD>
Chris@1 765 </TR>
Chris@1 766
Chris@1 767 <TR>
Chris@1 768 <TD VALIGN="TOP">&lt;16&gt;</TD>
Chris@1 769 <TD>16-битная полиномальная контрольная сумма <TT>(x^16 + x^15 + x^2 + x^0)</TT> всего фрейма (<TT>x</TT> инициализируется нулем).</TD>
Chris@1 770 </TR>
Chris@1 771
Chris@1 772 </TABLE></P>
Chris@1 773
Chris@1 774
Chris@1 775 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 776
Chris@1 777 <TR>
Chris@1 778 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="subframe"><FONT SIZE="+2"><B><TT>ПОДФРЕЙМ</TT></B></FONT></A></TD>
Chris@1 779 </TR>
Chris@1 780
Chris@1 781 <TR>
Chris@1 782 <TD VALIGN="TOP"><A HREF="format.html#subframe_header"><TT>ЗАГОЛОВОК_ПОДФРЕЙМА</TT></A></TD>
Chris@1 783 <TD>&nbsp;</TD>
Chris@1 784 </TR>
Chris@1 785
Chris@1 786 <TR>
Chris@1 787 <TD VALIGN="TOP"><A HREF="format.html#subframe_constant"><TT>ПОДФРЕЙМ_CONSTANT</TT></A> || <A HREF="format.html#subframe_fixed"><TT>ПОДФРЕЙМ_FIXED</TT></A> ||<BR><A HREF="format.html#subframe_lpc"><TT>ПОДФРЕЙМ_LPC</TT></A> || <A HREF="format.html#subframe_verbatim"><TT>ПОДФРЕЙМ_VERBATIM</TT></A></TD>
Chris@1 788 <TD>Тип подфрейма, определяемый в заголовке</TD>
Chris@1 789 </TR>
Chris@1 790
Chris@1 791 </TABLE></P>
Chris@1 792
Chris@1 793
Chris@1 794 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 795
Chris@1 796 <TR>
Chris@1 797 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="subframe_header"><FONT SIZE="+2"><B><TT>ЗАГОЛОВОК_ПОДФРЕЙМА</TT></B></FONT></A></TD>
Chris@1 798 </TR>
Chris@1 799
Chris@1 800 <TR>
Chris@1 801 <TD VALIGN="TOP">&lt;1&gt;</TD>
Chris@1 802 <TD>Бит равный <TT>0</TT>, чтобы предотвратить ошибку синхронизации.</TD>
Chris@1 803 </TR>
Chris@1 804
Chris@1 805 <TR>
Chris@1 806 <TD VALIGN="TOP">&lt;6&gt;</TD>
Chris@1 807 <TD>Тип подфрейма:
Chris@1 808 <UL>
Chris@1 809 <LI><TT>000000</TT> : <A HREF="format.html#subframe_constant"><TT>ПОДФРЕЙМ_CONSTANT</TT></A></LI>
Chris@1 810 <LI><TT>000001</TT> : <A HREF="format.html#subframe_verbatim"><TT>ПОДФРЕЙМ_VERBATIM</TT></A></LI>
Chris@1 811 <LI><TT>00001x</TT> : зарезервировано</LI>
Chris@1 812 <LI><TT>0001xx</TT> : зарезервировано</LI>
Chris@1 813 <LI><TT>001xxx</TT> : Если (<TT>xxx</TT> <= 4) <A HREF="format.html#subframe_fixed"><TT>ПОДФРЕЙМ_FIXED</TT></A>, <TT>xxx</TT> = порядок; иначе зарезервировано</LI>
Chris@1 814 <LI><TT>01xxxx</TT> : зарезервировано</LI>
Chris@1 815 <LI><TT>1xxxxx</TT> : <A HREF="format.html#subframe_lpc"><TT>ПОДФРЕЙМ_LPC</TT></A>, <TT>xxxxx = порядок-1</TT></LI>
Chris@1 816 </UL>
Chris@1 817 </TD>
Chris@1 818 </TR>
Chris@1 819
Chris@1 820 <TR>
Chris@1 821 <TD VALIGN="TOP">&lt;1+k&gt;</TD>
Chris@1 822 <TD>Флаг 'неиспользуемые биты на сэмпл':
Chris@1 823 <UL>
Chris@1 824 <LI>0 : в исходном подблоке нет 'неиспользуемых битов', <TT>k=0</TT></LI>
Chris@1 825 <LI>1 : <TT>k</TT> 'неиспользуемых битов' в исходном подблоке, число записывается в унарном формате; т.е. для <TT>k=3</TT> последовательность битов будет выглядеть так <TT>001</TT>, для <TT>k=7</TT> - <TT>0000001</TT>.</LI>
Chris@1 826 </UL>
Chris@1 827 </TD>
Chris@1 828 </TR>
Chris@1 829
Chris@1 830 <TR>
Chris@1 831 <TD VALIGN="TOP">&nbsp;</TD>
Chris@1 832 <TD><B>Примечания</B>:
Chris@1 833 <UL>
Chris@1 834 <LI>'Неиспользуемые биты' встречаются в блоке данных, если при заявленных <TT>n</TT> битах значимыми являются только <TT>m</TT>. Число <TT>k = n - m</TT> и будет определять количество 'неиспользуемых битов'. Например, если все 16-битные сэмплы в исходном подблоке выглядят как 'xxxxxxxxxxxxx000', то кодер кодирует только 13 бит, и запоминает, что 3 бита являются 'неиспользуемыми'.</LI>
Chris@1 835 </UL>
Chris@1 836 </TD>
Chris@1 837 </TR>
Chris@1 838
Chris@1 839 </TABLE></P>
Chris@1 840
Chris@1 841
Chris@1 842 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 843
Chris@1 844 <TR><TD COLSPAN="2" BGCOLOR="#E0E0E0">
Chris@1 845 <A NAME="subframe_constant"><FONT SIZE="+2"><B><TT>
Chris@1 846 ПОДФРЕЙМ_CONSTANT</TT></B></FONT></A></TD></TR>
Chris@1 847
Chris@1 848 <TR><TD VALIGN="TOP">
Chris@1 849 &lt;n&gt;</TD>
Chris@1 850 <TD>Несжатое постоянное значение подблока, <TT>n</TT> равно количеству битов на сэмпл во фрейме</TD><TR>
Chris@1 851 </TABLE></P>
Chris@1 852
Chris@1 853
Chris@1 854 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 855
Chris@1 856 <TR>
Chris@1 857 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="subframe_fixed"><FONT SIZE="+2"><B><TT>ПОДФРЕЙМ_FIXED</TT></B></FONT></A></TD>
Chris@1 858 </TR>
Chris@1 859
Chris@1 860 <TR>
Chris@1 861 <TD VALIGN="TOP">&lt;n&gt;</TD>
Chris@1 862 <TD>Некодируемые начальные сэмплы (<TT>n</TT> равно количеству битов на сэмпл во фрейме, умноженному на порядок предиктора).</TD>
Chris@1 863 </TR>
Chris@1 864
Chris@1 865 <TR>
Chris@1 866 <TD VALIGN="TOP"><A HREF="format.html#residual"><TT>ОСТАТОК</TT></A></TD>
Chris@1 867 <TD>Закодированный остаток</TD>
Chris@1 868 </TR>
Chris@1 869
Chris@1 870 </TABLE></P>
Chris@1 871
Chris@1 872
Chris@1 873 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 874
Chris@1 875 <TR>
Chris@1 876 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="subframe_lpc"><FONT SIZE="+2"><B><TT>ПОДФРЕЙМ_LPC</TT></B></FONT></A></TD>
Chris@1 877 </TR>
Chris@1 878
Chris@1 879 <TR>
Chris@1 880 <TD VALIGN="TOP">&lt;n&gt;</TD>
Chris@1 881 <TD>Некодируемые начальные сэмплы (<TT>n</TT> равно количеству битов на сэмпл во фрейме, умноженному на порядок предиктора).</TD>
Chris@1 882 </TR>
Chris@1 883
Chris@1 884 <TR>
Chris@1 885 <TD VALIGN="TOP">&lt;4&gt;</TD>
Chris@1 886 <TD><TT>(точность дискретного коэффициета линейного прогнозирования (QLP)) - 1</TT>. Значение <TT>1111</TT> недопустимо.</TD>
Chris@1 887 </TR>
Chris@1 888
Chris@1 889 <TR>
Chris@1 890 <TD VALIGN="TOP">&lt;5&gt;</TD>
Chris@1 891 <TD>Необходимый сдвиг дискретного коэффициета линейного прогнозирования в битах. (<B>Примечание</B>: это число - знаковое дополнение до двух).</TD>
Chris@1 892 </TR>
Chris@1 893
Chris@1 894 <TR>
Chris@1 895 <TD VALIGN="TOP">&lt;n&gt;</TD>
Chris@1 896 <TD>Несжатые коэффициенты прогнозирования <TT>(n = точность QLP * порядок LPC)</TT> (<B>Примечание</B>: эти числа являются знаковыми дополнениями до двух).</TD>
Chris@1 897 </TR>
Chris@1 898
Chris@1 899 <TR>
Chris@1 900 <TD VALIGN="TOP"><A HREF="format.html#residual"><TT>ОСТАТОК</TT></A></TD>
Chris@1 901 <TD>Закодированный остаток</TD>
Chris@1 902 </TR>
Chris@1 903
Chris@1 904 </TABLE></P>
Chris@1 905
Chris@1 906
Chris@1 907 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 908
Chris@1 909 <TR>
Chris@1 910 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="subframe_verbatim"><FONT SIZE="+2"><B><TT>ПОДФРЕЙМ_VERBATIM</TT></B></FONT></A></TD>
Chris@1 911 </TR>
Chris@1 912
Chris@1 913 <TR>
Chris@1 914 <TD VALIGN="TOP">&lt;n*i&gt;</TD>
Chris@1 915 <TD>Несжатый подблок, <TT>n</TT> равно количеству битов на сэмпл во фрейме, <TT>i</TT> - размеру блока</TD>
Chris@1 916 </TR>
Chris@1 917
Chris@1 918 </TABLE></P>
Chris@1 919
Chris@1 920
Chris@1 921 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 922
Chris@1 923 <TR>
Chris@1 924 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="residual"><FONT SIZE="+2"><B><TT>ОСТАТОК</TT></B></FONT></A></TD>
Chris@1 925 </TR>
Chris@1 926
Chris@1 927 <TR>
Chris@1 928 <TD VALIGN="TOP">&lt;2&gt;</TD>
Chris@1 929 <TD>Метод кодирования остатков:
Chris@1 930 <UL>
Chris@1 931 <LI><TT>00</TT> : кодирование Райса</LI>
Chris@1 932 <LI><TT>01-11</TT> : зарезервировано</LI>
Chris@1 933 </UL>
Chris@1 934 </TD>
Chris@1 935 </TR>
Chris@1 936
Chris@1 937 <TR>
Chris@1 938 <TD VALIGN="TOP"><A HREF="format.html#partitioned_rice"><TT>ОСТАТКИ_СЖАТЫЕ_МЕТОДОМ_РАЙСА</TT></A></TD>
Chris@1 939 <TD>&nbsp;</TD>
Chris@1 940 </TR>
Chris@1 941
Chris@1 942 <TR>
Chris@1 943 <TD VALIGN="TOP">&nbsp;</TD>
Chris@1 944 <TD><B>Примечания:</B>
Chris@1 945 <UL>
Chris@1 946 <LI>Сейчас FLAC использует только один метод кодирования остатков</LI>
Chris@1 947 </UL>
Chris@1 948 </TD>
Chris@1 949 </TR>
Chris@1 950
Chris@1 951 </TABLE></P>
Chris@1 952
Chris@1 953
Chris@1 954 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 955
Chris@1 956 <TR>
Chris@1 957 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="partitioned_rice"><FONT SIZE="+2"><B><TT>ОСТАТКИ_СЖАТЫЕ_МЕТОДОМ_РАЙСА</TT></B></FONT></A></TD>
Chris@1 958 </TR>
Chris@1 959
Chris@1 960 <TR>
Chris@1 961 <TD VALIGN="TOP">&lt;4&gt;</TD>
Chris@1 962 <TD>Порядок раздела</TD>
Chris@1 963 </TR>
Chris@1 964
Chris@1 965 <TR>
Chris@1 966 <TD VALIGN="TOP"><A HREF="format.html#rice_partition"><TT>РАЗДЕЛ_РАЙСА</TT></A>+</TD>
Chris@1 967 <TD>Далее следуют 2^порядок разделов</TD>
Chris@1 968 </TR>
Chris@1 969
Chris@1 970 </TABLE></P>
Chris@1 971
Chris@1 972
Chris@1 973 <P><TABLE WIDTH="100%" BORDER="1">
Chris@1 974
Chris@1 975 <TR>
Chris@1 976 <TD COLSPAN="2" BGCOLOR="#E0E0E0"><A NAME="rice_partition"><FONT SIZE="+2"><B><TT>РАЗДЕЛ_РАЙСА</TT></B></FONT></A></TD>
Chris@1 977 </TR>
Chris@1 978
Chris@1 979 <TR>
Chris@1 980 <TD VALIGN="TOP">&lt;4(+5)&gt;</TD>
Chris@1 981 <TD>Параметр кодирования:
Chris@1 982 <UL>
Chris@1 983 <LI><TT>0000-1110</TT> : Параметр Райса.</LI>
Chris@1 984 <LI><TT>1111</TT> : Код, означающий, что раздел является несжатым и в нем используются <TT>n</TT> битов на сэмпл. <TT>n</TT> представлено 5-битным числом.
Chris@1 985 </UL>
Chris@1 986 </TD>
Chris@1 987 </TR>
Chris@1 988
Chris@1 989 <TR>
Chris@1 990 <TD VALIGN="TOP">&lt;?&gt;</TD>
Chris@1 991 <TD>Закодированный остаток. Количество сэмплов <TT>n</TT> в разделе определяется следующим образом:
Chris@1 992 <UL>
Chris@1 993 <LI>Если порядок раздела равен <TT>0</TT>, <TT>n</TT> равно размеру блока для фрейма.</LI>
Chris@1 994 <LI>иначе если это не первый раздел подфрейма, <TT>n = (размер блока для фрейма / (2^порядок раздела))</TT></LI>
Chris@1 995 <LI>иначе <TT>n = (размер блока для фрейма / (2^порядок раздела)) - порядок предиктора</TT></LI>
Chris@1 996 </UL>
Chris@1 997 </TD>
Chris@1 998 </TR>
Chris@1 999
Chris@1 1000 </TABLE></P>
Chris@1 1001
Chris@1 1002
Chris@1 1003 <P>&nbsp;Copyright (c) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson</P>
Chris@1 1004
Chris@1 1005 </BODY>
Chris@1 1006 </HTML>