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