Составители:
Для поиска первого фрагмента заполняется только одно поле
информационной структуры: 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
- …
- следующая ›
- последняя »
