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

UptoLike

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

LPSTR lpWaveData, // буфер исходных данных
DWORD dwWaveDataSize, // объем данных в буфере
DWORD dwSamplesPerSec ) // частота оцифровки
{
HMMIO hmmio; // дескриптор файла
MMCKINFO mmckinfoWave; // описание блока
WAVE MMCKINFO mmckinfoFmt; // описание блока fmt
MMCKINFO mmckinfoData; // описание блока data
PCMWAVEFORMAT pcmWaveFormat; // содержимое блока fmt
LONG lFmtSize; // размер блока fmt
LONG lDataSize; // размер блока data
/* открыть файл для записи */
hmmio = mmioOpen( lpszFileName, NULL, MMIO_ALLOCBUF |
MMIO_WRITE | MMIO_CREATE );
if( hmmio == NULL )
{
ReportError( hWnd, IDS_CANTOPENFILE );
return( FALSE ) ;
}
/* создать блок RIFF формата WAVE */
mmckinfoWave.fccType = mmioFOURCC( 'W','A','V,'E' );
if( mmioCreateChunk(hmmio, SmmckinfoWave, MMIO CREATERIFF)!= 0
)
{
ReportError( hWpd, IDS_CANTWRITEWAVE );
mmioClose( hmmio, 0);
return( FALSE ) ;
}
Флаги команды mmioOpen сообщают системе о том, что мы хотим
буферизовать операции с файлом, осуществлять запись, а не чтение, и что
необходимо создать файл, если он еще не существует. Функция
mmioCreateChunk предполагает задание трех параметров: дескриптора файла,
структуры с описанием нового блока и необязательного флага, определяющего
тип блока.
Структура MMCKINFO
имеет поле, называющееся dwDataOffset.
Функция mmioCreateChunk записывает в него значение, указывающее позицию
внутри файла, в которой начинается область данных нового блока.
Функция mmioCreateChunk не может вставлять новые блоки в середину
файла. Если указатель текущей позиции находится не в конце файла, запись
произойдет поверх старых данных.
Сформировав основной блок RIFF,
на следующем этапе создаем и
инициализируем вложенный блок format:
82
                LPSTR lpWaveData, // буфер исходных данных
                DWORD dwWaveDataSize, // объем данных в буфере
                DWORD dwSamplesPerSec ) // частота оцифровки
{
     HMMIO           hmmio;        // дескриптор файла
     MMCKINFO mmckinfoWave; // описание блока
     WAVE MMCKINFO mmckinfoFmt; // описание блока fmt
     MMCKINFO mmckinfoData; // описание блока data
     PCMWAVEFORMAT pcmWaveFormat; // содержимое блока fmt
     LONG           lFmtSize;    // размер блока fmt
     LONG           lDataSize;   // размер блока data
          /* открыть файл для записи */
     hmmio = mmioOpen( lpszFileName, NULL, MMIO_ALLOCBUF |
                               MMIO_WRITE | MMIO_CREATE );
     if( hmmio == NULL )
     {
             ReportError( hWnd, IDS_CANTOPENFILE );
             return( FALSE ) ;
     }
          /* создать блок RIFF формата WAVE */
     mmckinfoWave.fccType = mmioFOURCC( 'W','A','V,'E' );
     if( mmioCreateChunk(hmmio, SmmckinfoWave, MMIO CREATERIFF)!= 0
)
     {
          ReportError( hWpd, IDS_CANTWRITEWAVE );
          mmioClose( hmmio, 0);
          return( FALSE ) ;
     }

      Флаги команды mmioOpen сообщают системе о том, что мы хотим
буферизовать операции с файлом, осуществлять запись, а не чтение, и что
необходимо создать файл, если он еще не существует. Функция
mmioCreateChunk предполагает задание трех параметров: дескриптора файла,
структуры с описанием нового блока и необязательного флага, определяющего
тип блока.
      Структура MMCKINFO имеет поле, называющееся dwDataOffset.
Функция mmioCreateChunk записывает в него значение, указывающее позицию
внутри файла, в которой начинается область данных нового блока.
      Функция mmioCreateChunk не может вставлять новые блоки в середину
файла. Если указатель текущей позиции находится не в конце файла, запись
произойдет поверх старых данных.
      Сформировав основной блок RIFF, на следующем этапе создаем и
инициализируем вложенный блок format:


                                   82