Библиотека libFLAC является реализацией на C базового енкодера и декодера. Используя эту библиотеку и написав немного кода, можно добавить поддержку FLAC в свою программу. Условия распространения - LGPL. Исходные коды библиотеки libFLAC, также как и консольного кодека и плагинов доступны, и могут послужить хорошим примером для использования.
+Библиотека libFLAC является реализацией на C базового енкодера и декодера. Используя эту библиотеку и написав немного кода, можно добавить поддержку FLAC в свою программу. Условия ее распространения - LGPL. Исходные тексты библиотеки libFLAC, также как и консольного кодека и плагинов, доступны, и могут послужить хорошим примером для использования.
-libFLAC требует стандартную и математическую библиотеки для языка C. Потоки не используются, однако, так как libFLAC не использует глобальные переменные, библиотека должна быть thread-safe.
+libFLAC требует стандартную и математическую библиотеки для языка C. Программные потоки не используются, однако, так как libFLAC не использует глобальные переменные, библиотека должна быть thread-safe.
Интерфейс libFLAC описан в публичных заголовочных файлах в каталоге include/FLAC. Для использования скомпилированной библиотеки нужны только публичные заголовки. Обратите внимание на то, что код из src/libFLAC/, включая защищенные заголовочные файлы из src/libFLAC/include/ не нужен.
@@ -442,18 +442,18 @@ -Для декодирования libFLAC предоставляет три уровня доступа. На нижнем уровне находится декодер потоков, далее - декодер потоков с возможностью поиска, а на верхнем - файлов. Интерфейсы описаны в файлах stream_decoder.h, seekable_stream_decoder.h и file_decoder.h соответственно. Обычно использовать стоит декодер более верхнего уровня.
- -Потоковый декодер рассчитывает на обратные вызовы для всего ввода и вывода и не имеет функций для поиска. Они добавлены в декодер с возможностью поиска, который является оберткой. Однако, для использования возможности пиоска вы должны добавить дополнительные обратные вызовы (seek и tell). Файловый декодер, являющийся оберткой для декодера потоков с возможностью поиска, сам осуществляет большинство обратных вызовов.
- -Енкодер реализован только на потоковом уровне (stream_encoder.h), так как поиск во время кодирования - довольно странная возможность.
+Для декодирования libFLAC предоставляет три уровня доступа. На нижнем уровне находится декодер потоков, на следующем - декодер потоков с возможностью поиска, а на верхнем - декодер файлов. Интерфейсы описаны в файлах stream_decoder.h, seekable_stream_decoder.h и file_decoder.h соответственно. Использовать лучше всего декодер более верхнего уровня.
+ +Потоковый декодер рассчитывает на обратные вызовы для получения входных и выходных данных. Декодер с возможностью поиска является оберткой потокового декодера, предоставляющий возможность поиска, однако для его выполнения вам необходимо добавить обратные вызовы. Файловый декодер сам осуществляет обратные вызовы для чтения и предоставляет функции поиска.
+ +Енкодер пока что реализован только на потоковом уровне (stream_encoder.h).
Структуры и константы, относящиеся к формату, определены в файле format.h.
- +ДЕКОДЕР ПОТОКОВ
-Сначала обсудим декодер потоков. Тип его экземпляра FLAC__StreamDecoder. Обычно в программе экземпляр создается вызовом FLAC__stream_decoder_new() и инициализируется FLAC__stream_decoder_init(). Программа также может предоставлять указатель client_data на FLAC__stream_decoder_init(), который будет использоваться для обратных вызовов.
+Сначала обсудим декодер потоков. Тип его экземпляра FLAC__StreamDecoder. Обычно в программе экземпляр создается вызовом FLAC__stream_decoder_new(), затем вызывает функции FLAC__stream_decoder_set_*() для установки обратных вызовов и пользовательских данных и инициализируется функцией FLAC__stream_decoder_init(). Необходимые обратные вызовы:
Когда декодер заканчивает работу, экземпляр обрабатывается функцией FLAC__stream_decoder_finish(), которая проверяет состояние декодера и освобождает память. Затем экземпляр может быть удален функцией FLAC__stream_decoder_delete() или инициализирован заново для декодирования другого потока.
Обратите внимание на то, что потоковый декодер не имеет представления о позиции в потоке, он только преобразовывает данные. Чтобы осуществлять поиск в потоке функции обратного вызова могут только сбрасывать данные декодера функцией FLAC__stream_decoder_flush() и начинать подавать данные с новой позиции с помощью обратного вызова для чтения. Декодер файлов поступает именно так.
+ +ДЕКОДЕР ПОТОКОВ С ВОЗМОЖНОСТЬЮ ПОИСКА
+Декодер потоков с возможностью поиска является оберткой для стандартного декодера потоков. Тип его экземпляра - FLAC__SeekableStreamDecoder. К обраным вызовам декодера потоков для чтения, записи, работы с метаданными и обработки ошибок необходимо добавить еще следующие:
+ +Поиск осущесвляется через метод FLAC__seekable_stream_decoder_seek_absolute(). В любой момент после инициализации пользовател может вызвать эту функцию для перехода к опрделенному сэмплу в потоке. Первый обратный вызов записи будет содержать (возможно, неполный) блок, начинающийся с заданного сэмпла.
+ +Декодер потоков с возможностью поиска предоставляет проверку подписей MD5. Если ее включить перед инициализацией, функция FLAC__seekable_stream_decoder_finish() сообщит совпадает ли подпись MD5 декодированного потока с сохраненной блоке STREAMINFO. Проверка подписи MD5 автоматически отключается при попытке посика или если в блоке STREAMINFO не найдена подпись.
ДЕКОДЕР ФАЙЛОВ
-Декодер файлов - это оболочка декодера потоков, призванная упростить процесс декодирования файлов. Тип его экземпляра - FLAC__FileDecoder. Отличие от потокового декодера состоит в том, что вместо обратного вызова для чтения (который обрабатывает сам декодер) при инициализации указывается путь к файлу. Остальные функции аналогичны эквивалентам в декодере потоков.
+Декодер файлов - это оболочка декодера потоков с возможностью поиска, призванная упростить процесс декодирования файлов. Тип его экземпляра - FLAC__FileDecoder. Отличие от потокового декодера состоит в том, что вместо обратного вызова для чтения (который обрабатывает сам декодер) при инициализации указывается путь к файлу. Выполнение остальных функций декодер берет на себя.
-Так как декодер файлов сам управляет входными данными, он может предоставить и поиск. Он осуществляется методом FLAC__file_decoder_seek_absolute(). В любой момент после инициализации декодера файлов программа может вызвать эту функцию для поиска сэмпла в файле. Впоследствии, при первом обратном вызове для записи он будет содержать (возжожно неполный) блок, начинающийся с этого сэмпла.
+Аналогично декодеру потоков с возможностью поиска он предоставляет поиск через метод FLAC__file_decoder_seek_absolute(). В любой момент после инициализации декодера файлов программа может вызвать эту функцию для поиска сэмпла в файле. Впоследствии, при первом обратном вызове для записи он будет содержать (возжожно неполный) блок, начинающийся с этого сэмпла.
-Декодер файлов также предоставляет проверку подписи MD5. Если эта возможность будет включена перед инициализацией, FLAC__file_decoder_finish() сообщит, если подпись MD5 распакованных данных не совпадет с сохраненной в блоке STREAMINFO. Проверка MD5 автоматически выключается, если в блоке STREAMINFO нет подписи или при попытке осуществления поиска. +
От декодера потоков с возможностью поиска также наследуется проверка подписи MD5. Если эта возможность будет включена перед инициализацией, FLAC__file_decoder_finish() сообщит, если подпись MD5 распакованных данных не совпадет с сохраненной в блоке STREAMINFO. Проверка MD5 автоматически выключается, если в блоке STREAMINFO нет подписи или при попытке осуществления поиска.
ЕНКОДЕР ПОТОКОВ
@@ -588,7 +601,7 @@