Wave 文件(4): 获取 Wave 文件主块与子块的信息

有两个相关的结构体: TMMIOInfo、TMMCKInfo.

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, );
;

.

转载于:https://www.cnblogs.com/lzh-boy/archive/2010/01/13/1646575.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值