some corrections to libFLAC section
This commit is contained in:
parent
1c2d8c4919
commit
0f47d27c58
@ -419,9 +419,9 @@
|
||||
<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>
|
||||
<P><B><TT>libFLAC</TT></B> требует стандартную и математическую библиотеки для языка C. Программные потоки не используются, однако, так как <B><TT>libFLAC</TT></B> не использует глобальные переменные, библиотека должна быть thread-safe.</P>
|
||||
|
||||
<P>Интерфейс <B><TT>libFLAC</TT></B> описан в публичных заголовочных файлах в каталоге include/FLAC. Для использования скомпилированной библиотеки нужны только публичные заголовки. Обратите внимание на то, что код из src/libFLAC/, включая защищенные заголовочные файлы из src/libFLAC/include/ не нужен.</P>
|
||||
|
||||
@ -442,18 +442,18 @@
|
||||
|
||||
</OL>
|
||||
|
||||
<P>Для декодирования <B><TT>libFLAC</TT></B> предоставляет три уровня доступа. На нижнем уровне находится декодер потоков, далее - декодер потоков с возможностью поиска, а на верхнем - файлов. Интерфейсы описаны в файлах <TT>stream_decoder.h</TT>, <TT>seekable_stream_decoder.h</TT> и <TT>file_decoder.h</TT> соответственно. Обычно использовать стоит декодер более верхнего уровня.</P>
|
||||
|
||||
<P>Потоковый декодер рассчитывает на обратные вызовы для всего ввода и вывода и не имеет функций для поиска. Они добавлены в декодер с возможностью поиска, который является оберткой. Однако, для использования возможности пиоска вы должны добавить дополнительные обратные вызовы (seek и tell). Файловый декодер, являющийся оберткой для декодера потоков с возможностью поиска, сам осуществляет большинство обратных вызовов.</P>
|
||||
|
||||
<P>Енкодер реализован только на потоковом уровне (<TT>stream_encoder.h</TT>), так как поиск во время кодирования - довольно странная возможность.</P>
|
||||
<P>Для декодирования <B><TT>libFLAC</TT></B> предоставляет три уровня доступа. На нижнем уровне находится декодер потоков, на следующем - декодер потоков с возможностью поиска, а на верхнем - декодер файлов. Интерфейсы описаны в файлах <TT>stream_decoder.h</TT>, <TT>seekable_stream_decoder.h</TT> и <TT>file_decoder.h</TT> соответственно. Использовать лучше всего декодер более верхнего уровня.</P>
|
||||
|
||||
<P>Потоковый декодер рассчитывает на обратные вызовы для получения входных и выходных данных. Декодер с возможностью поиска является оберткой потокового декодера, предоставляющий возможность поиска, однако для его выполнения вам необходимо добавить обратные вызовы. Файловый декодер сам осуществляет обратные вызовы для чтения и предоставляет функции поиска.</P>
|
||||
|
||||
<P>Енкодер пока что реализован только на потоковом уровне (<TT>stream_encoder.h</TT>).</P>
|
||||
|
||||
<P>Структуры и константы, относящиеся к формату, определены в файле <TT>format.h</TT>.</P>
|
||||
|
||||
|
||||
|
||||
<P><B>ДЕКОДЕР ПОТОКОВ</B></P>
|
||||
|
||||
<P>Сначала обсудим декодер потоков. Тип его экземпляра <TT>FLAC__StreamDecoder</TT>. Обычно в программе экземпляр создается вызовом <TT>FLAC__stream_decoder_new()</TT> и инициализируется <TT>FLAC__stream_decoder_init()</TT>. Программа также может предоставлять указатель client_data на <TT>FLAC__stream_decoder_init()</TT>, который будет использоваться для обратных вызовов.</P>
|
||||
<P>Сначала обсудим декодер потоков. Тип его экземпляра <TT>FLAC__StreamDecoder</TT>. Обычно в программе экземпляр создается вызовом <TT>FLAC__stream_decoder_new()</TT>, затем вызывает функции <TT>FLAC__stream_decoder_set_*()</TT> для установки обратных вызовов и пользовательских данных и инициализируется функцией <TT>FLAC__stream_decoder_init()</TT>. Необходимые обратные вызовы:</P>
|
||||
|
||||
<UL>
|
||||
<LI>Обратный вызов для чтения. Эта функция вызывается, когда декодеру необходимы данные. В качестве параметров передается адрес буфера, который нужно заполнить, и его размер в байтах. Обратный вызов может вернуть меньше данных и изменить счетчик байтов, но не должен переполнять буфер. Код возврата при выходе выбирается из <TT>FLAC__StreamDecoderReadStatus</TT>.</LI>
|
||||
@ -480,15 +480,28 @@
|
||||
<P>Когда декодер заканчивает работу, экземпляр обрабатывается функцией <TT>FLAC__stream_decoder_finish()</TT>, которая проверяет состояние декодера и освобождает память. Затем экземпляр может быть удален функцией <TT>FLAC__stream_decoder_delete()</TT> или инициализирован заново для декодирования другого потока.</P>
|
||||
|
||||
<P>Обратите внимание на то, что потоковый декодер не имеет представления о позиции в потоке, он только преобразовывает данные. Чтобы осуществлять поиск в потоке функции обратного вызова могут только сбрасывать данные декодера функцией <TT>FLAC__stream_decoder_flush()</TT> и начинать подавать данные с новой позиции с помощью обратного вызова для чтения. Декодер файлов поступает именно так.</P>
|
||||
|
||||
<P><B>ДЕКОДЕР ПОТОКОВ С ВОЗМОЖНОСТЬЮ ПОИСКА</B></P>
|
||||
|
||||
<P>Декодер потоков с возможностью поиска является оберткой для стандартного декодера потоков. Тип его экземпляра - <TT>FLAC__SeekableStreamDecoder</TT>. К обраным вызовам декодера потоков для чтения, записи, работы с метаданными и обработки ошибок необходимо добавить еще следующие:</P>
|
||||
|
||||
<UL>
|
||||
<LI>Обратный вызов для поиска. Эта функция вызывается, когда декодеру нужно найти абсолютную позицию в потоке.</LI>
|
||||
<LI>Обратный вызов для определения текущей позиции. Эта функция вызывается, когда декодеру нужно узнать текущую позицию в потоке.</LI>
|
||||
<LI>Обратный вызов для определения размера потока. Функция вызывается, когда декодеру нужно узнать размер потока. Используемому алгоритму поиска требуется знать общий размер потока.</LI>
|
||||
<LI>Обратный вызов для определения конца потока. Функция вызывается, когда декодеру нужно знать, достиг ли он конца потока. Этого результата можно добиться, используя обратные вызовы для определения текущей позиции и общего размера, но такой способ может потребовать гораздо больше ресурсов.</LI>
|
||||
|
||||
<P>Поиск осущесвляется через метод <TT>FLAC__seekable_stream_decoder_seek_absolute()</TT>. В любой момент после инициализации пользовател может вызвать эту функцию для перехода к опрделенному сэмплу в потоке. Первый обратный вызов записи будет содержать (возможно, неполный) блок, начинающийся с заданного сэмпла.</P>
|
||||
|
||||
<P>Декодер потоков с возможностью поиска предоставляет проверку подписей MD5. Если ее включить перед инициализацией, функция <TT>FLAC__seekable_stream_decoder_finish()</TT> сообщит совпадает ли подпись MD5 декодированного потока с сохраненной блоке <TT>STREAMINFO</TT>. Проверка подписи MD5 автоматически отключается при попытке посика или если в блоке <TT>STREAMINFO</TT> не найдена подпись.</TT>
|
||||
|
||||
<P><B>ДЕКОДЕР ФАЙЛОВ</B></P>
|
||||
|
||||
<P>Декодер файлов - это оболочка декодера потоков, призванная упростить процесс декодирования файлов. Тип его экземпляра - <TT>FLAC__FileDecoder</TT>. Отличие от потокового декодера состоит в том, что вместо обратного вызова для чтения (который обрабатывает сам декодер) при инициализации указывается путь к файлу. Остальные функции аналогичны эквивалентам в декодере потоков.</P>
|
||||
<P>Декодер файлов - это оболочка декодера потоков с возможностью поиска, призванная упростить процесс декодирования файлов. Тип его экземпляра - <TT>FLAC__FileDecoder</TT>. Отличие от потокового декодера состоит в том, что вместо обратного вызова для чтения (который обрабатывает сам декодер) при инициализации указывается путь к файлу. Выполнение остальных функций декодер берет на себя.</P>
|
||||
|
||||
<P>Так как декодер файлов сам управляет входными данными, он может предоставить и поиск. Он осуществляется методом <TT>FLAC__file_decoder_seek_absolute()</TT>. В любой момент после инициализации декодера файлов программа может вызвать эту функцию для поиска сэмпла в файле. Впоследствии, при первом обратном вызове для записи он будет содержать (возжожно неполный) блок, начинающийся с этого сэмпла.</P>
|
||||
<P>Аналогично декодеру потоков с возможностью поиска он предоставляет поиск через метод <TT>FLAC__file_decoder_seek_absolute()</TT>. В любой момент после инициализации декодера файлов программа может вызвать эту функцию для поиска сэмпла в файле. Впоследствии, при первом обратном вызове для записи он будет содержать (возжожно неполный) блок, начинающийся с этого сэмпла.</P>
|
||||
|
||||
<P>Декодер файлов также предоставляет проверку подписи MD5. Если эта возможность будет включена перед инициализацией, <TT>FLAC__file_decoder_finish()</TT> сообщит, если подпись MD5 распакованных данных не совпадет с сохраненной в блоке STREAMINFO. Проверка MD5 автоматически выключается, если в блоке STREAMINFO нет подписи или при попытке осуществления поиска.
|
||||
<P>От декодера потоков с возможностью поиска также наследуется проверка подписи MD5. Если эта возможность будет включена перед инициализацией, <TT>FLAC__file_decoder_finish()</TT> сообщит, если подпись MD5 распакованных данных не совпадет с сохраненной в блоке STREAMINFO. Проверка MD5 автоматически выключается, если в блоке STREAMINFO нет подписи или при попытке осуществления поиска.
|
||||
|
||||
|
||||
<P><B>ЕНКОДЕР ПОТОКОВ</B></P>
|
||||
@ -588,7 +601,7 @@
|
||||
<LI>WavPack - скопируйте <B><TT>flac_mac.exe</TT></B> поверх <B><TT>External/wavpack.exe</TT></B> и <B><TT>External/wvunpack.exe</TT></B></LI>
|
||||
<LI>RKAU - скопируйте <B><TT>flac_mac.exe</TT></B> поверх <B><TT>External/rkau.exe</TT></B></LI>
|
||||
</UL>
|
||||
Если выбртаь WavPack, то для изменения опций FLAC будет доступно меню настройки WavPack Configuration.</LI>
|
||||
Если выбрать WavPack, то для изменения опций FLAC будет доступно меню настройки WavPack Configuration.</LI>
|
||||
<LI>Теперь можно кодировать в формат FLAC. Переименованный файл <B><TT>flac_mac.exe</TT></B> вызывает <B><TT>flac.exe</TT></B>, а затем <B><TT>flac_ren.exe</TT></B> для присвоения получаемому файлу расширения .flac.</LI>
|
||||
</UL>
|
||||
</P>
|
||||
|
Loading…
Reference in New Issue
Block a user