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

UptoLike

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

MessageBox( hWnd, szErrStr, szCaption, MB_ICONEXCLAMATION |
MB_OK );
return;
}
3. Рассмотреть модуль ММIO.
Если бы программа ShowWave только
записывала и воспроизводила звуки, модуль ММIO не использовался бы. Но
нам необходимо также манипулировать данными непосредственно в
аудиофайлах. В частности, для графического отображения звукового сигнала
необходимо читать выборки из WAV-файла. Кроме того, поскольку
пользователь имеет возможность модифицировать звукозаписи, находящиеся в
памяти, иногда программа ShowWave должна сохранять данные в виде нового
файла. Модуль ММIO содержит одну функцию для чтения данных, одну - для
записи и одну - для обработки ошибок, связанных с файлами.
Чтение WAV-файла. Функция ReadWaveData загружает все данные из
WAV-файла в память. Она выполняет следующие операции:
открытие файла;
поиск WAVE-блока;
поиск вложенного fmt-блока и проверка того, в подходящем ли формате
записан звук;
поиск вложенного data-блока и загрузка его в память;
закрытие файла.
/*---------------------------------------------------
READ WAVE DATA Чтение звукозаписи из RIFF-файла в память.
Возвращает TRUE при успешном заполнении буфера;
в противном случае возвращается FALSE.
Если функция возвращает TRUE, значит, в последних
трех параметрах содержится информация о новом буфере.
----------------------------------------------------------------*/
BOOL ReadWaveData( HWND hWnd,
LPSTR lpszFileName,
LPSTR *lplpWaveData, // указатель на буфер
DWORD *lpdwWaveDataSize, // размер буфера
DWORD *lpdwSamplesPerSec ) // частота оцифровки
{
HMMIO hmmio; // дескриптор файла
MMCKINFO mmckinfoWave; // описание блока WAVE
MMCKINFO mmckinfoFrnt; // описание блока fmt
MMCKINFO mmckinfoData; // описание блока data
PCMWAVEFORMAT pcmWaveFormat; // содержимое блока fmt
LONG lFmtSize; // размер блока fmt
LONG lDataSize; // размер блока data
LPSTR lpData; // указатель на буфер данных
77
      MessageBox( hWnd, szErrStr, szCaption, MB_ICONEXCLAMATION |
                     MB_OK );
      return;
}

     3. Рассмотреть модуль ММIO. Если бы программа ShowWave только
записывала и воспроизводила звуки, модуль ММIO не использовался бы. Но
нам необходимо также манипулировать данными непосредственно в
аудиофайлах. В частности, для графического отображения звукового сигнала
необходимо читать выборки из WAV-файла. Кроме того, поскольку
пользователь имеет возможность модифицировать звукозаписи, находящиеся в
памяти, иногда программа ShowWave должна сохранять данные в виде нового
файла. Модуль ММIO содержит одну функцию для чтения данных, одну - для
записи и одну - для обработки ошибок, связанных с файлами.
     Чтение WAV-файла. Функция ReadWaveData загружает все данные из
WAV-файла в память. Она выполняет следующие операции:
• открытие файла;
• поиск WAVE-блока;
• поиск вложенного fmt-блока и проверка того, в подходящем ли формате
   записан звук;
• поиск вложенного data-блока и загрузка его в память;
• закрытие файла.

/*---------------------------------------------------
READ WAVE DATA Чтение звукозаписи из RIFF-файла в память.
Возвращает TRUE при успешном заполнении буфера;
в противном случае возвращается FALSE.
Если функция возвращает TRUE, значит, в последних
трех параметрах содержится информация о новом буфере.
----------------------------------------------------------------*/
BOOL ReadWaveData( HWND hWnd,
                       LPSTR lpszFileName,
                       LPSTR *lplpWaveData,              // указатель на буфер
                       DWORD *lpdwWaveDataSize, // размер буфера
                       DWORD *lpdwSamplesPerSec ) // частота оцифровки
{
        HMMIO            hmmio;             // дескриптор файла
        MMCKINFO mmckinfoWave; // описание блока WAVE
        MMCKINFO mmckinfoFrnt; // описание блока fmt
        MMCKINFO mmckinfoData; // описание блока data
        PCMWAVEFORMAT pcmWaveFormat; // содержимое блока fmt
        LONG           lFmtSize;          // размер блока fmt
        LONG           lDataSize;         // размер блока data
        LPSTR          lpData;          // указатель на буфер данных
                                          77