TMMIOInfo 是多媒体文件打开后的状态信息, mmioOpen 函数的第二个参数就是这个结构的指针.
现在先用到了 TMMCKInfo, 这是文件内部 "块" 的信息, 构成如下:
TMMCKInfo = ckid: FOURCC; cksize: DWORD; fccType: FOURCC; dwDataOffset: DWORD; dwFlags: DWORD; ;
查找 "块" 需要通过 mmioDescend、mmioAscend 两个函数.
mmioAscend 是从子块跳出;
mmioDescend 是进入到子块; 进入子块是需要指定子块的 ckid 和父块信息;
mmioDescend 也用来查找主块(RIFF), 此时需要很少的信息就可以找到主块.
测试代码:
Unit1; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; TForm1 = (TForm) Button1: TButton; Button2: TButton; Button1Click(Sender: TObject); Button2Click(Sender: TObject); ; Form1: TForm1; MMSystem; FilePath = ; TForm1.Button1Click(Sender: TObject); hFile: HMMIO; ckiRIFF: TMMCKInfo; FillChar(ckiRIFF, SizeOf(TMMCKInfo), ); hFile := mmioOpen(PChar(FilePath), , MMIO_READ); mmioDescend(hFile, @ckiRIFF, , MMIO_FINDRIFF ); ShowMessageFmt(, [ckiRIFF.ckid, ckiRIFF.cksize, ckiRIFF.fccType, ckiRIFF.dwDataOffset, ckiRIFF.dwFlags ]); ckiRIFF.ckid = FOURCC_RIFF ShowMessage(); ckiRIFF.fccType = mmioStringToFOURCC(,) ShowMessage(); mmioClose(hFile, ); ; TForm1.Button2Click(Sender: TObject); hFile: HMMIO; ckiRIFF,ckiSub: TMMCKInfo; n: Integer; FillChar(ckiRIFF, SizeOf(TMMCKInfo), ); FillChar(ckiSub, SizeOf(TMMCKInfo), ); hFile := mmioOpen(PChar(FilePath), , MMIO_READ); mmioDescend(hFile, @ckiRIFF, , MMIO_FINDRIFF); ckiSub.ckid := mmioStringToFOURCC(, ); mmioDescend(hFile, @ckiSub, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR ShowMessageFmt(, [ckiSub.ckid, ckiSub.cksize, ckiSub.fccType, ckiSub.dwDataOffset, ckiSub.dwFlags]); ; mmioAscend(hFile, @ckiSub, ); ckiSub.ckid := mmioStringToFOURCC(, ); mmioDescend(hFile, @ckiSub, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR ShowMessageFmt(, [ckiSub.ckid, ckiSub.cksize, ckiSub.fccType, ckiSub.dwDataOffset, ckiSub.dwFlags]); ; mmioClose(hFile, ); ; .