Операционные системы. Учебное пособие. Марапулец Ю.В. - 229 стр.

UptoLike

Составители: 

вах и номере версии или содержаться список признаков (cues), т.е. позиций в файле, свя-
занных с определенными событиями внутри других блоков или других файлов.
Блоки RIFF отличаются от большинства блоков тем, что их поля данных (т.е. раз-
дел двоичных данных) всегда начинаются с четырехсимвольного кода, обозначающего
тип содержимого файла: звукозапись (WAVE), MIDI-файл (RMID), DIB-файл (RDIB),
видеоклип (RMMP) или палитра (PAL).
Поскольку в RIFF-файлах содержится так много четырехсимвольных кодов, суще-
ствует специальная макрокоманда mmioFOURCC, предназначенная для создания этих
кодов. Приведенная ниже команда записывает тег RIFF в одно из полей информацион-
ной структуры:
MMCKINFO mmckinfo.ckid = mmioFOURCC ( 'R', 'I', 'F', 'F' );
Структура MMCKINFO содержит информацию, описывающую отдельный блок
данных. При чтении данных система заполняет поля описанием текущего блока. При
записи данных вы заполняете информацию, которая необходима системе для сохране-
ния-блока.
typedef struct _MMCKINFO /* структура блока данных RIFF-файла */
{
FOURCC ckid; // идентификатор блока
DWORD cksize; // размер блока
FOURCC fccType; // тип или список типов
DWORD dwDataOffset; // смещение блока данных в файле
DWORD dwFlags; // флаги, используемые MMIO-функциями
} MMCKINFO;
FOURCC представляет собой новый тип данных, основанный на типе DWORD
(каждый символ кода записывается в один из четырех байтов). Третье поле, fccType,
представляет собой тег типа содержимого, который следует после каждого тега RIFF.
Поле fccType отсутствует в блоках, не имеющих идентификатора RIFF. На рис. 9.1 пока-
зана связь между родительским и вложенным блоками RIFF-файла [12].
Рис. 9.1.Структура RIFF-файла
Как ранее указывалось, специализированный набор API-функций для мультимедиа
содержится в подсистеме WinMM. Эти функции ориентированы на работу с блочной
структурой RIFF-файлов. Кроме того, они обеспечивают буферизацию доступа к фай-
лам. Рассмотрим основные функции интерфейса.
9.3.1. API-функции для обработки RIFF-файла
231
вах и номере версии или содержаться список признаков (cues), т.е. позиций в файле, свя-
занных с определенными событиями внутри других блоков или других файлов.
      Блоки RIFF отличаются от большинства блоков тем, что их поля данных (т.е. раз-
дел двоичных данных) всегда начинаются с четырехсимвольного кода, обозначающего
тип содержимого файла: звукозапись (WAVE), MIDI-файл (RMID), DIB-файл (RDIB),
видеоклип (RMMP) или палитра (PAL).
      Поскольку в RIFF-файлах содержится так много четырехсимвольных кодов, суще-
ствует специальная макрокоманда mmioFOURCC, предназначенная для создания этих
кодов. Приведенная ниже команда записывает тег RIFF в одно из полей информацион-
ной структуры:

MMCKINFO mmckinfo.ckid = mmioFOURCC ( 'R', 'I', 'F', 'F' );

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

typedef struct _MMCKINFO         /* структура блока данных RIFF-файла */
{
       FOURCC ckid;              // идентификатор блока
       DWORD cksize;             // размер блока
       FOURCC fccType;           // тип или список типов
       DWORD dwDataOffset;       // смещение блока данных в файле
       DWORD dwFlags;            // флаги, используемые MMIO-функциями
} MMCKINFO;

      FOURCC представляет собой новый тип данных, основанный на типе DWORD
(каждый символ кода записывается в один из четырех байтов). Третье поле, fccType,
представляет собой тег типа содержимого, который следует после каждого тега RIFF.
Поле fccType отсутствует в блоках, не имеющих идентификатора RIFF. На рис. 9.1 пока-
зана связь между родительским и вложенным блоками RIFF-файла [12].




                              Рис. 9.1.Структура RIFF-файла

     Как ранее указывалось, специализированный набор API-функций для мультимедиа
содержится в подсистеме WinMM. Эти функции ориентированы на работу с блочной
структурой RIFF-файлов. Кроме того, они обеспечивают буферизацию доступа к фай-
лам. Рассмотрим основные функции интерфейса.

     9.3.1. API-функции для обработки RIFF-файла

                                          231