DSound

导读:

  nt DSound_Load_Wav(char* filename,int control_flags)

  {

  HMMIO handle ;

  MMCKINFO mmckriff,mmckIn;

  PCMWAVEFORMAT pwfm;

  memset(&mmckriff,0,sizeof(MMCKINFO));

  if((handle= mmioOpen(filename,NULL,MMIO_READ|MMIO_ALLOCBUF))==NULL)

  return 0;

  //--------------------------------------------

  //进入块(chunk),查找 riff和wave的标记

  //----------------------------------------------

  if(0 !=mmioDescend(handle,&mmckriff,NULL,0))

  {

  mmioClose(handle,0);

  return -1;

  }

  //-----------------------------------------

  //#define FOURCC_RIFF mmioFOURCC('R','I','F','F')

  //----------------------------------------------

  if(mmckriff.ckid !=FOURCC_RIFF||mmckriff.fccType !=mmioFOURCC('W','A','V','E'))

  {

  mmioClose(handle,0);

  return -1;

  }

  /

  //查找 fmt 块

  

  mmckIn.ckid = mmioFOURCC('f','m','t',' ');

  if(0 !=mmioDescend(handle,&mmckIn,&mmckriff,MMIO_FINDCHUNK))

  {

  mmioClose(handle,0);

  return -1;

  }

  

  //fmt块的格式与PCMWAVEFORMAT 的格式定义相同

  //所以读入临时变量,最后写入 wmtf中

  

  if(mmioRead(handle,(HPSTR)&pwfm,sizeof(PCMWAVEFORMAT))!=sizeof(PCMWAVEFORMAT))

  {

  mmioClose(handle,0);

  return -1;

  }

  

  //检测是不是 pc的wave标准格式

  //

  //

  if(pwfm.wf.wFormatTag != WAVE_FORMAT_PCM)

  {

  mmioClose(handle,0);

  return -1;

  }

  /

  //给wmfx赋值

  /

  memcpy(&wfmx,&pwfm,sizeof(pwfm));

  wfmx.cbSize =0;

  if(0 != mmioAscend(handle,&mmckIn,0))

  {

  mmioClose(handle,0);

  return -1;

  }

  /

  //查找 data chunk

  /

  mmckIn.ckid = mmioFOURCC('d','a','t','a');

  

  if(0 !=mmioDescend(handle,&mmckIn,&mmckriff,MMIO_FINDCHUNK))

  {

  mmioClose(handle,0);

  return -1;

  }

  sndBuffer = new UCHAR[mmckIn.cksize];

  /

  //数据写入sndBuffer

  /

  mmioRead(handle,(HPSTR)sndBuffer,mmckIn.cksize);

  mmioClose(handle,0);



本文转自

http://soa.5d6d.com/redirect.php?fid=11&tid=51&goto=nextnewset
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值