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

UptoLike

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

LPMMCKINFO lpnunckiParent, // необязательная структура
// родительского блока
UINT uSearch ); // флаги поиска
MMRESULT mmioAscend( HMMIO hmmio, // дескриптор RIFF-файла
LPMMCKINFO lpmmcki, // место для записи
// информации о блоке
UINT uReserved ); // зарезервирован;
// должен содержать 0
Функция mmioDescend() возвращает информацию о блоке в параметре lpmmcki.
Можно также заставить ее выполнять поиск блоков определенного типа. Для инициации
такого поиска последний параметр должен содержать значение MMIO_FINDCHUNK,
MMIO_FINDLIST или MMIO_FINDRIFF. Поиск начинается с текущей позиции в
файле и завершается в конце файла. Функция mmioAscend(), помимо перемещения к
концу блока, помогает формировать новые блоки. Она вызывается после записи новых
данных, выравнивая блок по четному байту и записывая объем данных в заголовок бло-
ка.
Каждая звукозапись в RIFF-файле должна содержать блок, помеченный тегом fmt.
(Теги, состоящие из символов нижнего регистра, обозначают вложенные блоки.) Струк-
тура PCMWAVEFORMAT определяет содержимое этого блока:
/* универсальный формат файла звукозаписи (информация, общая для всех форматов) */
typedef struct waveformat_tag
{
WORD wFormatTag; // тип формата
WORD nChannels; // количество каналов (1= моно; 2 = стерео)
DWORD nSamplesPerSec; // частота оцифровки
DWORD nAvgBytesPerSec; //необходимо для оценки размера буфера
WORD nBlockAlign; // размер блока данных
} WAVEFORMAT;
/* структура формата звукозаписи, специфичная для РСМ-данных */
typedef struct pcmwaveformat_tag
{
WAVEFORMAT wf;
WORD wBitsPerSample;
}
PCMWAVEFORMAT;
В настоящее время для WAV-файлов определен только один формат - импульсно-
кодовая модуляция РСМ, поэтому поле wFormatTag структуры WAVEFORMAT должно
содержать значение WAVE_FORMAT_PCM.
В структуре PCMWAVEFORMAT к общему формату WAV-данных добавлено по-
ле wBitsPerSample, указывающее разрядность выборки. Это поле определяет объем па-
мяти, необходимый для записи каждой выборки. Обычно используются значения 8 и 16
битов. Монофоническая звукозапись длительностью в 1 секунду, оцифрованная с часто-
той 11 кГц и разрядностью 8 битов, содержит 11000 выборок, т.е. занимает объем при-
мерно 11 Кб. При стереофонической звукозаписи происходит одновременная оцифровка
сигналов в двух каналах. Если разрядность выборок в каждом из них равна 8 битам, то
разрядность суммарной выборки составляет 16 битов. Объем стереофонической звуко-
233
                          LPMMCKINFO lpnunckiParent, // необязательная структура
                                                // родительского блока
                          UINT uSearch );       // флаги поиска

MMRESULT mmioAscend( HMMIO hmmio,        // дескриптор RIFF-файла
                     LPMMCKINFO lpmmcki, // место для записи
                                         // информации о блоке
                     UINT uReserved );   // зарезервирован;
                                         // должен содержать 0

     Функция mmioDescend() возвращает информацию о блоке в параметре lpmmcki.
Можно также заставить ее выполнять поиск блоков определенного типа. Для инициации
такого поиска последний параметр должен содержать значение MMIO_FINDCHUNK,
MMIO_FINDLIST или MMIO_FINDRIFF. Поиск начинается с текущей позиции в
файле и завершается в конце файла. Функция mmioAscend(), помимо перемещения к
концу блока, помогает формировать новые блоки. Она вызывается после записи новых
данных, выравнивая блок по четному байту и записывая объем данных в заголовок бло-
ка.
     Каждая звукозапись в RIFF-файле должна содержать блок, помеченный тегом fmt.
(Теги, состоящие из символов нижнего регистра, обозначают вложенные блоки.) Струк-
тура PCMWAVEFORMAT определяет содержимое этого блока:

/* универсальный формат файла звукозаписи (информация, общая для всех форматов) */
typedef struct waveformat_tag
{
       WORD wFormatTag;         // тип формата
       WORD nChannels;          // количество каналов (1= моно; 2 = стерео)
       DWORD nSamplesPerSec; // частота оцифровки
       DWORD nAvgBytesPerSec; //необходимо для оценки размера буфера
       WORD nBlockAlign;        // размер блока данных
} WAVEFORMAT;

/* структура формата звукозаписи, специфичная для РСМ-данных */
typedef struct pcmwaveformat_tag
{
       WAVEFORMAT wf;
       WORD wBitsPerSample;
}
PCMWAVEFORMAT;

     В настоящее время для WAV-файлов определен только один формат - импульсно-
кодовая модуляция РСМ, поэтому поле wFormatTag структуры WAVEFORMAT должно
содержать значение WAVE_FORMAT_PCM.
     В структуре PCMWAVEFORMAT к общему формату WAV-данных добавлено по-
ле wBitsPerSample, указывающее разрядность выборки. Это поле определяет объем па-
мяти, необходимый для записи каждой выборки. Обычно используются значения 8 и 16
битов. Монофоническая звукозапись длительностью в 1 секунду, оцифрованная с часто-
той 11 кГц и разрядностью 8 битов, содержит 11000 выборок, т.е. занимает объем при-
мерно 11 Кб. При стереофонической звукозаписи происходит одновременная оцифровка
сигналов в двух каналах. Если разрядность выборок в каждом из них равна 8 битам, то
разрядность суммарной выборки составляет 16 битов. Объем стереофонической звуко-


                                       233