Составители:
Для поиска первого фрагмента заполняется только одно поле
информационной структуры: fccType. Поле ckid (идентификатор блока) должно
содержать значение RIFF,
но флаг MMIO_FINDRIFF и так указывает цель этого
поиска. Команда mmioDescend распознает также еще три флага:
MMIO_FINDCHUNK,
MMIO_FINDRIFF и MMIO_FINDLIST. Флаг
MMIO_FINDCHUNK указывает, что поиск необходимо осуществлять по
содержимому поля ckid, а остальные флаги говорят о том, что поле fccType
соответствует блоку RIFF
или LIST.
Функция mmioDescend принимает четыре параметра: дескриптор файла,
описание искомого блока, описание его родительского блока и несколько флагов.
Блоки RIFF
не имеют родительских блоков, поэтому третье поле мы оставляем
пустым (значение NULL).
Блок формата всегда является вложенным в другой
родительский блок. Вложенные блоки могут быть только у блоков RIFF
и LIST.
Для поиска вложенного блока формата мы записываем значение fmt в
информационную структуру искомого блока и значение WAVE
в
информационную структуру родительского блока. По достижении конца
текущего блока WAVE
функция mmioDescend прекратит поиск метки fmt. Это
может случиться только в том случае, если файл поврежден и его нельзя
использовать, поскольку интерпретировать блок WAVE
без спецификаций его
формата невозможно.
Вторая команда mmioDescend оставляет указатель файла в начале
вложенного блока формата. Затем мы загружаем информацию о формате в
память для проверки.
/* чтение вложенного блока формата */
lFmtSize = (LONG)sizeof( pcmWaveFormat );
if( mmioRead( hmmio, (LPSTR)&pcmWaveFormat, lFmtSize ) != lFmtSize )
{
ReportError( hWnd, IDS_CANTREADFORMAT ) ;
mmioClose ( hmmio, 0 );
return( FALSE ) ;
}
/* выход из вложенного блока в родительский блок */
if( mmioAscend( hmmio, SmrnckinfoFrnt, 0 ) != 0 )
{
ReportError( hWnd, IDS_CANTREADFORMAT );
mmioClose ( hmmio, 0 ) ;
return( FALSE ) ;
}
/* проверка того, действительно ли файл представляет собой WAV-файл
в 8-разрядном РСМ-формате (моно) */
if((pcmWaveFormat.wf.wFormatTag!=WAVE_FORMAT_PCM)||
( pcmWaveFormat .wf.nChannels != 1 ) ||
( pcmWaveFormat.wBitsPerSample != 8 ))
79
Для поиска первого фрагмента заполняется только одно поле информационной структуры: fccType. Поле ckid (идентификатор блока) должно содержать значение RIFF, но флаг MMIO_FINDRIFF и так указывает цель этого поиска. Команда mmioDescend распознает также еще три флага: MMIO_FINDCHUNK, MMIO_FINDRIFF и MMIO_FINDLIST. Флаг MMIO_FINDCHUNK указывает, что поиск необходимо осуществлять по содержимому поля ckid, а остальные флаги говорят о том, что поле fccType соответствует блоку RIFF или LIST. Функция mmioDescend принимает четыре параметра: дескриптор файла, описание искомого блока, описание его родительского блока и несколько флагов. Блоки RIFF не имеют родительских блоков, поэтому третье поле мы оставляем пустым (значение NULL). Блок формата всегда является вложенным в другой родительский блок. Вложенные блоки могут быть только у блоков RIFF и LIST. Для поиска вложенного блока формата мы записываем значение fmt в информационную структуру искомого блока и значение WAVE в информационную структуру родительского блока. По достижении конца текущего блока WAVE функция mmioDescend прекратит поиск метки fmt. Это может случиться только в том случае, если файл поврежден и его нельзя использовать, поскольку интерпретировать блок WAVE без спецификаций его формата невозможно. Вторая команда mmioDescend оставляет указатель файла в начале вложенного блока формата. Затем мы загружаем информацию о формате в память для проверки. /* чтение вложенного блока формата */ lFmtSize = (LONG)sizeof( pcmWaveFormat ); if( mmioRead( hmmio, (LPSTR)&pcmWaveFormat, lFmtSize ) != lFmtSize ) { ReportError( hWnd, IDS_CANTREADFORMAT ) ; mmioClose ( hmmio, 0 ); return( FALSE ) ; } /* выход из вложенного блока в родительский блок */ if( mmioAscend( hmmio, SmrnckinfoFrnt, 0 ) != 0 ) { ReportError( hWnd, IDS_CANTREADFORMAT ); mmioClose ( hmmio, 0 ) ; return( FALSE ) ; } /* проверка того, действительно ли файл представляет собой WAV-файл в 8-разрядном РСМ-формате (моно) */ if((pcmWaveFormat.wf.wFormatTag!=WAVE_FORMAT_PCM)|| ( pcmWaveFormat .wf.nChannels != 1 ) || ( pcmWaveFormat.wBitsPerSample != 8 )) 79
Страницы
- « первая
- ‹ предыдущая
- …
- 77
- 78
- 79
- 80
- 81
- …
- следующая ›
- последняя »